Delen via


Reageren op statuswijzigingsevenementen van Azure Policy

Met Azure Policy-gebeurtenissen kunnen toepassingen reageren op statuswijzigingen. Deze integratie wordt uitgevoerd zonder dat ingewikkelde code of dure en inefficiƫnte polling-services nodig zijn. In plaats daarvan worden gebeurtenissen via Azure Event Grid gepusht naar abonnees zoals Azure Functions, Azure Logic Apps of zelfs naar uw eigen aangepaste HTTP-listener. Kritiek is dat u alleen betaalt voor wat u gebruikt.

Azure Policy-gebeurtenissen worden verzonden naar Azure Event Grid, dat betrouwbare leveringsservices aan uw toepassingen biedt via uitgebreid beleid voor opnieuw proberen en bezorging van dode brieven. Event Grid zorgt voor de juiste routering, filtering en multicasting van de gebeurtenissen naar bestemmingen via Event Grid-abonnementen. Zie De bezorging van Event Grid-berichten en probeer het opnieuw voor meer informatie.

Notitie

Gebeurtenissen voor statuswijziging van Azure Policy worden verzonden naar Event Grid nadat een evaluatietrigger de resource-evaluatie heeft voltooid.

Event Grid-meldingen voor wijzigingen in de nalevingsstatus van resources kunnen tot 20 minuten duren.

Voordelen van Event Grid

Event Grid heeft enkele voordelen voor klanten en services in het Azure-ecosysteem:

  • Automatisering: Event Grid biedt een geautomatiseerd mechanisme om waarschuwingen te genereren en taken te activeren, afhankelijk van nalevingsstatussen om op de hoogte te blijven van uw beleidsomgeving.
  • Duurzame levering: Om services en gebruikerstoepassingen in realtime te kunnen reageren op nalevingsgebeurtenissen van beleid, probeert Event Grid beleidsgebeurtenissen met minimale latentie aan te bieden. Event Grid probeert de verzending van een gebeurtenis opnieuw als het eindpunt van een abonnee de ontvangst ervan niet bevestigt of als dit niet het geval is, volgens een vooraf bepaald schema voor opnieuw proberen en beleid voor opnieuw proberen.
  • Aangepaste gebeurtenisproducent: Event Grid-gebeurtenisproducenten en -consumenten hoeven niet Azure of Microsoft-services te zijn. Externe toepassingen kunnen een waarschuwing ontvangen, het maken van een hersteltaak weergeven of berichten verzamelen over wie reageert op de statuswijziging. Zie Gebeurtenissen voor het wijzigen van de status van routebeleid in Event Grid met Azure CLI voor een volledige zelfstudie.

Er zijn twee primaire entiteiten bij het gebruik van Event Grid:

  • Gebeurtenissen: Deze gebeurtenissen kunnen alles zijn waarop een gebruiker kan reageren voor een Azure-resource. Als bijvoorbeeld een nalevingsstatus voor beleid wordt gemaakt, gewijzigd en verwijderd voor een resource, zoals een virtuele machine of opslagaccounts.
  • Event Grid-abonnementen: Deze gebeurtenisabonnementen zijn door de gebruiker geconfigureerde entiteiten die de juiste set gebeurtenissen van een uitgever naar een abonnee leiden. Gebeurtenisabonnementen kunnen gebeurtenissen filteren op basis van het resourcepad waarvan de gebeurtenis afkomstig is en het type gebeurtenis. Daarnaast kunnen gebeurtenisabonnementen ook filteren op bereik tussen Azure-abonnement en beheergroep.

Een veelvoorkomend Azure Policy-gebeurtenisscenario is bijhouden wanneer de nalevingsstatus van een resource wordt gewijzigd tijdens de beleidsevaluatie. Architectuur op basis van gebeurtenissen is een efficiƫnte manier om te reageren op deze wijzigingen en helpt bij de reactie op basis van gebeurtenissen op wijzigingen in de nalevingsstatus.

Een ander scenario is het automatisch activeren van hersteltaken zonder handmatig een hersteltaak te selecteren op de beleidspagina. Event Grid controleert op nalevingsstatus en resources die momenteel niet compatibel zijn, kunnen worden opgelost. Meer informatie over herstelstructuur. Herstel vereist dat een beheerde identiteit en beleidsregels actief modify zijn.deployIfNotExists Meer informatie over effecttypen.

Event Grid is handig als een controlesysteem voor het opslaan van statuswijzigingen en het begrijpen van de oorzaak van niet-naleving in de loop van de tijd. De scenario's voor Event Grid zijn eindeloos en zijn gebaseerd op de motivatie, Event Grid kan worden geconfigureerd.

Schermopname van het Event Grid-model van bronnen en handlers.

Beschikbare gebeurtenistypen

Azure Policy verzendt de volgende gebeurtenistypen:

Gebeurtenistype Beschrijving
Microsoft.PolicyInsights.PolicyStateCreated Wordt gegenereerd wanneer een nalevingsstatus van het beleid wordt gemaakt.
Microsoft.PolicyInsights.PolicyStateChanged Wordt gegenereerd wanneer de nalevingsstatus van het beleid wordt gewijzigd.
Microsoft.PolicyInsights.PolicyStateDeleted Wordt gegenereerd wanneer een nalevingsstatus van het beleid wordt verwijderd.

Eigenschappen van gebeurtenis

Een gebeurtenis bevat de volgende gegevens op het hoogste niveau:

Eigenschap Type Omschrijving
topic tekenreeks Volledig resourcepad naar de gebeurtenisbron. Dit veld kan niet worden geschreven. Event Grid biedt deze waarde.
subject tekenreeks De volledig gekwalificeerde id van de resource waarvoor de nalevingsstatus wordt gewijzigd, inclusief de resourcenaam en het resourcetype. Maakt gebruik van de notatie, /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>
eventType tekenreeks Een van de geregistreerde gebeurtenistypen voor deze gebeurtenisbron.
eventTime tekenreeks Het tijdstip waarop de gebeurtenis wordt gegenereerd op basis van de UTC-tijd van de provider.
id tekenreeks Unieke id voor de gebeurtenis.
data object Azure Policy-gebeurtenisgegevens.
dataVersion tekenreeks De schemaversie van het gegevensobject. De uitgever definieert de schemaversie.
metadataVersion tekenreeks De schemaversie van de metagegevens van de gebeurtenis. Event Grid definieert het schema voor de eigenschappen op het hoogste niveau. Event Grid biedt deze waarde.

Het gegevensobject heeft de volgende eigenschappen:

Eigenschap Type Omschrijving
timestamp tekenreeks De tijd (in UTC) waarop de resource is gescand door Azure Policy. Voor het ordenen van gebeurtenissen gebruikt u deze eigenschap in plaats van het hoogste niveau eventTime of time de eigenschappen.
policyAssignmentId tekenreeks De resource-id van de beleidstoewijzing.
policyDefinitionId tekenreeks De resource-id van de beleidsdefinitie.
policyDefinitionReferenceId tekenreeks De referentie-id voor de beleidsdefinitie in de initiatiefdefinitie, als de beleidstoewijzing voor een initiatief is. Mag leeg zijn.
complianceState tekenreeks De nalevingsstatus van de resource met betrekking tot de beleidstoewijzing.
subscriptionId tekenreeks De abonnements-id van de resource.
complianceReasonCode tekenreeks De redencode voor naleving. Mag leeg zijn.

Voorbeeld van een gebeurtenis

In het volgende voorbeeld ziet u het schema van een gebeurtenis die is gemaakt met de beleidsstatus die is gemaakt op abonnementsniveau:

[{
    "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"
}]

Het schema voor een gewijzigde gebeurtenisstatus op abonnementsniveau is vergelijkbaar:

[{
    "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"
}]

In het volgende voorbeeld ziet u het schema van een door het beleid gemaakte gebeurtenisbereik op het niveau van de beheergroep:

[{
    "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"
}]

Het schema voor een gewijzigde gebeurtenisstatus op het niveau van de beheergroep is vergelijkbaar:

[{
    "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"
}]

Procedures voor het verbruik van gebeurtenissen

Toepassingen die Azure Policy-gebeurtenissen verwerken, moeten de volgende aanbevolen procedures volgen:

  • Meerdere abonnementen kunnen worden geconfigureerd om gebeurtenissen te routeren naar dezelfde gebeurtenis-handler, dus neem niet aan dat gebeurtenissen afkomstig zijn van een bepaalde bron. Controleer in plaats daarvan het onderwerp van het bericht om ervoor te zorgen dat de beleidstoewijzing, beleidsdefinitie en resource waarvoor de statuswijzigingsbeurtenis geldt.
  • Controleer het eventType en ga er niet van uit dat alle gebeurtenissen die u ontvangt de typen zijn die u verwacht.
  • Gebruik data.timestamp dit om de volgorde van de gebeurtenissen in Azure Policy te bepalen, in plaats van het hoogste niveau eventTime of time de eigenschappen.
  • Gebruik het onderwerpveld om toegang te krijgen tot de resource met een beleidsstatuswijziging.

Volgende stappen

Meer informatie over Event Grid en gebeurtenissen voor statuswijziging in Azure Policy proberen: