Reação a eventos de alteração de estado do Azure Policy

Os eventos do Azure Policy permitem que os aplicativos reajam às alterações de estado. Essa integração é feita sem a necessidade de um código complicado ou de serviços de sondagem caros e ineficientes. Em vez disso, os eventos são enviados por push pela Grade de Eventos do Azure a assinantes como o Azure Functions, os Aplicativos Lógicos do Azure ou até mesmo o próprio ouvinte HTTP personalizado. Você paga apenas pelo que usa.

Os eventos do Azure Policy são enviados para a Grade de Eventos do Azure que fornece serviços de entrega confiável para os seus aplicativos por meio de políticas de repetição avançadas e entrega de mensagens mortas. A Grade de Eventos cuida do roteamento, filtragem e multicast adequados dos eventos nos destinos pelas assinaturas da Grade de Eventos. Para saber mais, confira Entrega e repetição de mensagem da Grade de Eventos.

Observação

Os eventos de alteração de estado do Azure Policy são enviados para a Grade de Eventos após um gatilho de avaliação concluir a avaliação de recursos.

As notificações da Grade de Eventos para alterações de estado de conformidade de recursos podem levar até 20 minutos.

Benefícios da Grade de Eventos

A Grade de Eventos tem alguns benefícios para clientes e serviços no ambiente do Azure:

  • Automação: para se manter atualizado com seu ambiente de política, a Grade de Eventos oferece um mecanismo automatizado para gerar alertas e disparar tarefas dependendo dos estados da conformidade.
  • Entrega durável: para que os serviços e aplicativos de usuário respondam em tempo real a eventos de conformidade de política, a Grade de Eventos busca oferecer eventos de política com latência mínima. A Grade de Eventos tentará repetir a transmissão de um evento se o ponto de extremidade de um assinante não confirmar seu recebimento ou se não o fizer, de acordo com um cronograma e uma política de repetição predeterminados.
  • Produtor de eventos personalizado: os produtores e consumidores de eventos da Grade de Eventos não precisam ser serviços do Azure ou da Microsoft. Os aplicativos externos podem receber um alerta, mostrar a criação de uma tarefa de correção ou coletar mensagens de quem responde à alteração do estado. Confira Rotear eventos de alteração de estado da política para a Grade de Eventos com a CLI do Azure para obter um tutorial completo.

Há duas entidades primárias ao usar a Grade de Eventos:

  • Eventos: Esses eventos podem ser qualquer coisa a que um usuário queira reagir, inclusive se um estado de conformidade com a política for criado, alterado e excluído de um recurso, como uma VM ou contas de armazenamento.
  • Assinaturas da Grade de Eventos: essas assinaturas de evento são entidades configuradas pelo usuário que direcionam o conjunto adequado de eventos de um editor para um assinante. As assinaturas de evento podem filtrar eventos com base no caminho do recurso do qual o evento se originou e no tipo de evento. Além disso, as Assinaturas de Evento também podem filtrar por escopo entre a assinatura do Azure e o Grupo de gerenciamento.

O cenário de evento do Azure Policy comum acompanha quando o estado de conformidade de um recurso é alterado durante a avaliação da política. A arquitetura baseada em eventos é uma maneira eficiente de reagir a essas alterações e auxilia na reação baseada em eventos às alterações do estado de conformidade.

Outro cenário é disparar automaticamente as tarefas de correção sem marcar manualmente a tarefa de correção de criação na página de política. A Grade de Eventos verifica o estado de conformidade e os recursos que atualmente não estão em conformidade podem ser corrigidos. Saiba mais sobre a estrutura de correção. A correção requer uma identidade gerenciada e as políticas devem estar no efeito Modify ou DeployIfNotExists. Saiba mais sobre os tipos de efeito.

Além disso, a Grade de Eventos é útil como um sistema de auditoria para armazenar alterações de estado e entender a causa da não conformidade com o passar do tempo. Os cenários da Grade de Eventos são infinitos e, com base na motivação, a Grade de Eventos é configurável.

Screenshot of Event Grid model of sources and handlers.

Tipos de evento disponíveis

O Azure Policy emite os seguintes tipos de evento:

Tipo de evento Descrição
Microsoft.PolicyInsights.PolicyStateCreated Gerado quando um estado de conformidade de política for criado.
Microsoft.PolicyInsights.PolicyStateChanged Gerado quando um estado de conformidade de política for alterado.
Microsoft.PolicyInsights.PolicyStateDeleted Gerado quando um estado de conformidade de política for excluído.

Propriedades do evento

Um evento tem os seguintes dados de nível superior:

Propriedade Type Descrição
topic string Caminho de recurso completo para a origem do evento. Este campo não é gravável. A Grade de Eventos fornece esse valor.
subject string A ID totalmente qualificada do recurso para o qual o estado de conformidade é alterado, incluindo o nome do recurso e o tipo de recurso. Usa o formato /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>
eventType string Um dos tipos de evento registrados para a origem do evento.
eventTime string A hora em que o evento é gerado com base na hora UTC do provedor.
id string Identificador exclusivo do evento.
data objeto Dados de evento do Azure Policy.
dataVersion string A versão do esquema do objeto de dados. O publicador define a versão do esquema.
metadataVersion string A versão do esquema dos metadados do evento. Grade de Eventos define o esquema de propriedades de nível superior. A Grade de Eventos fornece esse valor.

O objeto de dados tem as seguintes propriedades:

Propriedade Type Descrição
timestamp string A hora (em UTC) em que o recurso foi examinado pelo Azure Policy. Para os eventos de ordenação, use essa propriedade em vez das propriedades eventTime ou time de nível superior.
policyAssignmentId string A ID do recurso da atribuição de política.
policyDefinitionId string A ID do recurso da definição de política.
policyDefinitionReferenceId string A ID de referência para a definição de política dentro da definição de iniciativa, se a atribuição de política for para uma iniciativa. Pode ficar em branco.
complianceState string O estado de conformidade do recurso em relação à atribuição de política.
subscriptionId string A ID da assinatura do recurso.
complianceReasonCode string O código de motivo da conformidade. Pode ficar em branco.

Exemplo de evento

O seguinte exemplo mostra o esquema de um evento criado com estado de política com escopo no nível da assinatura:

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

O esquema de um evento alterado com estado de política com escopo no nível da assinatura é semelhante:

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

O seguinte exemplo mostra o esquema de um evento criado com estado de política com escopo no nível do grupo de gerenciamento:

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

O esquema de um evento alterado com estado de política com escopo no nível do grupo de gerenciamento é semelhante:

[{
    "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áticas para consumo de eventos

Os aplicativos que gerenciam os eventos do Azure Policy devem seguir estas práticas recomendadas:

  • Várias assinaturas podem ser configuradas para rotear eventos para o mesmo manipulador de eventos, portanto, não presuma que os eventos são de uma origem específica. Em vez disso, verifique o tópico da mensagem para garantir a atribuição de política, a definição de política e o recurso para o qual o evento de alteração de estado é atribuído.
  • Marque eventType e não presuma que todos os eventos que você recebe são os tipos que você espera.
  • Use data.timestamp para determinar a ordem dos eventos no Azure Policy, em vez das propriedades eventTime ou time de nível superior.
  • Use o campo de entidade para acessar o recurso que tinha uma alteração de estado de política.

Próximas etapas

Saiba mais sobre a Grade de Eventos e experimente os eventos de alteração de estado do Azure Policy: