Reagieren auf Azure Policy-Ereignisse vom Typ „Richtlinienzustandsänderung“
Mit Azure Policy Ereignissen können Anwendungen auf Statusänderungen reagieren. Diese Integration erfolgt ohne komplizierten Code oder teure und ineffiziente Abruf-Dienste. Stattdessen werden Ereignisse über Azure Event Grid an Abonnenten wie Azure Functions, Azure Logic Apps oder sogar Ihren eigenen benutzerdefinierten HTTP-Listener gepusht. Vor allem bezahlen Sie nur für die tatsächliche Nutzung.
Azure Richtlinie-Ereignisse werden an den Azure Event Grid-Dienst gesendet, der dank umfangreicher Wiederholungsrichtlinien und der Zustellung unzustellbarer Nachrichten zuverlässige Zustelldienste für Ihre Anwendungen bietet. Event Grid sorgt für das ordnungsgemäße Routen, Filtern und Multicasting der Ereignisse an Ziele mithilfe von Event Grid-Abonnements. Weitere Informationen finden Sie unter Event Grid – Übermittlung und Wiederholung von Nachrichten.
Hinweis
Azure-Richtlinien-Zustandsänderungsereignisse werden an das Event Grid gesendet, nachdem ein Bewertungsauslöser die Ressourcenbewertung abgeschlossen hat.
Event Grid-Benachrichtigungen für Änderungen des Ressourcencompliancestatus können bis zu 20 Minuten dauern.
Event Grid-Vorteile
Event Grid bietet einige Vorteile für Kund*innen und Dienste im Azure-Ökosystem:
- Automatisierung: Um mit Ihrer Richtlinienumgebung auf dem neuesten Stand zu bleiben, bietet Event Grid einen automatisierten Mechanismus zum Generieren von Warnungen und zum Auslösen von Tasks in Abhängigkeit von Konformitätszuständen.
- Dauerhafte Bereitstellung: Damit Dienste und Benutzeranwendungen in Echtzeit auf Richtlinienkonformitätsereignisse reagieren können, möchte Event Grid Richtlinienereignisse mit minimaler Latenz anbieten. Event Grid wiederholt die Übertragung eines Ereignisses, wenn der Endpunkt eines Abonnenten den Empfang des Ereignisses nicht bestätigt, gemäß einem vordefinierten Wiederholungszeitplan und einer Wiederholungsrichtlinie.
- Benutzerdefinierter Ereignisproducer: Event Grid-Ereignisproducer und -consumer müssen keine Azure- oder Microsoft-Dienste sein. Externe Anwendungen können eine Warnung empfangen, die Erstellung eines Wartungstasks anzeigen oder Nachrichten darüber sammeln, wer auf die Zustandsänderung reagiert. Ein vollständiges Tutorial finden Sie unter Ereignisse zur Änderung des Routenrichtlinienstatus an Event Grid mit Azure CLI .
Bei der Verwendung von Event Grid gibt es zwei primäre Entitäten:
- Ereignisse: Diese Ereignisse können beliebige Elemente sein, auf die ein Benutzer für eine Azure-Ressource reagieren möchte. Wenn beispielsweise ein Richtliniencompliancestatus erstellt, geändert und für eine Ressource wie einen virtuellen Computer oder Speicherkonten gelöscht wird.
- Event Grid-Abonnements: Diese Ereignisabonnements sind vom Benutzer konfigurierte Entitäten, die den richtigen Satz von Ereignissen von einem Herausgeber an einen Abonnenten weiterleiten. Ereignisabonnements können Ereignisse basierend auf dem Ressourcenpfad, von dem das Ereignis stammt, und dem Typ des Ereignisses filtern. Darüber hinaus können Ereignisabonnements auch nach Bereich zwischen Azure-Abonnement und Verwaltungsgruppe filtern.
Ein übliches Azure Policy-Ereignisszenario ist die Nachverfolgung von Änderungen am Konformitätszustand einer Ressource während der Richtlinienbewertung. Die ereignisbasierte Architektur ist eine effiziente Möglichkeit, auf derartige Änderungen zu reagieren. Sie unterstützt die ereignisbasierte Reaktion auf Änderungen des Konformitätszustands.
Ein weiteres Szenario besteht darin, Wartungstasks automatisch auszulösen, ohne Wartungstask erstellen auf der Richtlinienseite manuell auszuwählen. Event Grid prüft den Konformitätsstatus und Ressourcen, die derzeit nicht konform sind und behoben werden können. Erfahren Sie mehr über die Wartungsstruktur. Für die Wiederherstellung ist eine verwaltete Identität erforderlich, und Richtlinien müssen in der Auswirkung modify
oder deployIfNotExists
vorliegen. Erfahren Sie mehr über Auswirkungstypen.
Event Grid ist als Überwachungssystem hilfreich, um Zustandsänderungen zu speichern und die Ursache von Nichtkonformität im Zeitverlauf nachzuvollziehen. Die Szenarien für Event Grid sind endlos, und Event Grid kann dem Zweck entsprechend konfiguriert werden.
Verfügbare Ereignistypen
Azure Policy gibt die folgenden Ereignistypen aus:
Ereignistyp | BESCHREIBUNG |
---|---|
Microsoft.PolicyInsights.PolicyStateCreated | Wird ausgelöst, wenn ein Zustand der Richtlinienkonformität erstellt wird. |
Microsoft.PolicyInsights.PolicyStateChanged | Wird ausgelöst, wenn ein Status der Richtlinienkonformität geändert wird. |
Microsoft.PolicyInsights.PolicyStateDeleted | Wird ausgelöst, wenn ein Status der Richtlinienkonformität gelöscht wird. |
Ereigniseigenschaften
Ein Ereignis weist die folgenden Daten auf oberster Ebene aus:
Eigenschaft | Typ | Beschreibung |
---|---|---|
topic |
Zeichenfolge | Vollständiger Ressourcenpfaf zur Ereignisquelle. Dieses Feld ist nicht beschreibbar. Dieser Wert wird von Event Grid bereitgestellt. |
subject |
Zeichenfolge | Die vollständig qualifizierte ID der Ressource, für die die Änderung des Konformitätsstatus gilt, einschließlich des Ressourcennamens und des Ressourcentyps. Verwendet das Format /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName> . |
eventType |
Zeichenfolge | Einer der registrierten Ereignistypen für die Ereignisquelle. |
eventTime |
Zeichenfolge | Die Zeit, in der das Ereignis generiert wird, basierend auf der UTC-Zeit des Anbieters. |
id |
Zeichenfolge | Eindeutiger Bezeichner für das Ereignis. |
data |
Objekt (object) | Azure Policy-Ereignisdaten. |
dataVersion |
Zeichenfolge | Die Schemaversion des Datenobjekts. Der Herausgeber definiert die Schemaversion. |
metadataVersion |
Zeichenfolge | Die Schemaversion der Ereignismetadaten. Event Grid definiert das Schema der Eigenschaften der obersten Ebene. Dieser Wert wird von Event Grid bereitgestellt. |
Das Datenobjekt weist die folgenden Eigenschaften auf:
Eigenschaft | Typ | Beschreibung |
---|---|---|
timestamp |
Zeichenfolge | Die Zeit (in UTC), zu der die Ressource von Azure Policy gescannt wurde. Verwenden Sie zum Sortieren von Ereignissen diese Eigenschaft anstelle der Eigenschaften der obersten Ebene eventTime oder time . |
policyAssignmentId |
Zeichenfolge | Die Ressourcen-ID der Richtlinienzuweisung. |
policyDefinitionId |
Zeichenfolge | Die Ressourcen-ID der Richtliniendefinition. |
policyDefinitionReferenceId |
Zeichenfolge | Die Verweis-ID für die Richtliniendefinition innerhalb der Initiativendefinition, wenn die Richtlinienzuweisung für eine Initiative vorgesehen ist. Kann leer sein. |
complianceState |
Zeichenfolge | Der Konformitätszustand der Ressource in Bezug auf die Richtlinienzuweisung. |
subscriptionId |
Zeichenfolge | Die Abonnement-ID der Ressource. |
complianceReasonCode |
Zeichenfolge | Der Konformitätsursachencode. Kann leer sein. |
Beispielereignis
Das folgende Beispiel zeigt das Schema eines auf der Abonnementebene erstellten Ereignisses mit dem Richtlinienstatus:
[{
"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"
}]
Das Schema für ein Ereignis zur Änderung des Zustands einer Richtlinie auf der Abonnementebene ist ähnlich:
[{
"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"
}]
Das folgende Beispiel zeigt das Schema eines auf der Ebene der Verwaltungsgruppe erstellten Ereignisses mit dem Richtlinienstatus:
[{
"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"
}]
Das Schema für ein Ereignis zur Änderung des Zustands einer Richtlinie auf der Verwaltungsgruppenebene ist ähnlich:
[{
"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"
}]
Methoden zum Nutzen von Ereignissen
Anwendungen, die Azure-Richtlinienereignisse verarbeiten, sollten diese empfohlenen Praktiken befolgen:
- Mehrere Abonnements können zum Weiterleiten von Ereignissen an denselben Ereignishandler konfiguriert werden. Gehen Sie daher nicht davon aus, dass Ereignisse aus einer bestimmten Quelle stammen. Überprüfen Sie stattdessen das Thema der Nachricht, um sicherzustellen, dass die Richtlinienzuweisung, die Richtliniendefinition und die Ressource, für die das Zustandsänderungsereignis gilt, bekannt sind.
- Überprüfen Sie
eventType
und gehen Sie nicht davon aus, dass alle Ereignisse, die Sie erhalten, die Typen sind, die Sie erwarten. - Verwenden
data.timestamp
Sie, um die Reihenfolge der Ereignisse in Azure PolicyeventTime
anstelletime
der Eigenschaften der obersten Ebene zu bestimmen. - Verwenden Sie das Betreff-Feld, um auf die Ressource zuzugreifen, die eine Änderung des Richtlinienstatus hatte.
Nächste Schritte
Erfahren Sie mehr über Event Grid und probieren Sie Ereignisse der Azure Policy Zustandsänderungen aus: