Início Rápido: Criar uma atribuição de política para identificar um recurso que não está em conformidade usando o Terraform

A primeira etapa para compreender a conformidade no Azure é identificar o status de seus recursos. Este guia de início rápido orienta você no processo de criação de uma atribuição de política para identificar máquinas virtuais que não estão usando discos gerenciados.

No final deste processo, você identificará com êxito quais máquinas virtuais não estão usando discos gerenciados na assinatura. Eles não estão em conformidade com a atribuição da política.

Pré-requisitos

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Terraform versão 0.12.0 ou superior configurado em seu ambiente. Para obter instruções, confira Configurar o Terraform usando o Azure Cloud Shell.
  • Este guia de início rápido exige que você execute a CLI do Azure versão 2.13.0 ou posterior. Para saber qual é a versão, execute az --version. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Criar a configuração, a variável e o arquivo de saída do Terraform

Neste guia de início rápido, você cria uma atribuição de política e atribui a definição Auditar VMs que não usam discos gerenciados (06a78e20-9358-41c9-923c-fb736d382a4d). Esta definição de política identifica recursos que não estão em conformidade com as condições configuradas na definição de política.

Primeiro, configure a configuração, a variável e os arquivos de saída do Terraform. Os recursos do Terraform para Azure Policy usam o Provedor do Azure.

  1. Crie uma pasta chamada policy-assignment e altere os diretórios nela.

  2. Crie main.tf com o seguinte código:

    Observação

    Para criar uma Atribuição de Política em um Grupo de Gerenciamento, use o recurso azurerm_management_group_policy_assignment, em um Grupo de Recursos, use o azurerm_resource_group_policy_assignment e, em uma Assinatura, use o recurso azurerm_subscription_policy_assignment.

      provider "azurerm" {
        features {}
      }
    
      terraform {
      required_providers {
          azurerm = {
              source = "hashicorp/azurerm"
              version = ">= 2.96.0"
          }
      }
      }
    
      resource "azurerm_subscription_policy_assignment" "auditvms" {
      name = "audit-vm-manageddisks"
      subscription_id = var.cust_scope
      policy_definition_id = "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d"
      description = "Shows all virtual machines not using managed disks"
      display_name = "Audit VMs without managed disks assignment"
      }
    
  3. Crie variables.tf com o seguinte código:

    variable "cust_scope" {
        default = "{scope}"
    }
    

    Um escopo determina em quais recursos ou agrupamento de recursos a atribuição de política é imposta. Ele pode variar de um grupo de gerenciamento a um recurso individual. Substitua {scope} por um dos seguintes padrões com base no recurso declarado:

    • Assinatura: /subscriptions/{subscriptionId}
    • Grupo de recursos: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Recurso: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Crie output.tf com o seguinte código:

    output "assignment_id" {
        value = azurerm_subscription_policy_assignment.auditvms.id
    }
    

Inicializar o Terraform e criar o plano

Em seguida, inicialize o Terraform para baixar os provedores necessários e, em seguida, crie um plano.

  1. Executar o comando terraform init. Esse comando baixa os módulos do Azure necessários para criar os recursos do Azure na configuração do Terraform.

    terraform init
    

    Captura de tela da execução do comando terraform init que mostra o download do módulo azurerm e uma mensagem de êxito.

  2. Faça a autenticação com CLI do Azure para o Terraform. Para obter mais informações, confira o Provedor do Azure: fazer a autenticação usando a CLI do Azure.

    az login
    
  3. Crie o plano de execução com o comando terraform plan e o parâmetro out.

    terraform plan -out assignment.tfplan
    

    Captura de tela da execução do comando terraform plan e do parâmetro out para mostrar o recurso do Azure que seria criado.

    Observação

    Para obter informações sobre como persistir planos de execução e segurança, confira Plano do Terraform: Aviso de Segurança.

Aplicar o plano de execução Terraform

Por fim, aplique o plano de execução.

Execute o comando terraform apply e especifique o assignment.tfplan já criado.

terraform apply assignment.tfplan

Captura de tela da execução do comando terraform apply e a criação do recurso resultante.

Com a mensagem "Aplicação concluída! Recursos: 1 adicionado, 0 alterado, 0 destruído." Mensagem, a atribuição de política agora está criada. Como o arquivo outputs.tf foi definido, a assignment_id também é retornada.

Identificar recursos fora de conformidade

Para exibir os recursos que não estão em conformidade nessa nova atribuição, use a assignment_id retornada por terraform apply. Com ela, execute o seguinte comando para obter as IDs de recurso dos recursos que não estão em conformidade produzidos em um arquivo JSON:

armclient post "/subscriptions/<subscriptionID>/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq '<policyAssignmentID>'&$apply=groupby((ResourceId))" > <json file to direct the output with the resource IDs into>

Seus resultados devem se parecer com o exemplo a seguir:

{
    "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
    "@odata.count": 3,
    "value": [{
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
        }

    ]
}

Os resultados são comparáveis aos que você geralmente vê listados em Recursos não compatível na exibição do Portal do Azure.

Limpar os recursos

Para remover a atribuição criada, use a CLI do Azure ou inverta o plano de execução do Terraform com terraform destroy.

  • CLI do Azure

    az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
    
  • Terraform

    terraform destroy
    

Próximas etapas

Neste guia de início rápido, você atribuiu uma definição de política para identificar recursos sem conformidade em seu ambiente do Azure.

Para saber mais sobre a atribuição de políticas para validar que novos recursos estejam em conformidade, continue com o tutorial para: