Tutoriel : Router les événements de changement d’état de stratégie vers Event Grid avec Azure CLI
Dans cet article, vous allez voir comment configurer des abonnements à des événements Azure Policy afin d’envoyer des événements de changement d’état de stratégie à un point de terminaison web. Les utilisateurs Azure Policy peuvent s’abonner à des événements qui sont émis quand des modifications d’état de stratégie se produisent sur des ressources. Ces événements peuvent déclencher des webhooks, des fonctions Azure, des files d’attente de stockage Azure ou tout autre gestionnaire d’événements pris en charge par Azure Event Grid. En règle générale, vous envoyez des événements à un point de terminaison qui traite les données d’événement et entreprend des actions. Toutefois, pour simplifier ce tutoriel, vous envoyez les événements à une application web qui collecte et affiche les messages.
Prérequis
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Pour suivre ce guide de démarrage rapide, vous devez utiliser Azure CLI version 2.0.76 ou ultérieure. Pour connaître la version de l’interface, exécutez
az --version
. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Azure Cloud Shell
Azure héberge Azure Cloud Shell, un environnement d’interpréteur de commandes interactif que vous pouvez utiliser dans votre navigateur. Vous pouvez utiliser Bash ou PowerShell avec Cloud Shell pour utiliser les services Azure. Vous pouvez utiliser les commandes préinstallées Cloud Shell pour exécuter le code de cet article sans avoir à installer quoi que ce soit dans votre environnement local.
Pour démarrer Azure Cloud Shell :
Option | Exemple/Lien |
---|---|
Sélectionnez Essayer dans le coin supérieur droite d’un bloc de codes ou de commandes. La sélection de Essayer ne copie pas automatiquement le code ni la commande dans Cloud Shell. | ![]() |
Accédez à https://shell.azure.com ou sélectionnez le bouton Lancer Cloud Shell pour ouvrir Cloud Shell dans votre navigateur. | ![]() |
Sélectionnez le bouton Cloud Shell dans la barre de menus en haut à droite du portail Azure. | ![]() |
Pour utiliser Azure Cloud Shell :
Démarrez Cloud Shell.
Sélectionnez le bouton Copier sur un bloc de codes (ou un bloc de commandes) pour copier le code ou la commande.
Collez le code ou la commande dans la session Cloud Shell en sélectionnant Ctrl+Maj+V sur Windows et Linux ou en sélectionnant Cmd+Maj+V sur macOS.
Sélectionnez Entrée pour exécuter le code ou la commande.
Créer un groupe de ressources
Les rubriques Event Grid sont des ressources Azure et doivent être placées dans un groupe de ressources Azure. Un groupe de ressources est une collection logique dans laquelle des ressources Azure sont déployées et gérées.
Créez un groupe de ressources avec la commande az group create.
L’exemple suivant crée un groupe de ressources nommé <resource_group_name>
à l’emplacement westus. Remplacez <resource_group_name>
par un nom unique pour votre groupe de ressources.
# Log in first with az login if you're not using Cloud Shell
az group create --name <resource_group_name> --location westus
Créer une rubrique système Event Grid
Comme nous disposons maintenant d’un groupe de ressources, nous créons une rubrique système. Une rubrique système dans Event Grid représente un ou plusieurs événements publiés par les services Azure, tels qu’Azure Policy et Azure Event Hubs. Cette rubrique système utilise le type de rubrique Microsoft.PolicyInsights.PolicyStates
pour les changements d’état Azure Policy.
Tout d’abord, vous devez inscrire les fournisseurs de ressources PolicyInsights
et EventGrid
au niveau de l’étendue de gestion appropriée. Tandis que le portail Azure enregistre automatiquement les adresses de fournisseurs de ressources que vous appelez pour la première fois, Azure CLI ne le fait pas.
# 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
Ensuite, remplacez <subscriptionId>
dans le paramètre scope par l’ID de votre abonnement et <resource_group_name>
dans le paramètre resource-group par le groupe de ressources créé.
az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/subscriptions/<subscriptionId>" --resource-group "<resource_group_name>"
Si votre rubrique système Event Grid est appliquée à l’étendue du groupe d’administration, la syntaxe du paramètre Azure CLI --source
est un peu différente. Voici un exemple :
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>"
Créer un point de terminaison de message
Avant de nous abonner à la rubrique, nous allons créer le point de terminaison pour le message de l’événement. En règle générale, le point de terminaison entreprend des actions en fonction des données d’événement. Pour simplifier ce guide de démarrage rapide, déployez une application web prédéfinie qui affiche les messages d’événement. La solution déployée comprend un plan App Service, une offre App Service Web Apps et du code source en provenance de GitHub.
Remplacez <your-site-name>
par un nom unique pour votre application web. Le nom de l’application web doit être unique, car il fait partie de l’entrée 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
Le déploiement peut prendre quelques minutes. Une fois le déploiement réussi, affichez votre application web pour vérifier qu’elle s’exécute. Dans un navigateur web, accédez à : https://<your-site-name>.azurewebsites.net
Vous devez voir le site sans messages affichés.
S’abonner à la rubrique système
Vous vous abonnez à une rubrique pour communiquer à Event Grid les événements qui vous intéressent, et où les envoyer. L’exemple suivant s’abonne à la rubrique système que vous avez créée et transmet l’URL à partir de votre application web en tant que point de terminaison destiné à recevoir les notifications d’événement. Remplacez <event_subscription_name>
par un nom pour votre abonnement aux événements. Pour <resource_group_name>
et <your-site-name>
, utilisez les valeurs que vous avez créées précédemment.
Le point de terminaison de votre application web doit inclure le suffixe /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
Affichez à nouveau votre application web, et notez qu’un événement de validation d’abonnement lui a été envoyé. Sélectionnez l’icône en forme d’œil pour développer les données d’événements. Event Grid envoie l’événement de validation pour que le point de terminaison puisse vérifier qu’il souhaite recevoir des données d’événement. L’application web inclut du code pour valider l’abonnement.
Créer une affectation de stratégie
Dans ce guide de démarrage rapide, vous créez une affectation de stratégie et vous attribuez la définition Exiger une étiquette sur les groupes de ressources. Cette définition de stratégie identifie les groupes de ressources qui ne contiennent pas l’étiquette configurée lors de l’attribution de stratégie.
Exécutez la commande suivante pour créer une attribution de stratégie dont l’étendue est définie sur le groupe de ressources destiné à contenir la rubrique Event Grid :
# 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\" } }'
La commande précédente utilise les informations suivantes :
- Name : nom réel de l’attribution. Dans cet exemple, nous utilisons requiredtags-events.
- DisplayName : nom d’affichage pour l’attribution de stratégie. En l’occurrence, vous utilisez Require tag on RG.
- Scope : une étendue détermine les ressources ou le regroupement de ressources sur lequel l’attribution de stratégie est appliquée. Elle va d’un abonnement à des groupes de ressources. Assurez-vous de remplacer <scope> par le nom de votre groupe de ressources. Le format de l’étendue d’un groupe de ressources est
/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
. - Policy : ID de définition de la stratégie, que vous utilisez pour créer l’attribution. En l’occurrence, il s’agit de l’ID de la définition de stratégie Require a tag on resource groups. Pour obtenir l’ID de définition de stratégie, exécutez cette commande :
az policy definition list --query "[?displayName=='Require a tag on resource groups']"
Après avoir créé l’attribution de stratégie, attendez qu’une notification d’événement Microsoft.PolicyInsights.PolicyStateCreated apparaisse dans l’application web. Au départ, le groupe de ressources que nous avons créé affiche la valeur NonCompliant pour le paramètre data.complianceState
.
Notes
Si le groupe de ressources hérite d’autres attributions de stratégie de la hiérarchie des groupes d’administration ou des abonnements, les événements correspondants s’affichent également. Pour vérifier que l’événement concerne l’affectation dans ce tutoriel, évaluez la propriété data.policyDefinitionId
.
Déclencher une modification sur le groupe de ressources
Pour rendre le groupe de ressources conforme, une étiquette portant le nom EventTest est requise. Ajoutez l’étiquette au groupe de ressources avec la commande suivante, en remplaçant <subscriptionId>
par votre ID d’abonnement et <resourceGroup>
par le nom du groupe de ressources :
# 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
Après avoir ajouté l’étiquette requise au groupe de ressources, attendez qu’une notification d’événement Microsoft.PolicyInsights.PolicyStateChanged apparaisse dans l’application web. Développez l’événement ; data.complianceState
a désormais pour valeur Compliant.
Dépannage
Si vous voyez une erreur similaire à l’une des opérations suivantes, assurez-vous que vous avez inscrit les deux fournisseurs de ressources au niveau de l’étendue à laquelle vous vous abonnez (groupe d’administration ou abonnement) :
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.'}]}
Nettoyer les ressources
Si vous envisagez de continuer à utiliser cette application web et l’abonnement aux événements Azure Policy, ne supprimez pas les ressources créées dans cet article. Sinon, utilisez la commande suivante pour supprimer les ressources créées avec cet article.
Remplacez <resource_group_name>
par le nom du groupe de ressources que vous avez créé plus haut.
az group delete --name <resource_group_name>
Étapes suivantes
Une fois que vous savez créer des rubriques et des abonnements aux événements pour Azure Policy, vous pouvez en découvrir plus sur les événements de changement d’état de stratégie et sur ce qu’Event Grid peut vous offrir :
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour