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.

Screenshot: Event Grid-Modell mit Quellen und Handlern

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 Policy eventTime anstelle time 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: