Udostępnij za pośrednictwem


Reagowanie na zdarzenia zmiany stanu usługi Azure Policy

Zdarzenia usługi Azure Policy umożliwiają aplikacjom reagowanie na zmiany stanu. Ta integracja jest wykonywana bez konieczności wykonywania skomplikowanego kodu lub kosztownych i nieefektywnych usług sondowania. Zamiast tego zdarzenia są wypychane przez usługę Azure Event Grid do subskrybentów, takich jak Azure Functions, Azure Logic Apps, a nawet do własnego niestandardowego odbiornika HTTP. Krytycznie płacisz tylko za to, czego używasz.

Zdarzenia usługi Azure Policy są wysyłane do usługi Azure Event Grid, która zapewnia niezawodne usługi dostarczania do aplikacji za pomocą zaawansowanych zasad ponawiania prób i dostarczania utraconych komunikatów. Usługa Event Grid dba o właściwy routing, filtrowanie i multiemisję zdarzeń do miejsc docelowych za pośrednictwem subskrypcji usługi Event Grid. Aby dowiedzieć się więcej, zobacz Dostarczanie komunikatów usługi Event Grid i ponawianie próby.

Uwaga

Zdarzenia zmiany stanu usługi Azure Policy są wysyłane do usługi Event Grid po zakończeniu oceny wyzwalacza oceny zasobów.

Powiadomienia usługi Event Grid dotyczące zmian stanu zgodności zasobów mogą potrwać do 20 minut.

Korzyści z usługi Event Grid

Usługa Event Grid ma kilka korzyści dla klientów i usług w ekosystemie platformy Azure:

  • Automatyzacja: aby zachować aktualność w środowisku zasad, usługa Event Grid oferuje zautomatyzowany mechanizm generowania alertów i wyzwalania zadań w zależności od stanów zgodności.
  • Trwałe dostarczanie: aby usługi i aplikacje użytkowników reagowały w czasie rzeczywistym na zdarzenia zgodności zasad, usługa Event Grid dąży do oferowania zdarzeń zasad z minimalnym opóźnieniem. Usługa Event Grid ponawia próbę transmisji zdarzenia, jeśli punkt końcowy subskrybenta nie potwierdzi jego otrzymania lub jeśli nie, zgodnie ze wstępnie określonym harmonogramem ponawiania i ponawiania próby.
  • Niestandardowy producent zdarzeń: producenci zdarzeń usługi Event Grid i odbiorcy nie muszą być platformą Azure ani usługi firmy Microsoft. Aplikacje zewnętrzne mogą odbierać alerty, wyświetlać tworzenie zadania korygowania lub zbierać komunikaty, które odpowiadają na zmianę stanu. Aby uzyskać pełny samouczek, zobacz Route policy state change events to Event Grid with Azure CLI (Kierowanie zdarzeń zmiany stanu zasad do usługi Event Grid za pomocą interfejsu wiersza polecenia platformy Azure).

W przypadku korzystania z usługi Event Grid istnieją dwie jednostki podstawowe:

  • Zdarzenia: te zdarzenia mogą być czymś, co użytkownik może chcieć zareagować, co obejmuje utworzenie, zmianę i usunięcie zasobu, takiego jak maszyna wirtualna lub konta magazynu.
  • Subskrypcje usługi Event Grid: te subskrypcje zdarzeń to jednostki skonfigurowane przez użytkownika, które kierują odpowiedni zestaw zdarzeń od wydawcy do subskrybenta. Subskrypcje zdarzeń mogą filtrować zdarzenia na podstawie ścieżki zasobu zdarzenia pochodzącego z i typu zdarzenia. Ponadto subskrypcje zdarzeń mogą również filtrować według zakresu między subskrypcją platformy Azure i grupą zarządzania.

Typowy scenariusz zdarzeń usługi Azure Policy jest śledzony, gdy stan zgodności zasobu ulegnie zmianie podczas oceny zasad. Architektura oparta na zdarzeniach to wydajny sposób reagowania na te zmiany i pomaga w reagowaniu na zmiany stanu zgodności na podstawie zdarzeń.

Innym scenariuszem jest automatyczne wyzwalanie zadań korygowania bez ręcznego zaznaczenia zadania tworzenia korygowania na stronie zasad. Usługa Event Grid sprawdza stan zgodności i zasoby, które są obecnie niezgodne, można rozwiązać. Dowiedz się więcej o strukturze korygowania. Korygowanie wymaga tożsamości zarządzanej i zasad musi mieć efekt Modify lub DeployIfNotExists. Dowiedz się więcej o typach efektów.

Ponadto usługa Event Grid jest przydatna jako system inspekcji do przechowywania zmian stanu i zrozumienia przyczyny niezgodności w czasie. Scenariusze usługi Event Grid są nieskończone i oparte na motywacji usługa Event Grid jest konfigurowalna.

Zrzut ekranu przedstawiający model usługi Event Grid źródeł i procedur obsługi.

Dostępne typy zdarzeń

Usługa Azure Policy emituje następujące typy zdarzeń:

Typ zdarzenia opis
Microsoft.Policy Szczegółowe informacje. PolicyStateTworzenie Zgłaszane po utworzeniu stanu zgodności zasad.
Microsoft.Policy Szczegółowe informacje. PolicyStateChanged Zgłaszane po zmianie stanu zgodności zasad.
Microsoft.Policy Szczegółowe informacje. PolicyStateDeleted Zgłaszane po usunięciu stanu zgodności zasad.

Właściwości zdarzenia

Zdarzenie ma następujące dane najwyższego poziomu:

Właściwość Type opis
topic string Pełna ścieżka zasobu do źródła zdarzeń. To pole nie jest możliwe do zapisu. Ta wartość jest podawana przez usługę Event Grid.
subject string W pełni kwalifikowany identyfikator zasobu, dla którego jest zmieniany stan zgodności, łącznie z nazwą zasobu i typem zasobu. Używa formatu, /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>
eventType string Jeden z zarejestrowanych typów zdarzeń dla tego źródła zdarzeń.
eventTime string Czas generowania zdarzenia na podstawie czasu UTC dostawcy.
id string Unikatowy identyfikator zdarzenia.
data obiekt Dane zdarzeń usługi Azure Policy.
dataVersion string Wersja schematu obiektu danych. Wydawca definiuje wersję schematu.
metadataVersion string Wersja schematu metadanych zdarzenia. Usługa Event Grid definiuje schemat właściwości najwyższego poziomu. Ta wartość jest podawana przez usługę Event Grid.

Obiekt danych ma następujące właściwości:

Właściwość Type opis
timestamp string Czas (w formacie UTC) zeskanowany przez zasób przez usługę Azure Policy. W przypadku zdarzeń porządkowania użyj tej właściwości zamiast właściwości najwyższego poziomu eventTime lub time właściwości.
policyAssignmentId string Identyfikator zasobu przypisania zasad.
policyDefinitionId string Identyfikator zasobu definicji zasad.
policyDefinitionReferenceId string Identyfikator odwołania definicji zasad w definicji inicjatywy, jeśli przypisanie zasad jest dla inicjatywy. Może być pusty.
complianceState string Stan zgodności zasobu w odniesieniu do przypisania zasad.
subscriptionId string Identyfikator subskrypcji zasobu.
complianceReasonCode string Kod przyczyny zgodności. Może być pusty.

Przykładowe zdarzenie

W poniższym przykładzie przedstawiono schemat stanu zasad utworzonego zdarzenia o określonym zakresie na poziomie subskrypcji:

[{
    "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 zdarzenia zmienionego stanu zasad o określonym zakresie na poziomie subskrypcji jest podobny:

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

W poniższym przykładzie przedstawiono schemat stanu zasad utworzonego zdarzenia o określonym zakresie na poziomie grupy zarządzania:

[{
    "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 zdarzenia zmienionego stanu zasad o określonym zakresie na poziomie grupy zarządzania jest podobny:

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

Praktyki dotyczące korzystania ze zdarzeń

Aplikacje obsługujące zdarzenia usługi Azure Policy powinny przestrzegać następujących zalecanych rozwiązań:

  • Wiele subskrypcji można skonfigurować pod kątem kierowania zdarzeń do tej samej procedury obsługi zdarzeń, więc nie zakładaj, że zdarzenia pochodzą z określonego źródła. Zamiast tego sprawdź temat komunikatu, aby upewnić się, że przypisanie zasad, definicja zasad i zasób dotyczy zdarzenia zmiany stanu.
  • Sprawdź i nie zakładaj eventType , że wszystkie otrzymane zdarzenia są typami, których oczekujesz.
  • Służy data.timestamp do określania kolejności zdarzeń w usłudze Azure Policy zamiast właściwości najwyższego poziomu eventTime lub time właściwości.
  • Użyj pola tematu, aby uzyskać dostęp do zasobu, który miał zmianę stanu zasad.

Następne kroki

Dowiedz się więcej o usłudze Event Grid i udostępniaj zdarzenia zmiany stanu usługi Azure Policy: