Obter dados de conformidade de recursos do Azure
Os maiores benefícios do Azure Policy são o insight e os controles que ele fornece sobre os recursos em uma assinatura ou grupo de gerenciamento de assinaturas. Este controle pode ser usado para impedir que os recursos sejam criados no local errado, impor o uso comum e consistente de marcas ou auditar recursos existentes para configurações apropriadas. Em todos os casos, os dados são gerados pelo Azure Policy para que você entenda o estado de conformidade de seu ambiente.
Antes de analisar os dados de conformidade, é importante entender os estados de conformidade no Azure Policy.
Há várias maneiras de acessar as informações de conformidade geradas por sua política e iniciativas de atribuições:
- Usando o Portal do Azure
- Usando script de linha de comando
- Lendo os logs do Azure Monitor
- Por meio de consultas do Azure Resource Graph
Antes de examinar os métodos de relatório de conformidade, vamos ver quando as informações de conformidade são atualizadas, além da frequência e dos eventos que disparam um ciclo de avaliação.
Gatilhos de avaliação
Os resultados de um ciclo de avaliação concluído estão disponíveis no Provedor de Recursos Microsoft.PolicyInsights
por meio das operações PolicyStates
e PolicyEvents
. Para saber mais sobre as operações da API REST de Insights do Azure Policy, confira Insights do Azure Policy.
As avaliações de políticas atribuídas e iniciativas ocorrem como resultado de diversos eventos:
Uma política ou iniciativa foi recentemente atribuída a um escopo. 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 usados, os recursos são marcados como em conformidade, sem conformidade, isentos ou desconhecidos. Pode ser demorado avaliar uma grande política ou iniciativa em relação a um grande escopo de recursos, portanto não há uma expectativa predefinida de quando o ciclo de avaliação será concluído. Após a conclusão, os resultados de conformidade atualizados estarão disponíveis no portal e nos SDKs.
Uma política ou iniciativa já atribuída a um escopo foi atualizada. O ciclo de avaliação e o tempo desse cenário são iguais aos de uma nova atribuição a um escopo.
Um recurso é implantado ou atualizado dentro de um escopo com uma atribuição via Azure Resource Manager, API REST ou um SDK com suporte. Nesse cenário, o evento de efeito (anexar, auditar, negar, implantar) e as informações de status compatíveis com o recurso individual ficam disponíveis no portal e nos SDKs por volta de 15 minutos depois. Este evento não causa uma avaliação de outros recursos.
Uma assinatura (tipo de recurso
Microsoft.Resources/subscriptions
) é criada ou movida dentro de uma hierarquia de grupo de gerenciamento com uma definição de política atribuída visando o tipo de recurso de assinatura. A avaliação dos efeitos com suporte da assinatura (audit, auditIfNotExist, deployIfNotExists, modify), registro em log e qualquer ação de correção leva cerca de 30 minutos.Uma isenção de política é criada, atualizada ou excluída. Messe cenário, é realizada a avaliação da atribuição correspondente para verificar se ela está no escopo de isenção definido.
Ciclo de avaliação de conformidade padrão. Uma vez a cada 24 horas, as atribuições são automaticamente reavaliadas. Uma política ou iniciativa de muitos recursos pode demorar, portanto, não há uma expectativa predefinida de quando o ciclo de avaliação é concluído. Após a conclusão, os resultados de conformidade atualizados estarão disponíveis no Portal e nos SDKs.
O provedor de recursos Configuração de máquina é atualizado com detalhes de conformidade por um recurso gerenciado.
Exame sob demanda
Observação
Por design, o Azure Policy isenta todos os recursos no Microsoft.Resources
RP (provedor de recursos) da avaliação de política, com exceção de assinaturas e grupos de recursos, que podem ser avaliados.
Exame de avaliação sob demanda
A verificação de avaliação de 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 do GitHub de verificação de conformidade do Azure Policy. Essa verificação é um processo assíncrono.
Observação
Nem todos os provedores de recursos do Azure dão suporte a verificações de avaliação sob demanda. Por exemplo, atualmente, o AVNM (Gerenciador de Rede Virtual do Azure) não dá suporte a gatilhos manuais nem ao ciclo de avaliação de conformidade de política padrão (verificações diárias).
Verificação de avaliação sob demanda – Ação do GitHub
Use a ação de Verificação de Conformidade do Azure Policy para disparar 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 alterar o caminho do fluxo de trabalho com base no estado de conformidade desses recursos. Você também pode configurar o fluxo de trabalho para ser executado em um horário agendado para obter o último status de conformidade em um horário conveniente. Opcionalmente, o GitHub Actions pode gerar um relatório sobre o estado de conformidade de recursos verificados para análise posterior 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, confira o repositório do GitHub Actions para Verificação de Conformidade do Azure Policy.
Verificação 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 parâmetro resource-group
. O exemplo a seguir inicia uma verificação de conformidade na assinatura atual do grupo de recursos MyRG:
az policy state trigger-scan --resource-group "MyRG"
Você não precisa aguardar o fim do processo assíncrono para continuar com o parâmetro no-wait
.
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 parâmetro ResourceGroupName
. O exemplo a seguir inicia uma verificação de conformidade na assinatura atual do grupo de recursos MyRG:
Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'
Você pode fazer com que o PowerShell aguarde até que a chamada assíncrona seja concluída antes de fornecer a saída dos resultados ou que ela seja executada em segundo plano como um trabalho. Para usar um trabalho do PowerShell ao executar a verificação de conformidade em segundo plano, utilize o parâmetro AsJob
e defina o valor como um objeto, como $job
neste exemplo:
$job = Start-AzPolicyComplianceScan -AsJob
Você pode verificar o status do trabalho verificando o objeto $job
. O trabalho é do tipo Microsoft.Azure.Commands.Common.AzureLongRunningJob
. Use Get-Member
no objeto $job
para ver as propriedades e os métodos disponíveis.
Enquanto a verificação de conformidade está em execução, a verificação dos resultados de saída do objeto de $job
, como:
$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 propriedade State
mudará para Concluído.
Exame de avaliação sob demanda - REST
Dessa forma, o ponto de extremidade REST para iniciar o exame não espera até que o exame seja concluído para responder. Em vez disso, ele fornece um URI para consultar o status da avaliação solicitada.
Em cada URI da API REST, há variáveis usadas que precisam ser substituídas com seus próprios valores:
{YourRG}
: substitua pelo nome do grupo de recursos{subscriptionId}
: substitua por sua ID da assinatura
O exame dá suporte à avaliação de recursos em uma assinatura ou em um grupo de recursos. Inicie uma verificação por escopo com um comando POST da API REST usando as seguintes estruturas de URI:
Subscription
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
Resource group
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. No cabeçalho de resposta, está incluída uma propriedade location
com o seguinte formato:
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01
{ResourceContainerGUID}
é estaticamente gerado para o escopo solicitado. Se um escopo já estiver executando um exame sob demanda, um novo exame não será iniciado. Em vez disso, a nova solicitação recebe o mesmo URI location
{ResourceContainerGUID}
de status. Um comando GET de API REST para o URI location
retorna 202 Aceito enquanto a avaliação está em andamento. Quando a verificação de avaliação for concluída, ela retornará um status 200 OK. O corpo de um exame completo é uma resposta JSON com o status:
{
"status": "Succeeded"
}
Verificação de avaliação sob demanda – Visual Studio Code
A extensão do Azure Policy para o Visual Studio Code tem a capacidade 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. Veja mais detalhes e instruções em 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 em seu ambiente. Na página Política, a opção Visão Geral fornece detalhes dos escopos disponíveis sobre a conformidade das políticas e iniciativas. Junto com o estado de conformidade e com a contagem por atribuição, ela contém um gráfico mostrando a conformidade nos últimos sete dias. A página Conformidade contém muitas dessas mesmas informações (exceto o gráfico), mas oferece mais opções de filtragem e classificação.
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 que foi atribuído. 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. Selecione uma política ou iniciativa na tabela para ver uma análise mais profunda sobre a conformidade dessa atribuição específica.
A lista de recursos na guia Conformidade de recursos mostra o status de avaliação de 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) disparados pela solicitação para criar um recurso são mostrados na guia Eventos.
Para os recursos do modo de 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 que são atribuídas a esse recurso, eventos, eventos de componente e histórico de alterações.
De volta à página de conformidade do recurso, selecione e mantenha pressionada (ou clique com o botão direito) a linha do evento para obter mais detalhes e selecione Mostrar logs de atividade. A página do log de atividades é aberta e é pré-filtrada para a pesquisa, mostrando detalhes da tarefa e dos eventos. O log de atividades fornece um contexto adicional e informações sobre esses eventos.
Observação
Os resultados de conformidade podem ser exportados do Portal por meio de consultas do Azure Resource Graph.
Linha de comando
As mesmas informações disponíveis no portal podem ser recuperadas com a API REST (incluindo com ARMClient), Azure PowerShell e CLI do Azure. Veja os detalhes completos da API REST em Azure Policy. As páginas de referência da API REST têm um botão Experimentar em verde em cada operação para permitir que você experimente o processo diretamente no navegador.
Use o ARMClient ou uma ferramenta semelhante para lidar com a autenticação do Azure para os exemplos da API REST.
Resumir resultados
Com a API REST, o resumo pode ser executado por contêiner, por definição ou por atribuição. Veja um exemplo de resumo no nível de assinatura usando Resumir para Assinatura do Insight do Azure Policy:
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01
A saída resume a assinatura. Na saída de exemplo a seguir, a conformidade resumida está em value.results.nonCompliantResources
e em value.results.nonCompliantPolicies
. Essa solicitação fornece mais detalhes, incluindo cada atribuição que compõem os números sem conformidade e as informações de definição de cada atribuição. Cada objeto de política na hierarquia fornece um queryResultsUri
que pode ser usado para saber mais sobre aquele 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
}
}
]
}
]
}
]
}
Pesquisar recursos
No exemplo anterior, value.policyAssignments.policyDefinitions.results.queryResultsUri
fornece um URI de amostra de uma definição de política específica a todos os recursos não compatíveis. No valor $filter
, ComplianceState é igual (eq) a NonCompliant
, PolicyAssignmentId
é especificado para a definição de política e, em seguida, o próprio PolicyDefinitionId. O motivo para incluir PolicyAssignmentId
no filtro é porque PolicyDefinitionId
pode existir em diversas atribuições de políticas ou iniciativas com escopos diferentes. Ao especificar tanto PolicyAssignmentId
quanto PolicyDefinitionId
, é possível explicitar os resultados que estão sendo buscados. Anteriormente, latest
era usado para PolicyStates
, que define automaticamente uma janela de tempo from
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 reduzido a um único recurso não compatível por questões de brevidade. A resposta detalhada tem várias partes de dados sobre o recurso, a política ou a 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": ""
}
]
}
Exibir eventos
Quando um recurso é criado ou atualizado, um resultado da avaliação da política é gerado. Os resultados são chamados Eventos de Política. Use o URI a seguir para exibir eventos recentes de política associados à assinatura.
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01
Seus resultados devem se parecer com o exemplo a seguir:
{
"@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 os eventos de política, consulte o artigo de referência de Eventos do Azure Policy.
CLI do Azure
O grupo de comandos CLI do Azure para Azure Policy abrange a maioria das operações que estão disponíveis em REST ou Azure PowerShell. Veja a lista completa de comandos disponíveis em Visão geral da CLI do Azure – Azure Policy.
Exemplo: obter o estado de resumo da política superior atribuída com o maior número de recursos sem conformidade.
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 avaliada mais recentemente (o padrão é pelo 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 para todos os recursos de rede virtual sem conformidade.
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 aos recursos de rede virtual sem conformidade 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 o 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
(verifique se você tem a versão mais recente do Azure PowerShell instalada):
# 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 estado de resumo da política superior atribuída com o maior número de recursos sem conformidade.
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 avaliada mais recentemente (o padrão é pelo 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 para todos os recursos de rede virtual sem conformidade.
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 sem conformidade 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 objeto $policyEvents
deve ser semelhante à saída abaixo:
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 usado para obter um usuário específico com o cmdlet do Azure PowerShell Get-AzADUser
. Substitua {principalOid}
pela resposta obtida no exemplo anterior.
PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker
Logs do Azure Monitor
Se você tiver um workspace do Log Analytics com AzureActivity
da solução de Análise do Log de Atividades associada à sua assinatura, você também poderá ver resultados sem conformidade da avaliação de recursos novos e atualizados usando consultas Kusto simples e a tabela AzureActivity
. Com os detalhes nos logs do Azure Monitor, os alertas poderão ser configurados para inspecionar a não conformidade.
Gráfico de Recursos do Azure
Os registros de conformidade são armazenados no Azure Resource Graph (ARG). Os dados das consultas do ARG podem ser exportados para formar painéis personalizados baseados em escopos e políticas de seu interesse. Leia nossas amostras de consultas para exportar dados de conformidade por meio do ARG.
Próximas etapas
- Examine os exemplos em amostras do Azure Policy.
- Revise a estrutura de definição do Azure Policy.
- Revisar Compreendendo os efeitos da política.
- Entenda como criar políticas de maneira programática.
- Saiba como corrigir recursos fora de conformidade.
- Veja o que é um grupo de gerenciamento com Organizar seus recursos com grupos de gerenciamento do Azure.