Réaction aux événements de changement d’état Azure Policy

Les événements Azure Policy permettent aux applications de réagir aux changements d’état. Cette intégration se fait sans avoir recours à un code complexe ni à des services d’interrogation coûteux et inefficaces. Au lieu de cela, les événements sont envoyés (push) via Azure Event Grid aux abonnés, comme Azure Functions, Azure Logic Apps, voire à votre propre écouteur HTTP personnalisé. Vous paierez uniquement pour ce que vous utiliserez.

Les événements Azure Policy sont envoyés à Azure Event Grid, qui fournit des services de livraison fiables à vos applications via des stratégies enrichies de nouvelle tentative et de livraison de lettres mortes. Event Grid s'occupe du routage, du filtrage et de la multidiffusion appropriés des événements vers les destinations via les abonnements Event Grid. Pour plus d’informations, consultez Distribution et nouvelle tentative de distribution de messages avec Azure Grid.

Notes

Les événements de changement d’état d’Azure Policy sont envoyés à Event Grid après qu’un déclencheur d’évaluation a terminé l’évaluation des ressources.

Les notifications Azure Event Grid pour les changements d'état de conformité des ressources peuvent prendre jusqu'à 20 minutes.

Avantages Azure Event Grid

Event Grid présente quelques avantages pour les clients et les services de l'écosystème Azure :

  • Azure Automation : pour rester à jour avec votre environnement de politique, Event Grid propose un mécanisme automatisé pour générer des alertes et déclencher des tâches en fonction des états de conformité.
  • Livraison durable : pour que les services et les applications utilisateur répondent en temps réel aux événements de conformité aux politiques, Event Grid cherche à proposer des événements de politique avec une latence minimale. Event Grid retente la transmission d'un événement si le point de terminaison d'un abonné ne parvient pas à en accuser réception ou s'il ne le fait pas, selon un calendrier de relance et une politique de relance prédéterminés.
  • Producteur d'événements personnalisés : les producteurs et consommateurs d'événements Event Grid n'ont pas besoin d'être des services Azure ou Microsoft. Les applications externes peuvent recevoir une alerte, afficher la création d'une tâche de correction ou collecter des messages indiquant qui répond au changement d'état. Pour accéder au tutoriel complet, consultez Acheminer les événements de changement d’état de stratégie à Event Grid avec Azure CLI.

Il existe deux entités principales lors de l'utilisation d'Event Grid :

  • Événements : ces événements peuvent être tout ce à quoi un utilisateur souhaite réagir, y compris si un état de conformité à la stratégie est créé, modifié et supprimé d'une ressource telle qu'une machine virtuelle ou des comptes de stockage.
  • Abonnements Event Grid : ces abonnements aux événements sont des entités configurées par l'utilisateur qui dirigent l'ensemble approprié d'événements d'un éditeur vers un abonné. Les abonnements aux événements peuvent filtrer les événements en fonction du chemin de ressource d'où provient l'événement et du type d'événement. En outre, les abonnements aux événements peuvent également filtrer par étendue entre l'abonnement Azure et le groupe de gestion.

Un scénario d'événement Azure Policy courant consiste à suivre le moment où l'état de conformité d'une ressource change pendant l'évaluation de la stratégie. L'architecture basée sur les événements est un moyen efficace de réagir à ces changements et facilite la réaction basée sur les événements aux changements d'état de conformité.

Un autre scénario consiste à déclencher automatiquement des tâches de correction sans cocher manuellement Créer une tâche de correction sur la page de stratégie. Event Grid vérifie l'état de conformité et les ressources actuellement non conformes peuvent être corrigées. En savoir plus sur la structure de remédiation. La correction nécessite une identité managée et les stratégies doivent être en effet Modify ou DeployIfNotExists. En savoir plus sur les types d'effets.

De plus, Event Grid est utile en tant que système d'audit pour stocker les changements d'état et comprendre la cause de la non-conformité au fil du temps. Les scénarios pour Event Grid sont infinis et basés sur la motivation, Event Grid est configurable.

Capture d'écran du modèle Event Grid des sources et des gestionnaires.

Types d’événement disponibles

Azure Policy émet les types d’événements suivants :

Type d'événement Description
Microsoft.PolicyInsights.PolicyStateCreated Déclenché lorsqu’un état de conformité à une stratégie est créé.
Microsoft.PolicyInsights.PolicyStateChanged Déclenché lorsqu’un état de conformité à une stratégie est modifié.
Microsoft.PolicyInsights.PolicyStateDeleted Déclenché lorsqu’un état de conformité à une stratégie est supprimé.

Propriétés d’événement

Un événement contient les données générales suivantes :

Propriété Type Description
topic string Chemin d’accès complet à la source de l’événement. Ce champ n’est pas modifiable. Event Grid fournit cette valeur.
subject string Identifiant complet de la ressource concernée par le changement de l’état de conformité, y compris le nom et le type de la ressource. Utilise le format, /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>
eventType string Un des types d’événements inscrits pour cette source d’événement.
eventTime string L’heure à quelle l’événement est généré selon l’heure UTC du fournisseur.
id string Identificateur unique de l’événement.
data object Données d’événement Azure Policy.
dataVersion string Version du schéma de l’objet de données. Le serveur de publication définit la version du schéma.
metadataVersion string Version du schéma des métadonnées d’événement. Event Grid définit le schéma des propriétés de niveau supérieur. Event Grid fournit cette valeur.

L’objet de données comporte les propriétés suivantes :

Propriété Type Description
timestamp string Heure (UTC) à laquelle la ressource a été analysée par Azure Policy. Pour trier les événements, utilisez cette propriété à la place des propriétés eventTime ou time de niveau supérieur.
policyAssignmentId string ID de ressource de l’attribution de stratégie.
policyDefinitionId string ID de ressource de la définition de stratégie.
policyDefinitionReferenceId string ID de référence de la définition de stratégie dans la définition de l’initiative, si l’attribution de la stratégie concerne une initiative. Peut être vide.
complianceState string État de conformité de la ressource par rapport à l’attribution de stratégie.
subscriptionId string ID d’abonnement de la ressource.
complianceReasonCode string Code de raison de la conformité. Peut être vide.

Exemple d’événement

L’exemple suivant montre le schéma d’un événement de création de l’état de la stratégie délimité au niveau de l’abonnement :

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

Le schéma d’un événement modifié d’état de stratégie délimité au niveau de l’abonnement est similaire :

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

L’exemple suivant montre le schéma d’un événement créé à l’état de stratégie délimité au niveau du groupe d’administration :

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

Le schéma d’un événement modifié à l’état de stratégie délimité au niveau du groupe d’administration est similaire :

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

Pratiques pour la consommation d’événements

Les applications qui gèrent les événements Azure Policy doivent respecter les pratiques recommandées :

  • Plusieurs abonnements peuvent être configurés pour acheminer les événements vers le même gestionnaire d’événements. Il ne faut donc pas supposer que les événements proviennent d’une source particulière. Au lieu de cela, consultez le sujet du message pour vérifier que l’attribution de stratégie, la définition de stratégie et la ressource auxquelles l’événement de changement d’état est destiné.
  • Vérifiez le eventType et ne supposez pas que tous les événements que vous recevez sont les types que vous attendez.
  • Utilisez data.timestamp pour déterminer l’ordre des événements dans Azure Policy, au lieu des propriétés eventTime ou time de niveau supérieur.
  • Utilisez le champ objet pour accéder à la ressource dont l’état de la stratégie a changé.

Étapes suivantes

En savoir plus sur Event Grid et essayer les événements de changement d’état Azure Policy :