Partilhar via


Obter dados de conformidade dos recursos do Azure

Um dos maiores benefícios do Azure Policy é a perceção e os controles que ele fornece sobre os recursos em uma assinatura ou grupo de gerenciamento de assinaturas. Esse controle pode ser usado para impedir que recursos sejam criados no local errado, impor o uso comum e consistente de tags ou auditar recursos existentes para configurações e configurações apropriadas. Em todos os casos, os dados são gerados pela Política do Azure para permitir que você entenda o estado de conformidade do seu ambiente.

Antes de analisar os dados de conformidade, é importante entender os estados de conformidade na Política do Azure.

Há várias maneiras de acessar as informações de conformidade geradas por suas atribuições de política e iniciativa:

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

Gatilhos de avaliação

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

As avaliações das políticas e iniciativas atribuídas são o resultado de vários eventos:

  • Uma política ou iniciativa é recentemente atribuída a um âmbito. Leva cerca de cinco minutos para que a atribuição seja aplicada ao escopo definido e, em seguida, o ciclo de avaliação começa para os recursos aplicáveis em relação à política ou iniciativa recém-atribuída. Dependendo dos efeitos utilizados, os recursos são marcados como conformes, não conformes, isentos ou desconhecidos. Uma grande política ou iniciativa avaliada em relação a um grande escopo de recursos pode levar tempo, portanto, não há expectativa predefinida de quando o ciclo de avaliação será concluído. Após a conclusão, os resultados de conformidade atualizados ficam 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 tempo para este cenário são os mesmos que para uma nova atribuição a um escopo.

  • Um recurso é implantado ou atualizado dentro de um escopo com uma atribuição por meio do Gerenciador de Recursos do Azure, API REST ou um SDK com suporte. Nesse cenário, o evento de efeito (acrescentar, auditar, negar, implantar) e as informações de status compatíveis para o recurso individual ficam disponíveis no portal e SDKs cerca de 15 minutos depois. Este evento não causa uma avaliação de outros recursos.

  • Uma assinatura (tipo Microsoft.Resources/subscriptionsde recurso) é criada ou movida dentro de uma hierarquia de grupo de gerenciamento com uma definição de política atribuída direcionada ao tipo de recurso de assinatura. A avaliação dos efeitos suportados pela assinatura (auditoria, auditIfNotExist, deployIfNotExists, modificar), registro em log e quaisquer ações de correção leva cerca de 30 minutos.

  • Uma isenção de política é criada, atualizada ou excluída. Nesse cenário, a atribuição correspondente é avaliada para o escopo de isenção definido.

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

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

  • Varredura por solicitação

Nota

Por design, a Política do Azure isenta todos os recursos sob o Microsoft.Resources provedor de recursos (RP) da avaliação de políticas, com exceção de assinaturas e grupos de recursos, que podem ser avaliados.

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

Uma verificação de avaliação para uma assinatura ou um grupo de recursos pode ser iniciada com a CLI do Azure, o Azure PowerShell, uma chamada para a API REST ou usando a Ação GitHub de Verificação de Conformidade de Política do Azure. Esta verificação é um processo assíncrono.

Nota

Nem todos os provedores de recursos do Azure oferecem suporte a verificações de avaliação sob demanda. Por exemplo, o Azure Virtual Network Manager (AVNM) atualmente não oferece suporte a gatilhos manuais ou ao ciclo de avaliação de conformidade de política padrão (verificações diárias).

Varredura de avaliação sob demanda - GitHub Action

Use a ação Varredura de Conformidade de Política do Azure para acionar uma verificação de avaliação sob demanda do seu fluxo de trabalho do GitHub em um ou vários recursos, grupos de recursos ou assinaturas e cancele o fluxo de trabalho com base no estado de conformidade dos recursos. Você também pode configurar o fluxo de trabalho para ser executado em um horário agendado para obter o status de conformidade mais recente em um momento conveniente. Opcionalmente, as Ações do GitHub podem gerar um relatório sobre o estado de conformidade dos recursos digitalizados para análise adicional ou arquivamento.

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

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 exemplos de fluxo de trabalho, consulte o repositório GitHub Actions for Azure Policy Compliance Scan.

Varredura de avaliação sob demanda - CLI do Azure

A verificação de conformidade é iniciada com o comando az policy state trigger-scan .

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

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

Você pode optar por não esperar a conclusão do processo assíncrono antes de continuar com o no-wait parâmetro.

Varredura de avaliação sob demanda - 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 assinatura atual. Para iniciar uma avaliação em um grupo de recursos específico, use o ResourceGroupName parâmetro. O exemplo a seguir inicia uma verificação de conformidade na assinatura atual para o grupo de recursos MyRG :

Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'

Você pode fazer com que o PowerShell aguarde a conclusão da chamada assíncrona antes de fornecer a saída de resultados ou faça com que ela seja executada em segundo plano como um trabalho. Para usar um trabalho do PowerShell para executar a verificação de conformidade em segundo plano, use o AsJob parâmetro e defina o valor como um objeto, como $job neste exemplo:

$job = Start-AzPolicyComplianceScan -AsJob

Você pode verificar o status do trabalho verificando o $job objeto. O trabalho é do tipo Microsoft.Azure.Commands.Common.AzureLongRunningJob. Use Get-Member no objeto para ver as propriedades e métodos $job disponíveis.

Enquanto a verificação de conformidade está em execução, a verificação do $job objeto produz resultados 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 for concluída, a State propriedade será alterada para Concluído.

Varredura de avaliação sob demanda - REST

Como um processo assíncrono, o ponto de extremidade REST para iniciar a verificação não espera até que a verificação seja concluída para responder. Em vez disso, ele fornece um URI para consultar o status 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 verificação oferece suporte à avaliação de recursos em uma assinatura ou em um grupo de recursos. Inicie uma verificação por escopo com um comando REST API POST usando as seguintes estruturas de 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 retorna um status 202 Aceito. Incluído no cabeçalho de resposta está uma location propriedade com o seguinte formato:

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

{ResourceContainerGUID} é gerado estaticamente para o escopo solicitado. Se um escopo já estiver executando uma varredura por solicitação, uma nova verificação não será iniciada. Em vez disso, a nova solicitação recebe o mesmo {ResourceContainerGUID} location URI para status. Um comando REST API GET para o location URI retorna um 202 Accepted enquanto a avaliação está em andamento. Quando a verificação de avaliação estiver concluída, ela retornará um status 200 OK . O corpo de uma verificação concluída é uma resposta JSON com o status:

{
  "status": "Succeeded"
}

Varredura de avaliação sob demanda - Visual Studio Code

A extensão de Política do Azure para Visual Studio Code é capaz de executar uma verificação de avaliação para um recurso específico. Essa verificação é um processo síncrono, ao contrário dos métodos Azure PowerShell e REST. Para obter detalhes e etapas, consulte Avaliação sob demanda com a extensão VS Code.

Portal

O portal do Azure apresenta 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 Visão geral fornece detalhes sobre os escopos disponíveis sobre a conformidade de políticas e iniciativas. Juntamente com o estado de conformidade e a contagem por atribuição, contém um gráfico que mostra a conformidade nos últimos sete dias. A página Conformidade contém muitas dessas mesmas informações (exceto o gráfico), mas fornece mais opções de filtragem e classificação.

Captura de ecrã da página Conformidade, opções de filtragem e detalhes.

Como uma política ou iniciativa pode ser atribuída a escopos diferentes, a tabela inclui o escopo de cada atribuição e o tipo de definição atribuída. O número de recursos não compatíveis e políticas não compatíveis para cada atribuição também são fornecidos. A seleção de uma política ou iniciativa na tabela fornece uma visão mais profunda da conformidade para essa atribuição específica.

Captura de ecrã da página Detalhes de Conformidade, incluindo contagens e detalhes em conformidade com os recursos.

A lista de recursos na guia Conformidade de recursos mostra o status de avaliação dos recursos existentes para a atribuição atual. O padrão da guia é Não compatível, mas pode ser filtrado. Os eventos (acrescentar, auditar, negar, implantar, modificar) acionados pela solicitação para criar um recurso são mostrados na guia Eventos .

Captura de ecrã do separador Eventos na página Detalhes de Conformidade.

Para recursos do modo Provedor de Recursos, na guia Conformidade de recursos, selecionar o recurso ou clicar com o botão direito do mouse na linha e selecionar Exibir detalhes de conformidade abre os detalhes de conformidade do componente. Esta página também oferece guias para ver as políticas atribuídas a esse recurso, eventos, eventos de componentes e histórico de alterações.

Captura de ecrã do separador Conformidade de Componentes e detalhes de conformidade de uma atribuição de modo de Fornecedor de Recursos.

De volta à página de conformidade de recursos, selecione e segure (ou clique com o botão direito do mouse) na linha do evento em que você deseja reunir mais detalhes e selecione Mostrar logs de atividades. A página do registro de atividades é aberta e pré-filtrada para a pesquisa, mostrando detalhes da atribuição e dos eventos. O log de atividades fornece mais contexto e informações sobre esses eventos.

Captura de ecrã do Registo de Atividades para atividades e avaliações do Azure Policy.

Nota

Os resultados de conformidade podem ser exportados do Portal por meio de consultas do Azure Resource Graph.

Linha de comandos

As mesmas informações disponíveis no portal podem ser recuperadas com a API REST (inclusive com ARMClient), Azure PowerShell e CLI do Azure. Para obter detalhes completos sobre a API REST, consulte a referência da Política do Azure. As páginas de referência da API REST têm um botão verde Try It em cada operação que permite experimentá-lo diretamente no navegador.

Use ARMClient ou uma ferramenta semelhante para manipular a autenticação no Azure para os exemplos da API REST.

Resumir os resultados

Com a API REST, o resumo pode ser realizado por contêiner, definição ou atribuição. Veja um exemplo de resumo no nível de assinatura usando o Resumo para Assinatura do Azure Policy Insight:

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

A saída resume a assinatura. No exemplo de saída a seguir, a conformidade resumida está em value.results.nonCompliantResources e value.results.nonCompliantPolicies. Esta solicitação fornece mais detalhes, incluindo cada atribuição que compôs 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 um queryResultsUri que pode ser usado para obter mais detalhes nesse 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 anterior, value.policyAssignments.policyDefinitions.results.queryResultsUri fornece um URI de exemplo para todos os recursos não compatíveis para uma definição de política específica. $filter No valor, ComplianceState é igual (eq) a NonCompliant, PolicyAssignmentId é especificado para a definição de política e, em seguida, o próprio PolicyDefinitionId. A razão para incluir o PolicyAssignmentId no filtro é porque o PolicyDefinitionId pode existir em várias atribuições de política ou iniciativa com escopos diferentes. Ao especificar o PolicyAssignmentId e o PolicyDefinitionId, podemos ser explícitos nos resultados que procuramos. Anteriormente, para PolicyStates nós usamos latest, que define automaticamente uma from janela de tempo e to 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'

O exemplo de resposta a seguir foi cortado para um único recurso não compatível por uma questão de brevidade. A resposta detalhada tem vários dados sobre o recurso, a política ou iniciativa e a atribuição. Observe que você também pode ver quais 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 de política. Use o seguinte URI para exibir eventos de política recentes associados à assinatura.

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 como consultar eventos de política, consulte o artigo de referência Eventos de Política do Azure.

CLI do Azure

O grupo de comandos da CLI do Azure para a Política do Azure abrange a maioria das operações disponíveis no REST ou no Azure PowerShell. Para obter a lista completa de comandos disponíveis, consulte CLI do Azure - Visão geral da política do Azure.

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

az policy state summarize --top 1

A parte superior da resposta é semelhante a 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 registro de estado para o recurso avaliado mais recentemente (o padrão é por carimbo de data/hora em ordem decrescente).

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 virtual não compatíveis.

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: Obter eventos relacionados a recursos de rede virtual não compatíveis 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 do Azure PowerShell para Azure Policy está disponível na Galeria do PowerShell como Az.PolicyInsights. Usando o PowerShellGet, você pode instalar o módulo usando Install-Module -Name Az.PolicyInsights (certifique-se de ter o Azure PowerShell mais recente instalado):

# 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 compatíveis.

PS> Get-AzPolicyStateSummary -Top 1

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

Exemplo: Obter o registro de estado para o recurso avaliado mais recentemente (o padrão é por carimbo de data/hora em ordem decrescente).

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 virtual não compatíveis.

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: Obter eventos relacionados a recursos de rede virtual não compatíveis que ocorreram após uma data específica, converter em um objeto CSV e exportar para um arquivo.

$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 se parece com 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 PrincipalOid campo pode ser usado para obter um usuário específico com o cmdlet Get-AzADUserdo Azure PowerShell. Substitua {principalOid} pela resposta obtida no exemplo anterior.

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

Registos do Azure Monitor

Se você tiver um espaço de trabalho do Log Analytics com AzureActivity a solução Activity Log Analytics vinculada à sua assinatura, também poderá visualizar os resultados de não conformidade da avaliação de recursos novos e atualizados usando consultas Kusto simples e a AzureActivity tabela. Com detalhes nos logs do Azure Monitor, os alertas podem ser configurados para observar a não conformidade.

Captura de ecrã dos registos do Azure Monitor que mostram as ações da Política do Azure na tabela AzureActivity.

Azure Resource Graph

Os registros de conformidade são armazenados no Azure Resource Graph (ARG). Os dados podem ser exportados de consultas ARG para formar painéis personalizados com base nos escopos e políticas de interesse. Analise nossas consultas de exemplo para exportar dados de conformidade por meio do ARG.

Próximos passos