Dela via


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.

Skärmbild av Event Grid-modellen med källor och hanterare.

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ån eventTime eller time 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: