Partilhar via


Reagindo a eventos de alteração de estado da Política do Azure

Os eventos da Política do Azure permitem que os aplicativos reajam a alterações de estado. Essa integração é feita sem a necessidade de códigos complicados ou serviços de sondagem caros e ineficientes. Em vez disso, os eventos são enviados por meio da Grade de Eventos do Azure para assinantes, como o Azure Functions, os Aplicativos Lógicos do Azure ou até mesmo para seu próprio ouvinte HTTP personalizado. Essencialmente, você só paga pelo que usa.

Os eventos da Política do Azure são enviados para a Grade de Eventos do Azure, que fornece serviços de entrega confiáveis para seus aplicativos por meio de políticas avançadas de repetição e entrega de carta morta. A Grade de Eventos cuida do roteamento, filtragem e multidifusão adequados dos eventos para destinos por meio de assinaturas da Grade de Eventos. Para saber mais, consulte Entrega e repetição de mensagens da Grade de Eventos.

Nota

Os eventos de alteração de estado da Política do Azure são enviados para a Grade de Eventos depois que um gatilho de avaliação conclui 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 ecossistema 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 acionar tarefas dependendo dos estados de conformidade.
  • Entrega durável: para que os serviços e aplicativos do usuário respondam em tempo real a eventos de conformidade de políticas, a Grade de Eventos procura oferecer eventos de política com latência mínima. A Grade de Eventos tenta novamente a transmissão de um evento se o ponto de extremidade de um assinante não confirmar o recebimento ou se não confirmar, de acordo com um cronograma de repetição predeterminado e uma política de novas tentativas.
  • 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 sobre quem responde à alteração de estado. Consulte Eventos de alteração de estado da política de rota para Grade de Eventos com a CLI do Azure para obter um tutorial completo.

Há duas entidades principais ao usar a Grade de Eventos:

  • Eventos: esses eventos podem ser qualquer coisa a que um usuário queira reagir, incluindo se um estado de conformidade de política for criado, alterado e excluído de um recurso, como uma VM ou contas de armazenamento.
  • Assinaturas de grade de eventos: essas assinaturas de eventos são entidades configuradas pelo usuário que direcionam o conjunto adequado de eventos de um editor para um assinante. As assinaturas de eventos podem filtrar eventos com base no caminho do recurso do qual o evento se originou e no tipo de evento. Além disso, as Subscrições de Eventos também podem filtrar por âmbito entre a subscrição do Azure e o grupo de Gestão.

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

Outro cenário é acionar automaticamente tarefas de correção sem marcar manualmente a tarefa de criação de correção na página da política. As verificações da Grade de Eventos quanto ao estado de conformidade e aos recursos que atualmente não estão em conformidade podem ser corrigidas. Saiba mais sobre a estrutura de remediaçã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 efeitos.

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 ao longo do tempo. Os cenários para a Grelha de Eventos são infinitos e, com base na motivação, a Grelha de Eventos é configurável.

Captura de tela do modelo de Grade de Eventos de fontes e manipuladores.

Tipos de eventos disponíveis

O Azure Policy emite os seguintes tipos de evento:

Tipo de evento Description
Microsoft.PolicyInsights.PolicyStateCreated Gerado quando um estado de conformidade de política é criado.
Microsoft.PolicyInsights.PolicyStateChanged Gerado quando um estado de conformidade de política é alterado.
Microsoft.PolicyInsights.PolicyStateDeleted Gerado quando um estado de conformidade de política é excluído.

Propriedades do evento

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

Propriedade Type Description
topic string Caminho completo do recurso para a origem do evento. Este campo não pode ser gravado. O Event Grid fornece este valor.
subject string A ID totalmente qualificada do recurso para o qual a alteração do estado de conformidade se destina, incluindo o nome e o tipo de recurso. Usa o formato, /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>
eventType string Um dos tipos de eventos registados para esta origem de 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. O Event Grid define o esquema das propriedades de nível superior. O Event Grid fornece este valor.

O objeto de dados tem as seguintes propriedades:

Propriedade Type Description
timestamp string A hora (em UTC) em que o recurso foi verificado pela Política do Azure. Para ordenar eventos, use essa propriedade em vez das propriedades ou time de nível eventTime 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 O 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 estar vazio.
complianceState string O estado de conformidade do recurso em relação à atribuição de política.
subscriptionId string A ID de assinatura do recurso.
complianceReasonCode string O código de motivo de conformidade. Pode estar vazio.

Exemplo de evento

O exemplo a seguir mostra o esquema de um evento criado pelo estado da 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 de estado de política com escopo no nível de 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 exemplo a seguir mostra o esquema de um evento criado pelo estado da 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 para um evento alterado de 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 de consumo de eventos

Os aplicativos que lidam com 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 assuma que os eventos são de uma fonte 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 se destina.
  • Verifique a eventType opção e não assuma que todos os eventos que recebe são os tipos esperados.
  • Use data.timestamp para determinar a ordem dos eventos na Política do Azure, em vez do nível eventTime superior ou time das propriedades.
  • Use o campo assunto para acessar o recurso que teve uma alteração de estado de política.

Próximos passos

Saiba mais sobre a Grade de Eventos e experimente os eventos de alteração de estado da Política do Azure: