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 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 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 selecionar manualmente criar tarefa 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 em modify
vigor ou deployIfNotExists
em vigor. Saiba mais sobre os tipos de efeitos.
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.
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íveleventTime
superior outime
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: