Reagera på ändringshändelser för Azure Policy-tillstånd
Med Azure Policy-händelser kan program reagera på tillståndsändringar. Den här integreringen görs utan att det behövs komplicerad kod eller dyra och ineffektiva avsökningstjänster. I stället skickas händelser via Azure Event Grid till prenumeranter som Azure Functions, Azure Logic Apps eller till och med till din egen anpassade HTTP-lyssnare. Kritiskt är att du bara betalar för det du använder.
Azure Policy-händelser skickas till Azure Event Grid, som tillhandahåller tillförlitliga leveranstjänster till dina program genom omfattande återförsöksprinciper och leverans med obeställbara meddelanden. Event Grid tar hand om korrekt routning, filtrering och multicasting av händelser till mål via Event Grid-prenumerationer. Mer information finns i Leverans av Event Grid-meddelanden och försök igen.
Kommentar
Ändringshändelser för Azure Policy-tillstånd skickas till Event Grid när en utvärderingsutlösare har slutfört resursutvärderingen.
Event Grid-meddelanden för ändringar i resursefterlevnadstillstånd kan ta upp till 20 minuter.
Event Grid-fördelar
Event Grid har några fördelar för kunder och tjänster i Azure-ekosystemet:
- Automation: För att hålla dig uppdaterad med din principmiljö erbjuder Event Grid en automatiserad mekanism för att generera aviseringar och utlösa uppgifter beroende på efterlevnadstillstånd.
- Varaktig leverans: För att tjänster och användarprogram ska kunna svara i realtid på policyefterlevnadshändelser försöker Event Grid erbjuda principhändelser med minsta svarstid. Event Grid försöker skicka en händelse igen om en prenumerants slutpunkt inte kan bekräfta mottagandet av den eller om den inte gör det, enligt ett förutbestämt återförsöksschema och återförsöksprincip.
- Anpassad händelseproducent: Event Grid-händelseproducenter och konsumenter behöver inte vara Azure eller Microsoft-tjänster. Externa program kan ta emot en avisering, visa skapandet av en reparationsuppgift eller samla in meddelanden om vem som svarar på tillståndsändringen. En fullständig självstudie finns i Ändra händelser för routningsprinciptillstånd till Event Grid med Azure CLI .
Det finns två primära entiteter när du använder Event Grid:
- Händelser: Dessa händelser kan vara vad som helst som en användare kanske vill reagera på för en Azure-resurs. Om till exempel ett principefterlevnadstillstånd skapas, ändras och tas bort för en resurs, till exempel en virtuell dator eller lagringskonton.
- Event Grid-prenumerationer: Dessa händelseprenumerationer är användardefinierade entiteter som dirigerar rätt uppsättning händelser från en utgivare till en prenumerant. Händelseprenumerationer kan filtrera händelser baserat på resurssökvägen som händelsen kommer från och typen av händelse. Händelseprenumerationer kan också filtrera efter omfång mellan Azure-prenumeration och hanteringsgrupp.
Ett vanligt Azure Policy-händelsescenario spårar när efterlevnadstillståndet för en resurs ändras under principutvärderingen. Händelsebaserad arkitektur är ett effektivt sätt att reagera på dessa ändringar och underlättar den händelsebaserade reaktionen på ändringar i efterlevnadstillståndet.
Ett annat scenario är att automatiskt utlösa reparationsåtgärder utan att manuellt välja skapa reparationsaktivitet på principsidan. Event Grid söker efter efterlevnadstillstånd och resurser som för närvarande inte är kompatibla kan åtgärdas. Läs mer om reparationsstruktur. Reparation kräver en hanterad identitet och principer måste vara i modify
eller deployIfNotExists
gälla. Läs mer om effekttyper.
Event Grid är användbart som ett granskningssystem för att lagra tillståndsändringar och förstå orsaken till inkompatibilitet över tid. Scenarierna för Event Grid är oändliga och baserat på motivationen kan Event Grid konfigureras.
Tillgängliga händelsetyper
Azure Policy genererar följande händelsetyper:
Händelsetyp | beskrivning |
---|---|
Microsoft.PolicyInsights.PolicyStateCreated | Utlöses när ett principefterlevnadstillstånd skapas. |
Microsoft.PolicyInsights.PolicyStateChanged | Utlöses när ett principefterlevnadstillstånd ändras. |
Microsoft.PolicyInsights.PolicyStateDeleted | Utlöses när ett principefterlevnadstillstånd tas bort. |
Händelseegenskaper
En händelse har följande data på den översta nivån:
Property | Type | Description |
---|---|---|
topic |
sträng | Fullständig resurssökväg till händelsekällan. Det här fältet kan inte skrivas. Event Grid ger det här värdet. |
subject |
sträng | Det fullständigt kvalificerade ID:t för resursen som ändringen av efterlevnadstillståndet gäller, inklusive resursnamnet och resurstypen. Använder formatet, /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName> |
eventType |
sträng | En av de registrerade händelsetyperna för den här händelsekällan. |
eventTime |
sträng | Den tid då händelsen genereras baserat på leverantörens UTC-tid. |
id |
sträng | Unik identifierare för händelsen. |
data |
objekt | Azure Policy-händelsedata. |
dataVersion |
sträng | Dataobjektets schemaversion. Utgivaren definierar schemaversion. |
metadataVersion |
sträng | Schemaversionen av händelsens metadata. Event Grid definierar schemat för de översta egenskaperna. Event Grid ger det här värdet. |
Dataobjektet har följande egenskaper:
Property | Type | Description |
---|---|---|
timestamp |
sträng | Den tid (i UTC) som resursen genomsökts av Azure Policy. För att beställa händelser använder du den här egenskapen i stället för den översta nivån eventTime eller time egenskaperna. |
policyAssignmentId |
sträng | Resurs-ID för principtilldelningen. |
policyDefinitionId |
sträng | Principdefinitionens resurs-ID. |
policyDefinitionReferenceId |
sträng | Referens-ID:t för principdefinitionen i initiativdefinitionen, om principtilldelningen är för ett initiativ. Kan vara tomt. |
complianceState |
sträng | Resursens efterlevnadstillstånd för principtilldelningen. |
subscriptionId |
sträng | Resursens prenumerations-ID. |
complianceReasonCode |
sträng | Koden för efterlevnadsorsak. Kan vara tomt. |
Exempelhändelse
I följande exempel visas schemat för ett principtillstånd som skapats händelseomfång på prenumerationsnivå:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/subscriptions/<SubscriptionID>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateCreated",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
Schemat för ett principtillstånd som ändrat händelseomfång på prenumerationsnivå är liknande:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/subscriptions/<SubscriptionID>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateChanged",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
I följande exempel visas schemat för ett principtillstånd som skapats händelseomfång på hanteringsgruppsnivå:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/tenants/<tenantId>/providers/Microsoft.Management/managementGroups/<managementGroupId>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateCreated",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
Schemat för ett principtillstånd som ändrat händelseomfång på hanteringsgruppsnivå är liknande:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/tenants/<tenantId>/providers/Microsoft.Management/managementGroups/<managementGroupId>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateChanged",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
Metoder för att använda händelser
Program som hanterar Azure Policy-händelser bör följa dessa rekommenderade metoder:
- Flera prenumerationer kan konfigureras för att dirigera händelser till samma händelsehanterare, så anta inte att händelser kommer från en viss källa. Kontrollera i stället meddelandets ämne för att säkerställa att principtilldelningen, principdefinitionen och resursen tillståndsändringshändelsen är till för.
eventType
Kontrollera och anta inte att alla händelser du får är de typer du förväntar dig.- Använd
data.timestamp
för att fastställa ordningen på händelserna i Azure Policy i stället för den översta nivåneventTime
ellertime
egenskaperna. - Använd ämnesfältet för att komma åt resursen som hade en ändring av principtillståndet.
Nästa steg
Lär dig mer om Event Grid och ge Azure Policy tillståndsändringshändelser ett försök: