Руководство. Маршрутизация событий изменения состояния политики в сетку событий с помощью Azure CLI
В этой статье вы узнаете, как настроить подписки на события политики Azure на отправку событий изменения состояния политики в конечную веб-точку. Пользователи политики Azure могут подписаться на отправку событий в случае изменения состояния политики в ресурсах. Эти события могут активировать веб-перехватчики, Функции Azure, очереди служба хранилища Azure или любой другой обработчик событий, поддерживаемый Сетка событий Azure. Как правило, события отправляются на конечную точку, которая обрабатывает данные событий и выполняет соответствующие действия. Чтобы упростить это руководство, вы отправляете события в веб-приложение, которое собирает и отображает сообщения.
Необходимые компоненты
- Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
- Для работы с этим кратким руководством требуется запустить Azure CLI версии не ниже 2.0.76. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Создание или изменение группы ресурсов
Темами событий сетки являются ресурсы Azure, которые необходимо поместить в группу ресурсов Azure. Группа ресурсов Azure — это логическая коллекция, в которой выполняется развертывание и администрирование ресурсов Azure.
Создайте группу ресурсов с помощью команды az group create.
В следующем примере создается группа ресурсов с именем <resource_group_name>
в расположении westus. Замените <resource_group_name>
уникальным именем для группы ресурсов.
# Log in first with az login if you're not using Cloud Shell
az group create --name <resource_group_name> --location westus
Создание системного раздела сетки событий
Теперь, когда у нас есть группа ресурсов, мы создаем системный раздел. Системный раздел в Сетке событий представляет одно или несколько событий, опубликованных службами Azure, такими как политика Azure и Центры событий Azure. В этом системном разделе для изменений состояния политики Azure используется тип раздела Microsoft.PolicyInsights.PolicyStates
.
Сначала необходимо зарегистрировать PolicyInsights
поставщиков ресурсов и EventGrid
поставщиков ресурсов в соответствующей области управления. портал Azure авторегистрирует все вызовы ЕЗ, которые вы вызываете в первый раз, но Azure CLI не выполняется.
# Log in first with az login if you're not using Cloud Shell
# Register the required RPs at the management group scope
az provider register --namespace Microsoft.PolicyInsights -m <managementGroupId>
az provider register --namespace Microsoft.EventGrid -m <managementGroupId>
# Alternatively, register the required RPs at the subscription scope (defaults to current subscription context)
az provider register --namespace Microsoft.PolicyInsights
az provider register --namespace Microsoft.EventGrid
Затем замените <subscriptionId>
параметр scope
идентификатором подписки и <resource_group_name>
параметром resource-group
ранее созданной группы ресурсов.
az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/subscriptions/<subscriptionId>" --resource-group "<resource_group_name>"
Если системный раздел сетки событий применяется к области группы управления, синтаксис параметра Azure CLI --source
немного отличается. Приведем пример:
az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/tenants/<tenantID>/providers/Microsoft.Management/managementGroups/<management_group_name>" --resource-group "<resource_group_name>"
Создание конечной точки сообщения
Перед подпиской на раздел необходимо создать конечную точку для сообщения о событии. Обычно конечная точка выполняет действия на основе данных событий. Чтобы упростить это краткое руководство, вы развернете предварительно созданное веб-приложение , отображающее сообщения о событиях. Развернутое решение содержит план службы приложений, веб-приложение службы приложений и исходный код из GitHub.
Замените <your-site-name>
уникальным именем для вашего веб-приложения. Имя веб-приложения должно быть уникальным, так как оно является частью записи системы доменных имен (DNS).
# Log in first with az login if you're not using Cloud Shell
az deployment group create \
--resource-group <resource_group_name> \
--template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
--parameters siteName=<your-site-name> hostingPlanName=viewerhost
Завершение развертывания может занять несколько минут. После успешного развертывания просмотрите веб-приложение, чтобы убедиться, что оно запущено. Откройте браузер и перейдите по адресу https://<your-site-name>.azurewebsites.net
.
Вы увидите сайт, на котором сейчас не отображаются никакие сообщения.
Подписка на системный раздел
Подписка на раздел предоставляет Сетке событий Azure информацию о том, какие события вы намерены отслеживать и куда их следует отправлять. В следующем примере создается подписка на созданный системный раздел и передается URL-адрес из веб-приложения в качестве конечной точки для получения уведомлений о событиях. Замените <event_subscription_name>
именем подписки на событие. Для <resource_group_name>
и <your-site-name>
используйте созданные ранее значения.
Конечная точка веб-приложения должна содержать суффикс /api/updates/
.
# Log in first with az login if you're not using Cloud Shell
# Create the subscription
az eventgrid system-topic event-subscription create \
--name <event_subscription_name> \
--resource-group <resource_group_name> \
--system-topic-name PolicyStateChanges \
--endpoint https://<your-site-name>.azurewebsites.net/api/updates
Просмотрите веб-приложение еще раз и обратите внимание, что событие проверки подписки было отправлено в него. Щелкните значок с изображением глаза, чтобы развернуть данные события. Сетка событий отправляет событие подтверждения, чтобы конечная точка могла подтвердить, что она готова получать данные события. Веб-приложение содержит код для проверки подписки.
Создание назначения политики
В этом кратком руководстве вы создадите назначение политики и присвоите определение Требование тега в группах ресурсов. Такое определение политики идентифицирует группы ресурсов, в которых отсутствует тег, настроенный во время назначения политики.
Чтобы создать назначение политики для группы ресурсов, созданной для хранения раздела сетки событий, выполните следующую команду:
# Log in first with az login if you're not using Cloud Shell
az policy assignment create --name 'requiredtags-events' --display-name 'Require tag on RG' --scope '<resourceGroupScope>' --policy '<policy definition ID>' --params '{ \"tagName\": { \"value\": \"EventTest\" } }'
В указанной выше команде используются следующие сведения:
- Name — фактическое имя назначения. Для этого примера было использовано значение requiredtags-events.
- DisplayName — отображаемое имя назначения политики. В этом случае вы используете значение Требовать тег для группы ресурсов.
- Scope. Область определяет, к каким ресурсам или группе ресурсов принудительно применяется назначение политики. Политика может назначаться разным ресурсам: от подписки до групп ресурсов. Обязательно замените
<scope>
на имя своей группы ресурсов. Для области группы ресурсов используется формат/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
. - Policy — идентификатор определения политики, на основе которой вы создаете назначение. В этом случае это определение для идентификатора политики Требование тега в группах ресурсов. Чтобы получить идентификатор определения политики, выполните следующую команду:
az policy definition list --query "[?displayName=='Require a tag on resource groups']"
После создания назначения политики дождитесь Microsoft.PolicyInsights.PolicyStateCreated
появления уведомления о событии в веб-приложении. Созданная группа ресурсов показывает значение data.complianceState
параметра NonCompliant для запуска.
Примечание.
Если группа ресурсов наследует другие назначения политики из подписки или иерархии группы управления, для каждого из них также отображаются события. Проверьте значение свойства data.policyDefinitionId
и убедитесь, что событие относится к назначению в этом руководстве.
Активация изменения в группе ресурсов
Чтобы обеспечить соответствие группе ресурсов, требуется тег с именем EventTest. Добавьте тег в группу ресурсов с помощью следующей команды, заменив <subscriptionId>
идентификатором подписки и <resourceGroup>
именем группы ресурсов:
# Log in first with az login if you're not using Cloud Shell
az tag create --resource-id '/subscriptions/<SubscriptionID>/resourceGroups/<resourceGroup>' --tags EventTest=true
После добавления необходимого тега в группу ресурсов дождитесь Microsoft.PolicyInsights.PolicyStateChanged
появления уведомления о событии в веб-приложении. Разверните событие. Теперь для значения data.complianceState
отображается Compliant.
Устранение неполадок
Если вы видите ошибку, аналогичную одной из следующих, убедитесь, что вы зарегистрировали обоих поставщиков ресурсов в области, в которой вы подписываетесь (группа управления или подписка):
Deployment has failed with the following error: {"code":"Publisher Notification Error","message":"Failed to enable publisher notifications.","details":[{"code":"Publisher Provider Error","message":"GET request for <uri> failed with status code: Forbidden, code: AuthorizationFailed and message: The client '<identifier>' with object id '<identifier>' does not have authorization to perform action 'microsoft.policyinsights/eventGridFilters/read' over scope '<scope>/providers/microsoft.policyinsights/eventGridFilters/_default' or the scope is invalid. If access was recently granted, please refresh your credentials.."}]}
Deployment has failed with the following error: {'code':'Publisher Notification Error','message':'Failed to enable publisher notifications.','details':[{'code':'ApiVersionNotSupported','message':'Event Grid notifications are currently not supported by microsoft.policyinsights in global. Try re-registering Microsoft.EventGrid provider if this is your first event subscription in this region.'}]}
Очистка ресурсов
Если вы планируете продолжать работу с этим веб-приложением и подпиской на события политики Azure, не очищайте ресурсы, созданные в рамках этой статьи. Если вы не планируете продолжать работу, используйте следующую команду, чтобы удалить все ресурсы, созданные в рамках этой статьи.
Замените <resource_group_name>
созданную группу ресурсов.
az group delete --name <resource_group_name>
Следующие шаги
Теперь, когда вы знаете, как создавать разделы и подписки на события для Политика Azure, узнайте больше о событиях изменения состояния политики и сетке событий:
- Реагирование на события изменения состояния политики Azure
- Сведения о схеме политики Azure для службы "Сетка событий"
- An introduction to Azure Event Grid (Общие сведения о службе "Сетка событий Azure")