Compartir a través de


Reacción a los eventos de cambio de estado de Azure Policy

Los eventos de Azure Policy permiten a las aplicaciones reaccionar a los cambios de estado. Esta integración se consigue sin necesidad de usar código complejo ni servicios de sondeo costosos e ineficientes. En su lugar, se insertan eventos mediante Azure Event Grid a los suscriptores como Azure Functions, Azure Logic Apps o incluso su propio cliente de escucha HTTP. De forma crítica, solo paga por lo que utiliza.

Los eventos de Azure Policy se envían a Azure Event Grid, que proporciona servicios de entrega confiables para sus aplicaciones mediante directivas de reintento enriquecidas y entrega de mensajes fallidos. Event Grid se encarga del enrutamiento, filtrado y multidifusión adecuados de los eventos a destinos a través de suscripciones a Event Grid. Para más información, consulte Entrega y reintento de entrega de mensajes de Event Grid.

Nota:

Los eventos de cambio de estado de Azure Policy se envían a Event Grid después de que un desencadenador de evaluación finalice la evaluación de recursos.

Las notificaciones de Event Grid para los cambios de estado de cumplimiento de recursos pueden tardar hasta 20 minutos.

Ventajas de Event Grid

Event Grid tiene algunas ventajas para los clientes y servicios en el ecosistema de Azure:

  • Automatización: para mantenerse al día con el entorno de directivas, Event Grid ofrece un mecanismo automatizado para generar alertas y desencadenar tareas en función de los estados de cumplimiento.
  • Entrega duradera: para que los servicios y las aplicaciones de usuario respondan en tiempo real a los eventos de cumplimiento de directivas, Event Grid busca ofrecer eventos de directiva con latencia mínima. Event Grid vuelve a intentar transmitir un evento si el punto de conexión de un suscriptor no recibe el evento o no pude confirmar dicha recepción, según una programación de reintento predeterminada y una directiva de reintento.
  • Productor de eventos personalizados: los productores y consumidores de eventos de Event Grid no necesitan ser servicios de Azure o Microsoft. Las aplicaciones externas pueden recibir una alerta, mostrar la creación de una tarea de corrección o recopilar mensajes sobre quién responde al cambio de estado. Consulte Enrutamiento de eventos de cambio de estado de directivas a Event Grid con la CLI de Azure para obtener un tutorial completo.

Hay dos entidades principales al usar Event Grid:

  • Eventos: estos eventos pueden ser cualquier cosa a la que un usuario quiera reaccionar. Incluye si se crea, cambia y elimina un estado de cumplimiento de directiva de un recurso como una máquina virtual o cuentas de almacenamiento.
  • Suscripciones de Event Grid: estas suscripciones de eventos son entidades configuradas por el usuario que dirigen el conjunto adecuado de eventos de un publicador a un suscriptor. Las suscripciones de eventos pueden filtrar eventos en función de la ruta de acceso del recurso desde la que se ha originado el evento y el tipo de evento. Además, las suscripciones de eventos también pueden filtrar por ámbito entre la suscripción de Azure y el grupo de administración.

Un escenario de eventos común de Azure Policy es realizar el seguimiento cuando cambia el estado de cumplimiento de un recurso durante la evaluación de la directiva. La arquitectura basada en eventos es una manera eficaz de reaccionar a estos cambios. Esta también ayuda con la reacción basada en eventos relacionada con los cambios de estado de cumplimiento.

Otro escenario consiste en desencadenar tareas de corrección de manera automática sin marcar manualmente la tarea de corrección de creación en la página de directiva. Event Grid comprueba el estado de cumplimiento y los recursos que no son compatibles actualmente se pueden solucionar. Obtenga más información sobre la estructura de corrección. La corrección requiere que una identidad administrada y directivas estén en el efecto Modify o DeployIfNotExists. Obtenga más información sobre los tipos de efecto.

Además, Event Grid es útil como sistema de auditoría para almacenar los cambios de estado y comprender la causa de incumplimiento a lo largo del tiempo. Los escenarios de Event Grid son infinitos y dependen de los propósitos de uso. Event Grid es configurable.

Captura de pantalla de los modelos de orígenes y controladores de Event Grid.

Tipos de eventos disponibles

Azure Policy emite los siguientes tipos de eventos:

Tipo de evento Descripción
Microsoft.PolicyInsights.PolicyStateCreated Se genera cuando se crea un estado de cumplimiento de directiva.
Microsoft.PolicyInsights.PolicyStateChanged Se genera cuando se cambia un estado de cumplimiento de directiva.
Microsoft.PolicyInsights.PolicyStateDeleted Se genera cuando se elimina un estado de cumplimiento de directiva.

Propiedades de evento

Un evento tiene los siguientes datos de nivel superior:

Propiedad Tipo Description
topic string Ruta de acceso completa a los recursos del origen del evento. En este campo no se puede escribir. Event Grid proporciona este valor.
subject string Id. completo del recurso para el que se cambia el estado de cumplimiento, incluido el nombre del recurso y el tipo de recurso. Usa el formato /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>
eventType string Uno de los tipos de eventos registrados para este origen de eventos.
eventTime string La hora de generación del evento en función de la hora UTC del proveedor.
id string Identificador único para el evento
data object Datos de evento de Azure Policy.
dataVersion string Versión del esquema del objeto de datos. El publicador define la versión del esquema.
metadataVersion string Versión del esquema de los metadatos del evento. Event Grid define el esquema de las propiedades de nivel superior. Event Grid proporciona este valor.

El objeto data tiene las siguientes propiedades:

Propiedad Tipo Description
timestamp string La hora (en UTC) en la que Azure Policy examinó el recurso. En el caso de los eventos de ordenación, use esta propiedad en lugar de las propiedades de nivel superior eventTime o time.
policyAssignmentId string El id. de recurso de la asignación de directiva.
policyDefinitionId string El id. de recurso de la definición de directiva.
policyDefinitionReferenceId string Id. de referencia de la definición de directiva dentro de la definición de la iniciativa, si la asignación de la directiva es para una iniciativa. Puede estar vacío.
complianceState string El estado de cumplimiento del recurso con respecto a la asignación de directiva.
subscriptionId string Identificador de suscripción del recurso.
complianceReasonCode string Código de motivo de cumplimiento. Puede estar vacío.

Evento de ejemplo

En el ejemplo siguiente, se muestra el esquema de un evento de creación de estado de directiva con ámbito en el nivel de suscripción:

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

El esquema de un evento cambiado de estado de directiva con ámbito en el nivel de suscripción es similar:

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

En el ejemplo siguiente, se muestra el esquema de un evento de creación de estado de directiva con ámbito en el nivel de grupo de administración:

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

El esquema de un evento cambiado de estado de directiva con ámbito en el nivel de grupo de administración es similar:

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

Prácticas para consumir eventos

Las aplicaciones que administran los eventos de Azure Policy deben seguir estos procedimientos recomendados:

  • Se pueden configurar varias suscripciones para enrutar los eventos al mismo controlador de eventos, por lo que no hay que asumir que los eventos procedan de un origen determinado. En su lugar, consulte el tema del mensaje para asegurarse de que la asignación de directiva, la definición de directiva y el recurso para el cual es el evento de cambio de estado.
  • Compruebe eventType y no asuma que todos los eventos que recibe son del tipo que espera.
  • Use data.timestamp para determinar el orden de los eventos en Azure Policy, en lugar de las propiedades eventTime o time de nivel superior.
  • Use el campo del asunto para obtener acceso al recurso que tenía un cambio de estado de directiva.

Pasos siguientes

Obtenga más información sobre Event Grid y pruebe los eventos de cambio de estado de Azure Policy: