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.
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 niveaueventTime
oftime
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: