Partilhar via


Guia de início rápido: criar uma atribuição de política para identificar recursos não compatíveis com a API REST

O primeiro passo para compreender a conformidade no Azure consiste em identificar o estado dos seus recursos. Neste início rápido, você cria uma atribuição de política para identificar recursos não compatíveis usando a API REST. A política é atribuída a um grupo de recursos e audita máquinas virtuais que não usam discos gerenciados. Depois de criar a atribuição de política, você identifica máquinas virtuais não compatíveis.

Este guia usa a API REST para criar uma atribuição de política e identificar recursos não compatíveis em seu ambiente do Azure. Os exemplos neste artigo usam o PowerShell e os comandos da CLI az rest do Azure. Você também pode executar os comandos a partir de um shell Bash como o az rest Git Bash.

Ao atribuir uma definição interna de política ou iniciativa, é opcional fazer referência a uma versão. As atribuições de política de definições internas usam como padrão a versão mais recente e herdam automaticamente alterações de versão secundárias, a menos que especificado de outra forma.

Pré-requisitos

Revise a sintaxe da API REST

Há dois elementos para executar comandos da API REST: o URI DA API REST e o corpo da solicitação. Para obter informações, vá para Atribuições de política - Criar.

O exemplo a seguir mostra a sintaxe REST API URI para criar uma definição de política.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope: Um escopo determina em quais recursos ou grupo de recursos a atribuição de política é imposta. Pode ir desde um grupo de gestão até um recurso individual. Substitua {scope} por um dos seguintes padrões:
    • Grupo de gestão: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Subscrição: /subscriptions/{subscriptionId}
    • Grupo de recursos: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Recurso: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
  • policyAssignmentName: Cria o nome da atribuição de política para sua atribuição. O nome é incluído na propriedade da atribuição de policyAssignmentId política.

O exemplo a seguir é o JSON para criar um arquivo de corpo de solicitação.

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName: Nome para exibição da atribuição de política.
  • description: Pode ser usado para adicionar contexto sobre a atribuição de política.
  • policyDefinitionId: O ID de definição de política que para criar a atribuição.
  • nonComplianceMessages: Defina a mensagem a ser usada quando um recurso for avaliado como não compatível. Para obter mais informações, consulte Mensagens de não conformidade de atribuição.

Ligar ao Azure

Em uma sessão de terminal do Visual Studio Code, conecte-se ao Azure. Se você tiver mais de uma assinatura, execute os comandos para definir o contexto da sua assinatura. Substitua <subscriptionID> pelo seu ID da subscrição do Azure.

az login

# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>

Use az login mesmo se estiver usando o PowerShell porque os exemplos usam comandos azur CLI az rest .

Criar uma atribuição de política

Neste exemplo, você cria uma atribuição de política e atribui as VMs de auditoria que não usam a definição de discos gerenciados .

Um corpo de solicitação é necessário para criar a atribuição. Salve o JSON a seguir em um arquivo chamado request-body.json.

{
  "properties": {
    "displayName": "Audit VM managed disks",
    "description": "Policy assignment to resource group scope created with REST API",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
    "nonComplianceMessages": [
      {
        "message": "Virtual machines should use managed disks"
      }
    ]
  }
}

Para criar sua atribuição de política em um escopo de grupo de recursos existente, use o seguinte URI DA API REST com um arquivo para o corpo da solicitação. Substitua {subscriptionId} e {resourceGroupName} pelos seus valores. O comando exibe a saída JSON em seu shell.

az rest --method put --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json

No PowerShell, o backtick (`) é necessário para escapar do at sign (@) para especificar um nome de arquivo. Em um shell Bash como o Git Bash, omita o backtick.

Para obter informações, vá para Atribuições de política - Criar.

Identificar recursos que não estão em conformidade

O estado de conformidade de uma nova atribuição de política leva alguns minutos para se tornar ativo e fornecer resultados sobre o estado da política. Você usa a API REST para exibir os recursos não compatíveis para essa atribuição de política e a saída está em JSON.

Para identificar recursos não compatíveis, execute o seguinte comando. Substitua {subscriptionId} e {resourceGroupName} pelos valores usados quando você criou a atribuição de política.

az rest --method post --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01 --uri-parameters `$filter="complianceState eq 'NonCompliant' and PolicyAssignmentName eq 'audit-vm-managed-disks'"

As filter consultas de recursos que são avaliados como não compatíveis com a definição de política denominada audit-vm-managed-disks que você criou com a atribuição de política. Novamente, observe que o backtick é usado para escapar do cifrão ($) no filtro. Para um cliente Bash, uma barra invertida (\) é um caractere de fuga comum.

Os resultados assemelham-se ao seguinte exemplo:

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 1,
  "@odata.nextLink": null,
  "value": [
    {
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "@odata.id": null,
      "complianceReasonCode": "",
      "complianceState": "NonCompliant",
      "effectiveParameters": "",
      "isCompliant": false,
      "managementGroupIds": "",
      "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks",
      "policyAssignmentName": "audit-vm-managed-disks",
      "policyAssignmentOwner": "tbd",
      "policyAssignmentParameters": "",
      "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
      "policyAssignmentVersion": "",
      "policyDefinitionAction": "audit",
      "policyDefinitionCategory": "tbd",
      "policyDefinitionGroupNames": [
        ""
      ],
      "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionName": "06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionReferenceId": "",
      "policyDefinitionVersion": "1.0.0",
      "policySetDefinitionCategory": "",
      "policySetDefinitionId": "",
      "policySetDefinitionName": "",
      "policySetDefinitionOwner": "",
      "policySetDefinitionParameters": "",
      "policySetDefinitionVersion": "",
      "resourceGroup": "{resourceGroupName}",
      "resourceId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}>",
      "resourceLocation": "westus3",
      "resourceTags": "tbd",
      "resourceType": "Microsoft.Compute/virtualMachines",
      "subscriptionId": "{subscriptionId}",
      "timestamp": "2024-03-26T02:19:28.3720191Z"
    }
  ]
}

Para obter mais informações, vá para Estados da Política - Listar Resultados da Consulta para o Grupo de Recursos.

Clean up resources (Limpar recursos)

Para remover a atribuição de política, use o seguinte comando. Substitua {subscriptionId} e {resourceGroupName} pelos valores usados quando você criou a atribuição de política. O comando exibe a saída JSON em seu shell.

az rest --method delete --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01

Você pode verificar se a atribuição de política foi excluída com o seguinte comando. Uma mensagem é exibida em seu shell.

az rest --method get --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
The policy assignment 'audit-vm-managed-disks' is not found.

Para obter mais informações, vá para Atribuições de política - Excluir e Atribuições de política - Obter.

Próximos passos

Neste guia de introdução, atribuiu uma definição de política para identificar recursos incompatíveis no seu ambiente do Azure.

Para saber mais sobre como atribuir políticas que validam a conformidade de recursos, continue para o tutorial.