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

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

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

Примечание.

События изменения состояния Azure Policy отправляются в Event Grid после завершения триггером оценки ресурса.

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

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

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

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

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

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

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

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

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

Снимок экрана: модель сетки событий источников и обработчиков.

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

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

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

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

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

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

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

Свойство Тип Описание
timestamp строка Время (в UTC), когда ресурс был просканирован с помощью Azure Policy. Для упорядочивания событий используйте это свойство вместо свойств верхнего уровня 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.
  • Используйте поле темы для доступа к ресурсу, у которого произошло изменение состояния политики.

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

Узнайте больше о службе Event Grid и опробуйте события изменения состояния политики Azure.