Obtenha dados de conformidade dos recursos da Azure

Um dos maiores benefícios de Azure Policy é a perspicácia e controlos que fornece sobre recursos num grupo de subscrições ou subscrições de subscrição. Este controlo pode ser exercido de muitas maneiras diferentes, tais como impedir que os recursos sejam criados no local errado, impor o uso comum e consistente da etiqueta, ou auditar os recursos existentes para configurações e configurações apropriadas. Em todos os casos, os dados são gerados por Azure Policy para que possa compreender o estado de conformidade do seu ambiente.

Existem várias formas de aceder às informações de conformidade geradas pelas suas atribuições de política e iniciativa:

Antes de analisar os métodos para relatar a conformidade, vamos olhar quando a informação de conformidade é atualizada e a frequência e eventos que desencadeiam um ciclo de avaliação.

Aviso

Se o estado de conformidade estiver a ser reportado como Não registado, verifique se o Fornecedor de Recursos Microsoft.PolicyInsights está registado e que o utilizador tem as permissões adequadas de controlo de acesso baseado em funções Azure (Azure RBAC), tal como descrito nas permissões Azure RBAC em Azure Policy.

Gatilhos de avaliação

Os resultados de um ciclo de avaliação concluído estão disponíveis no Microsoft.PolicyInsights Fornecedor de Recursos através PolicyStates e PolicyEvents operações. Para obter mais informações sobre as operações da API Azure Policy Insights REST, consulte Azure Policy Insights.

As avaliações das políticas e iniciativas atribuídas acontecem em resultado de diversos eventos:

  • Uma política ou iniciativa é recentemente atribuída a um âmbito de aplicação. Demora cerca de 30 minutos para que a atribuição seja aplicada ao âmbito definido. Uma vez aplicado, o ciclo de avaliação começa para recursos dentro desse âmbito contra a política ou iniciativa recém-atribuída e dependendo dos efeitos usados pela política ou iniciativa, os recursos são marcados como conformes, não conformes ou isentos. Uma grande política ou iniciativa avaliada contra um vasto âmbito de recursos pode levar tempo. Como tal, não há expectativa pré-definida de quando o ciclo de avaliação termina. Uma vez concluído, os resultados de conformidade atualizados estão disponíveis no portal e nos SDKs.

  • Uma política ou iniciativa já atribuída a um âmbito é atualizada. O ciclo de avaliação e o timing para este cenário é o mesmo que para uma nova atribuição a um âmbito.

  • Um recurso é implementado ou atualizado dentro de um âmbito com uma atribuição via Azure Resource Manager, REST API ou um SDK suportado. Neste cenário, o evento de efeito (apêndice, auditoria, negação, implementação) e informação de estado conforme para o recurso individual fica disponível no portal e SDKs cerca de 15 minutos depois. Este evento não causa uma avaliação de outros recursos.

  • Uma subscrição (tipo Microsoft.Resource/subscriptionsde recurso) é criada ou movida dentro de uma hierarquia de grupo de gestão com uma definição de política atribuída direcionando o tipo de recurso de subscrição. A avaliação dos efeitos suportados pela subscrição (auditoria, auditoriaIfNotExist, deployIfNotExists, modificar), registar registos e quaisquer ações de reparação demoram cerca de 30 minutos.

  • É criada, atualizada ou eliminada uma isenção de política . Neste cenário, a atribuição correspondente é avaliada para o âmbito de isenção definido.

  • Ciclo de avaliação padrão de conformidade. Uma vez a cada 24 horas, as atribuições são automaticamente reavaliadas. Uma grande política ou iniciativa de muitos recursos pode levar tempo, por isso não há expectativa pré-definida de quando o ciclo de avaliação termina. Uma vez concluído, os resultados de conformidade atualizados estão disponíveis no portal e nos SDKs.

  • O fornecedor de recursos de configuração da máquina é atualizado com detalhes de conformidade por um recurso gerido.

  • Digitalização a pedido

On-demand evaluation scan (Análise de avaliação a pedido)

Uma verificação de avaliação para uma subscrição ou um grupo de recursos pode ser iniciada com Azure CLI, Azure PowerShell, uma chamada para a API REST, ou usando o Azure Policy Compliance Scan GitHub Action. Esta tomografia é um processo assíncronos.

Nota

Nem todos os fornecedores de recursos da Azure apoiam as análises de avaliação a pedido. Por exemplo, a Azure Rede Virtual Manager (AVNM) atualmente não suporta nem gatilhos manuais nem o ciclo padrão de avaliação de conformidade com a política (digitalizações diárias).

Exame de avaliação a pedido - GitHub Action

Utilize a ação Azure Policy Compliance Scan para desencadear uma avaliação a pedido do seu fluxo de trabalho GitHub em um ou vários recursos, grupos de recursos ou subscrições, e feche o fluxo de trabalho com base no estado de conformidade dos recursos. Também pode configurar o fluxo de trabalho para funcionar em uma hora programada para que você obtenha o mais recente estado de conformidade em um momento conveniente. Opcionalmente, este GitHub Actions pode gerar um relatório sobre o estado de conformidade dos recursos digitalizados para posterior análise ou para arquivamento.

O exemplo a seguir executa uma verificação de conformidade para uma subscrição.

on:
  schedule:
    - cron:  '0 8 * * *'  # runs every morning 8am
jobs:
  assess-policy-compliance:
    runs-on: ubuntu-latest
    steps:
    - name: Login to Azure
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}

    - name: Check for resource compliance
      uses: azure/policy-compliance-scan@v0
      with:
        scopes: |
          /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Para obter mais informações e amostras de fluxo de trabalho, consulte a GitHub Actions para Azure Policy Compliance Scan repo.

Exame de avaliação a pedido - Azure CLI

A verificação de conformidade é iniciada com o comando de verificação do estado de disparo do estado az .

Por padrão, az policy state trigger-scan inicia uma avaliação para todos os recursos na subscrição atual. Para iniciar uma avaliação num grupo de recursos específico, utilize o parâmetro do grupo de recursos . O exemplo a seguir inicia uma verificação de conformidade na subscrição atual do grupo de recursos MyRG :

az policy state trigger-scan --resource-group "MyRG"

Pode optar por não esperar que o processo assíncronos esteja concluído antes de continuar com o parâmetro de não-espera .

Exame de avaliação a pedido - Azure PowerShell

A verificação de conformidade é iniciada com o cmdlet Start-AzPolicyComplianceScan .

Por padrão, Start-AzPolicyComplianceScan inicia uma avaliação para todos os recursos na subscrição atual. Para iniciar uma avaliação num grupo de recursos específico, utilize o parâmetro ResourceGroupName . O exemplo a seguir inicia uma verificação de conformidade na subscrição atual do grupo de recursos MyRG :

Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'

Pode pedir à PowerShell que aguarde que a chamada assíncronos esteja concluída antes de fornecer a saída dos resultados ou que seja executada em segundo plano como trabalho. Para utilizar uma função PowerShell para executar a verificação de conformidade em segundo plano, utilize o parâmetro AsJob e descreva o valor para um objeto, como $job neste exemplo:

$job = Start-AzPolicyComplianceScan -AsJob

Pode verificar o estado do trabalho verificando o $job objeto. O trabalho é do tipo Microsoft.Azure.Commands.Common.AzureLongRunningJob. Utilize Get-Member no $job objeto para ver propriedades e métodos disponíveis.

Enquanto a verificação de conformidade está em execução, verificando os resultados das saídas do $job objeto, tais como estes:

$job

Id     Name              PSJobTypeName     State         HasMoreData     Location             Command
--     ----              -------------     -----         -----------     --------             -------
2      Long Running O... AzureLongRunni... Running       True            localhost            Start-AzPolicyCompliance...

Quando a verificação de conformidade estiver concluída, a propriedade do Estado muda para Concluída.

Exame de avaliação a pedido - REST

Como um processo assíncronos, o ponto final DO REST para iniciar a varredura não espera até que a varredura esteja completa para responder. Em vez disso, fornece um URI para consultar o estado da avaliação solicitada.

Em cada URI da API REST, existem variáveis que são utilizadas que precisa de substituir pelos seus próprios valores:

  • {YourRG} - Substitua pelo nome do seu grupo de recursos
  • {subscriptionId} - substituir pelo ID da subscrição

A digitalização suporta a avaliação de recursos numa subscrição ou num grupo de recursos. Inicie uma verificação por âmbito com um comando REST API POST utilizando as seguintes estruturas URI:

  • Subscrição

    POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    
  • Grupo de recursos

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    

A chamada devolve um estatuto 202 Aceite . Incluído no cabeçalho de resposta é uma propriedade localização com o seguinte formato:

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01

{ResourceContainerGUID} é gerada estáticamente para o âmbito solicitado. Se um âmbito já está a ser feito a pedido, ainda não foi iniciado um novo exame. Em vez disso, o novo pedido é fornecido no mesmo {ResourceContainerGUID}local uri para o estatuto. Um comando REST API GET para o Mente Uri de localização devolve um 202 Aceite enquanto a avaliação está em curso. Quando a avaliação estiver concluída, retorna um estado de 200 OK . O corpo de uma varredura completa é uma resposta JSON com o estado:

{
    "status": "Succeeded"
}

Digitalização da avaliação a pedido - Código do Estúdio Visual

A extensão Azure Policy para o código Visual Studio é capaz de executar uma verificação de avaliação para um recurso específico. Esta varredura é um processo sincronizado, ao contrário dos métodos Azure PowerShell e REST. Para mais detalhes e etapas, consulte a avaliação a pedido com a extensão do Código VS.

Como funciona a conformidade

Numa atribuição, um recurso é incompatível se não seguir regras de política ou iniciativa e não estiver isento. O quadro a seguir mostra como os diferentes efeitos políticos funcionam com a avaliação da condição para o estado de conformidade resultante:

Estado do Recurso Efeito Avaliação da Política Estado de Compatibilidade
Nova ou Atualizada Auditoria, Modificação, AuditoriaIfNotExist Verdadeiro Em Não Conformidade
Nova ou Atualizada Auditoria, Modificação, AuditoriaIfNotExist Falso Compatível
Existe Negar, Auditar, Apender, Modificar, ImplementarIfNotExist, AuditIfNotExist Verdadeiro Em Não Conformidade
Existe Negar, Auditar, Apender, Modificar, ImplementarIfNotExist, AuditIfNotExist Falso Compatível

Nota

Os efeitos DeployIfNotExist e AuditIfNotExist requerem que a declaração IF seja VERDADEIRA e a condição de existência seja FALSA para não ser conforme. Quando for TRUE, a condição IF aciona a avaliação da condição de existência dos recursos relacionados.

Por exemplo, assuma que tem um grupo de recursos - ContsoRG, com algumas contas de armazenamento (realçadas a vermelho) que estão expostas a redes públicas.

Diagrama de contas de armazenamento expostas a redes públicas no grupo de recursos Contoso R G.

Diagrama mostrando imagens de cinco contas de armazenamento no grupo de recursos Contoso R G. As contas de armazenamento um e três são azuis, enquanto as contas de armazenamento 2, 4 e 5 são vermelhas.

Neste exemplo, é preciso ter cuidado com os riscos de segurança. Agora que criou uma atribuição de políticas, é avaliada para todas as contas de armazenamento incluídas e não isentas no grupo de recursos ContosoRG. Audita as três contas de armazenamento não conformes, alterando assim os seus Estados para não conformes.

Diagrama de conformidade da conta de armazenamento no grupo de recursos Contoso R G.

Diagrama mostrando imagens de cinco contas de armazenamento no grupo de recursos Contoso R G. As contas de armazenamento um e três têm agora marcas verdes por baixo delas, enquanto as contas de armazenamento dois, quatro e cinco têm agora sinais de aviso vermelhos por baixo deles.

Além de conformes e não conformes, as políticas e recursos têm outros quatro Estados:

  • Isento: O recurso está no âmbito de uma atribuição, mas tem uma isenção definida.
  • Conflituoso: Existem duas ou mais definições políticas com regras contraditórias. Por exemplo, duas definições anexam a mesma etiqueta com valores diferentes.
  • Ainda não começou: O ciclo de avaliação ainda não começou para a política ou recurso.
  • Não registado: O Fornecedor de Recursos Azure Policy não foi registado ou a conta iniciada não tem permissão para ler dados de conformidade.

Azure Policy usa o tipo, nome ou campos amáveis na definição para determinar se um recurso é compatível. Quando o recurso corresponde, é considerado aplicável e tem um estatuto de Conforme, Não Conforme ou Isento. Se um nome ou tipo é o único imóvel na definição, então todos os recursos incluídos e não isentos são considerados aplicáveis e são avaliados.

A percentagem de conformidade é determinada dividindo recursos conformes e isentos por recursos totais. Os recursos totais são definidos como a soma dos recursos conformes, não conformes, isentos e contraditórios . Os números globais de conformidade são a soma de recursos distintos que são conformes ou isentos divididos pela soma de todos os recursos distintos. Na imagem abaixo, existem 20 recursos distintos que são aplicáveis e apenas um é incompatível. A conformidade global com os recursos é de 95% (19 em 20).

Screenshot dos detalhes de conformidade da política da página Compliance.

Nota

A Conformidade Regulamentar em Azure Policy é uma funcionalidade de Pré-visualização. As propriedades de conformidade da SDK e páginas no portal são diferentes para iniciativas habilitadas. Para mais informações, consulte Conformidade Regulamentar

Portal

O portal do Azure mostra uma experiência gráfica de visualização e compreensão do estado de conformidade no seu ambiente. Na página Política , a opção 'Vista Geral ' fornece detalhes sobre os âmbitos disponíveis sobre o cumprimento de políticas e iniciativas. Juntamente com o estado de conformidade e a contagem por atribuição, contém um gráfico que mostra o cumprimento ao longo dos últimos sete dias. A página Compliance contém grande parte desta mesma informação (exceto o gráfico), mas fornece opções adicionais de filtragem e triagem.

Screenshot da página Compliance, opções de filtragem e detalhes.

Uma vez que uma política ou iniciativa pode ser atribuída a diferentes âmbitos, a tabela inclui o âmbito de cada atribuição e o tipo de definição que foi atribuído. O número de recursos não conformes e políticas não conformes para cada atribuição também são fornecidos. A seleção de uma política ou iniciativa na tabela proporciona um olhar mais aprofundado sobre o cumprimento dessa atribuição em particular.

Screenshot da página Detalhes de Conformidade, incluindo contagens e detalhes compatíveis com recursos.

A lista de recursos no separador de conformidade de recursos mostra o estado de avaliação dos recursos existentes para a atribuição atual. O separador não está em conformidade, mas pode ser filtrado. Os eventos (apêndice, auditoria, negação, implantação, modificação) desencadeados pelo pedido de criação de um recurso são apresentados no separador Eventos .

Nota

Para uma política do motor AKS, o recurso mostrado é o grupo de recursos.

Screenshot do separador Eventos na página Detalhes de Conformidade.

Para os recursos do modo Fornecedor de Recursos , no separador conformidade de Recursos , selecionar o recurso ou clicar à direita na linha e selecionar Os detalhes de conformidade do Ver abre os detalhes de conformidade do componente. Esta página também oferece separadores para ver as políticas que são atribuídas a este recurso, eventos, eventos componentes e alterar o histórico.

Screenshot do separador de conformidade de componentes e detalhes de conformidade para uma atribuição do modo fornecedor de recursos.

De volta à página de conformidade de recursos, selecione e mantenha (ou clique à direita) na linha do evento que pretende recolher mais detalhes e selecione registar registos de atividade. A página de registo de atividade abre e é pré-filtrada para a pesquisa mostrando detalhes para a atribuição e os eventos. O registo de atividades fornece contexto e informação adicional sobre esses eventos.

Screenshot do Registo de Atividades para atividades e avaliações Azure Policy.

Compreender o incumprimento

Quando um recurso é determinado como incompatível, existem muitas razões possíveis. Para determinar a razão pela qual um recurso não está em conformidade ou para encontrar a alteração responsável, consulte determinar o incumprimento.

Linha de comandos

A mesma informação disponível no portal pode ser recuperada com a API REST (incluindo com ARMClient), Azure PowerShell e Azure CLI. Para mais detalhes sobre a API REST, consulte a referência Azure Policy. As páginas de referência da API REST têm um botão verde 'Try It' em cada operação que lhe permite experimentá-lo diretamente no navegador.

Utilize o ARMClient ou uma ferramenta semelhante para manusear a autenticação em Azure para os exemplos de API REST.

Nota

Atualmente, a "razão para o incumprimento" não pode ser recuperada da linha de Comando. Estamos a trabalhar no mapeamento do código de razão para a "razão do incumprimento" e, neste momento, não existe qualquer ETA nesta matéria.

Resumir resultados

Com a API REST, a resumo pode ser realizada por recipiente, definição ou atribuição. Aqui está um exemplo de resumo ao nível da subscrição utilizando Azure Policy Resumo para Subscrição do Insight:

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01

A saída resume a subscrição. Na produção de exemplo abaixo, a conformidade resumida está em valor.results.nonCompliantResources e value.results.nonCompliantPolicies. Este pedido fornece mais detalhes, incluindo cada atribuição que compõem os números não conformes e as informações de definição para cada atribuição. Cada objeto de política na hierarquia fornece uma consultaResultsUri que pode ser usada para obter detalhes adicionais a esse nível.

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
    "@odata.count": 1,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
        "results": {
            "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
            "nonCompliantResources": 15,
            "nonCompliantPolicies": 1
        },
        "policyAssignments": [{
            "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
            "policySetDefinitionId": "",
            "results": {
                "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
                "nonCompliantResources": 15,
                "nonCompliantPolicies": 1
            },
            "policyDefinitions": [{
                "policyDefinitionReferenceId": "",
                "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "effect": "deny",
                "results": {
                    "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'",
                    "nonCompliantResources": 15
                }
            }]
        }]
    }]
}

Consulta de recursos

No exemplo acima, value.policyAssignments.policyDefinitions.results.consultaResilsUri fornece uma amostra URI para todos os recursos não conformes para uma definição de política específica. Olhando para o valor $filter , o ComplianceState é igual (eq) a 'NonCompliant', a PolicyAssignmentId é especificada para a definição de política e, em seguida, o Próprio PolicyDefinitionId. A razão para incluir a PolicyAssignmentId no filtro é porque o PolicyDefinitionId poderia existir em várias atribuições políticas ou de iniciativa com diferentes âmbitos. Especificando tanto o PolicyAssignmentId como o PolicyDefinitionId, podemos ser explícitos nos resultados que procuramos. Anteriormente, para o PolicyStates, utilizamos o mais recente, que automaticamente define uma janela de e para o tempo das últimas 24 horas.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'

A resposta de exemplo abaixo foi aparada a um único recurso não conforme para a brevidade. A resposta detalhada tem vários dados sobre o recurso, a política ou iniciativa, e a atribuição. Note que também pode ver que parâmetros de atribuição foram passados para a definição de política.

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
    "@odata.count": 15,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
        "timestamp": "2018-05-19T04:41:09Z",
        "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
        "policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
        "effectiveParameters": "",
        "ComplianceState": "NonCompliant",
        "subscriptionId": "{subscriptionId}",
        "resourceType": "/Microsoft.Compute/virtualMachines",
        "resourceLocation": "westus2",
        "resourceGroup": "RG-Tags",
        "resourceTags": "tbd",
        "policyAssignmentName": "37ce239ae4304622914f0c77",
        "policyAssignmentOwner": "tbd",
        "policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
        "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
        "policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
        "policyDefinitionAction": "deny",
        "policyDefinitionCategory": "tbd",
        "policySetDefinitionId": "",
        "policySetDefinitionName": "",
        "policySetDefinitionOwner": "",
        "policySetDefinitionCategory": "",
        "policySetDefinitionParameters": "",
        "managementGroupIds": "",
        "policyDefinitionReferenceId": ""
    }]
}

Ver eventos

Quando um recurso é criado ou atualizado, um resultado de avaliação de política é gerado. Os resultados são chamados de eventos políticos. Utilize o URI seguinte para visualizar os recentes eventos políticos associados à subscrição.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01

Os resultados assemelham-se ao seguinte exemplo:

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
    "@odata.count": 1,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
        "NumAuditEvents": 16
    }]
}

Para obter mais informações sobre eventos políticos de consulta, consulte o artigo de referência Azure Policy Eventos.

CLI do Azure

O grupo de comando Azure CLI para Azure Policy cobre a maioria das operações disponíveis em REST ou Azure PowerShell. Para obter a lista completa dos comandos disponíveis, consulte Azure CLI - Azure Policy Visão Geral.

Exemplo: Obter o resumo do Estado para a política mais atribuída com o maior número de recursos não conformes.

az policy state summarize --top 1

A parte superior da resposta parece este exemplo:

{
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
    "odataid": null,
    "policyAssignments": [{
            "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
            "policyDefinitions": [{
                "effect": "audit",
                "policyDefinitionGroupNames": [
                    ""
                ],
                "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
                "policyDefinitionReferenceId": "",
                "results": {
                    "nonCompliantPolicies": null,
                    "nonCompliantResources": 398,
                    "policyDetails": [{
                        "complianceState": "noncompliant",
                        "count": 1
                    }],
                    "policyGroupDetails": [{
                        "complianceState": "noncompliant",
                        "count": 1
                    }],
                    "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
                    "resourceDetails": [{
                            "complianceState": "noncompliant",
                            "count": 398
                        },
                        {
                            "complianceState": "compliant",
                            "count": 4
                        }
                    ]
                }
            }],
    ...

Exemplo: Obter o registo estatal do recurso mais recentemente avaliado (o padrão é por tempos em ordem descendente).

az policy state list --top 1
[
  {
    "complianceReasonCode": "",
    "complianceState": "Compliant",
    "effectiveParameters": "",
    "isCompliant": true,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
    "policyAssignmentName": "SecurityCenterBuiltIn",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "auditifnotexists",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "security center",
    "policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "",
    "resourceId": "/subscriptions/{subscriptionId}",
    "resourceLocation": "",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Resources/subscriptions",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.903433+00:00"
  }
]

Exemplo: Obter os detalhes de todos os recursos de rede virtuais não conformes.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

Exemplo: Obtenção de eventos relacionados com recursos de rede virtuais não conformes que ocorreram após uma data específica.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

Azure PowerShell

O módulo Azure PowerShell para Azure Policy está disponível no Galeria do PowerShell como Az.PolicyInsights. Utilizando o PowerShellGet, pode instalar o módulo utilizando Install-Module -Name Az.PolicyInsights (certifique-se de que tem as últimas Azure PowerShell instaladas):

# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights

# Import the downloaded module
Import-Module Az.PolicyInsights

# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount

O módulo tem os seguintes cmdlets:

  • Get-AzPolicyStateSummary
  • Get-AzPolicyState
  • Get-AzPolicyEvent
  • Get-AzPolicyRemediation
  • Remove-AzPolicyRemediation
  • Start-AzPolicyRemediation
  • Stop-AzPolicyRemediation

Exemplo: Obter o resumo do Estado para a política mais atribuída com o maior número de recursos não conformes.

PS> Get-AzPolicyStateSummary -Top 1

NonCompliantResources : 15
NonCompliantPolicies  : 1
PolicyAssignments     : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
                        oft.authorization/policyassignments/37ce239ae4304622914f0c77}

Exemplo: Obter o registo estatal do recurso mais recentemente avaliado (o padrão é por tempos em ordem descendente).

PS> Get-AzPolicyState -Top 1

Timestamp                  : 5/22/2018 3:47:34 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/networkInterfaces
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

Exemplo: Obter os detalhes de todos os recursos de rede virtuais não conformes.

PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"

Timestamp                  : 5/22/2018 4:02:20 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

Exemplo: Obtenção de eventos relacionados com recursos de rede virtuais não conformes que ocorreram após uma data específica, convertendo-se para um objeto CSV e exportando para um ficheiro.

$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'

A saída do $policyEvents objeto parece a seguinte saída:

Timestamp                  : 9/19/2020 5:18:53 AM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : eastus
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd
TenantId                   : {tenantId}
PrincipalOid               : {principalOid}

O campo PrincipalOid pode ser utilizado para obter um utilizador específico com o Azure PowerShell cmdlet Get-AzADUser. Substitua {principalOid} pela resposta que obtém do exemplo anterior.

PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker

Registos do Azure Monitor

Se tiver um espaço de trabalho Log Analytics com AzureActivity a solução Activity Log Analytics ligado à sua subscrição, também pode ver resultados de incumprimento da avaliação de recursos novos e atualizados utilizando consultas simples de Kusto e a AzureActivity tabela. Com detalhes nos registos do Azure Monitor, os alertas podem ser configurados para observar o incumprimento.

Screenshot dos registos do Monitor Azure mostrando Azure Policy ações na tabela AzureActivity.

Passos seguintes