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 que um usuário possa querer reagir para um recurso do Azure. Por exemplo, se um estado de conformidade de política for criado, alterado e excluído para um recurso como uma máquina virtual 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 selecionar manualmente criar tarefa de correçã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 em efeito modify
ou deployIfNotExists
. Saiba mais sobre os tipos de efeito.
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.
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 propriedadeseventTime
outime
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: