Реагирование на события изменения состояния Политики Azure

События политики Azure позволяют приложениям реагировать на изменения состояния. Такая интеграция выполняется без необходимости в сложном коде или дорогостоящих и неэффективных службах опроса. Вместо этого события проталкиваются через Azure Event Grid подписчикам, таким как Функции Azure, Azure Logic Apps, или даже вашему собственному прослушивателю HTTP. Особенно важно, что вы платите только за то, что используете.

События Политики Azure отправляются в службу "Сетка событий Azure", которая предоставляет приложениям службы надежной доставки. Это становится возможным благодаря политикам повтора с широкими возможностями и доставке недоставленных сообщений. Сетка событий заботится о правильной маршрутизации, фильтрации и многоадресной рассылке событий в назначения с помощью подписок Сетки событий. Дополнительные сведения см. в разделе Доставка сообщения сетки событий и повторная попытка.

Примечание.

События изменения состояния Политики Azure отправляются в службу "Сетка событий" после завершения оценки ресурса триггером оценки.

Уведомления сетки событий для изменений состояния соответствия ресурсам могут занять до 20 минут.

Преимущества сетки событий

Сетка событий имеет несколько преимуществ для клиентов и служб в экосистеме Azure:

  • Автоматизация. Чтобы оставаться в текущей среде политики, Сетка событий предлагает автоматизированный механизм для создания оповещений и активации задач в зависимости от состояний соответствия.
  • Устойчивая доставка: чтобы службы и пользовательские приложения реагировали в режиме реального времени на события соответствия политике, Сетка событий стремится предложить события политики с минимальной задержкой. Сетка событий повторяет передачу события, если конечная точка подписчика не может подтвердить получение или если это не так, в соответствии с предопределенным расписанием повторных попыток и политикой повторных попыток.
  • Пользовательский производитель событий: производители событий сетки событий и потребители не должны быть Azure или службы Майкрософт. Внешние приложения могут получать оповещение, показывать создание задачи исправления или собирать сообщения о том, кто отвечает на изменение состояния. См. полное руководство Маршрутизация событий изменения состояния политики в службу "Сетка событий" с помощью Azure CLI.

При использовании сетки событий существует две основные сущности:

  • События. Эти события могут быть все, что пользователь может реагировать на это, включая, если состояние соответствия политик создано, изменено и удалено ресурса, например виртуальной машины или учетных записей хранения.
  • Подписки сетки событий. Эти подписки на события — это пользовательские сущности, которые направляют правильный набор событий от издателя к подписчику. Подписки на события могут фильтровать события на основе пути к ресурсу, из которого произошло событие, и типа события. Кроме того, подписки на события также могут фильтроваться по область между подпиской Azure и группой управления.

Распространенный сценарий события Политика Azure отслеживается при изменении состояния соответствия ресурсов во время оценки политики. Архитектура на основе событий — эффективный способ реагирования на эти изменения и вспомогательные средства в реакции на состояние соответствия событиям.

Другой сценарий заключается в том, чтобы автоматически активировать задачи исправления без ручного отключения задачи исправления на странице политики. Сетка событий проверка для состояния соответствия требованиям и ресурсов, которые в настоящее время не соответствуют требованиям, можно устранить. Дополнительные сведения о структуре исправления. Для исправления требуется управляемое удостоверение и политики должны находиться в эффекте Modify или DeployIfNotExists. Дополнительные сведения о типах эффектов.

Кроме того, служба "Сетка событий" полезна в качестве системы аудита для хранения изменений состояния и понимания причины несоответствия с течением времени. Сценарии сетки событий бесконечны и основаны на мотивации, сетка событий настраивается.

Screenshot of Event Grid model of sources and handlers.

Доступные типы событий

Политика Azure выдает следующие типы событий:

Тип события Description
Microsoft.PolicyInsights.PolicyStateCreated Возникает при создании состояния соответствия требованиям политики.
Microsoft.PolicyInsights.PolicyStateChanged Возникает при изменении состояния соответствия требованиям политики.
Microsoft.PolicyInsights.PolicyStateDeleted Возникает при удалении состояния соответствия требованиям политики.

Свойства событий

Событие содержит следующие высокоуровневые данные:

Свойство Type Описание:
topic строка Полный путь к ресурсу источника событий. Это поле защищено от записи. Это значение предоставляет Сетка событий.
subject строка Полный идентификатор ресурса, состояние соответствия требованиям которого изменяется, содержит имя и тип ресурса. Использует формат /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>
eventType строка Один из зарегистрированных типов событий для этого источника событий.
eventTime строка Время создания события с учетом времени поставщика в формате UTC.
id строка Уникальный идентификатор события.
data объект Данные события Политики Azure.
dataVersion строка Версия схемы для объекта данных. Версию схемы определяет издатель.
metadataVersion строка Версия схемы для метаданных события. Служба "Сетка событий" определяет схему свойств верхнего уровня. Это значение предоставляет Сетка событий.

Объект данных имеет следующие свойства:

Свойство Type Описание:
timestamp строка Время (в формате UTC) сканирования ресурса Политикой Azure. Для упорядочивания событий используйте это свойство вместо свойств верхнего уровня eventTime или time.
policyAssignmentId строка Идентификатор ресурса назначения политики.
policyDefinitionId строка Идентификатор ресурса определения политики.
policyDefinitionReferenceId строка Идентификатор ссылки для определения политики в определении инициативы, если назначение политики выполняется для инициативы. Значение может быть пустым.
complianceState строка Состояние соответствия ресурса требованиям по отношению к назначению политики.
subscriptionId строка Идентификатор подписки ресурса.
complianceReasonCode строка Код причины соответствия требованиям. Значение может быть пустым.

Пример события

В следующем примере показана схема для события, созданного состоянием политики, на уровне подписки:

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

Схема события изменения состояния политики на уровне подписки аналогична:

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

В следующем примере показана схема для события, созданного состоянием политики, на уровне группы управления:

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

Схема события изменения состояния политики на уровне группы управления аналогична:

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

Рекомендации по потреблению событий

Приложения, которые обрабатывают события Политики Azure, должны соответствовать следующим рекомендациям.

  • Для маршрутизации событий в один обработчик событий можно настроить несколько подписок, поэтому не следует рассчитывать на то, что события приходят из определенного источника. Вместе этого, проверьте тему сообщения, чтобы убедиться в правильности назначения политики, определения политики и ресурса, для которого задано событие изменения состояния.
  • Проверьте eventType. Не следует предполагать, что все получаемые события имеют ожидаемые типы.
  • Используйте data.timestamp для определения порядка событий в Политике Azure вместо свойств верхнего уровня eventTime или time.
  • Используйте поле темы для доступа к ресурсу, для которого предназначено изменение состояние политики.

Следующие шаги

Узнайте больше о службе "Сетка событий Azure" и изучите работу с событиями изменения состояния Политики Azure: