Início Rápido: Criar uma atribuição de política para identificar recursos incompatíveis com o Terraform

O primeiro passo para compreender a conformidade no Azure consiste em identificar o estado dos seus recursos. Este início rápido acompanha-o ao longo do processo de criação de uma atribuição de política para identificar máquinas virtuais que não estão a utilizar discos geridos.

No final deste processo, irá identificar com êxito as máquinas virtuais que não estão a utilizar discos geridos em toda a subscrição. Estão em não conformidade com a atribuição de política.

Pré-requisitos

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

Neste início rápido, vai criar uma atribuição de política e atribuir a definição Auditar VMs que não utilizam discos geridos (06a78e20-9358-41c9-923c-fb736d382a4d). Esta definição de política identifica recursos que não estão em conformidade com as condições definidas na definição de política.

Em primeiro lugar, configure os ficheiros de configuração, variável e saída do Terraform. Os recursos do Terraform para Azure Policy utilizar o Fornecedor do Azure.

  1. Crie uma nova pasta com o nome policy-assignment e altere os diretórios para a mesma.

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

    Nota

    Para criar uma Atribuição de Política num Grupo de Gestão, utilize o recurso azurerm_management_group_policy_assignment , para um Grupo de Recursos, utilize o azurerm_resource_group_policy_assignment e, para uma Subscrição, utilize 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 âmbito determina quais os recursos ou agrupamento de recursos em que a atribuição de política será imposta. Pode ir de um grupo de gestão a um recurso individual. Certifique-se de que substitui {scope} por um dos seguintes padrões com base no recurso declarado:

    • Subscrição: /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 um plano

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

  1. Execute o comando terraform init . Este comando transfere os módulos do Azure necessários para criar os recursos do Azure na configuração do Terraform.

    terraform init
    

    Captura de ecrã a mostrar a execução do comando terraform init que mostra a transferência do módulo azurerm e uma mensagem de êxito.

  2. Autenticar com a CLI do Azure para Terraform. Para obter mais informações, veja Fornecedor do Azure: Autenticar com 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 ecrã a mostrar a execução do comando terraform plan e o parâmetro out para mostrar o recurso do Azure que seria criado.

    Nota

    Para obter informações sobre os planos de execução persistentes e a segurança, consulte Terraform Plan: Security Warning (Plano do Terraform: Aviso de Segurança).

Aplicar o plano de execução do Terraform

Por último, aplique o plano de execução.

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

terraform apply assignment.tfplan

Captura de ecrã a mostrar a execução do comando terraform apply e a criação de recursos resultante.

Com "Aplicar concluído! Recursos: 1 adicionado, 0 alterado, 0 destruído." mensagem, a atribuição de política é agora criada. Uma vez que definimos o outputs.tf ficheiro, o assignment_id também é devolvido.

Identificar recursos que não estão em conformidade

Para ver os recursos que não estão em conformidade nesta nova atribuição, utilize o assignment_id devolvido por terraform apply. Com ele, execute o seguinte comando para obter os IDs de recursos dos recursos não conformes que são exportados para um ficheiro 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>

Os resultados assemelham-se ao seguinte exemplo:

{
    "@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 normalmente vê listados em recursos que não estão em conformidade na vista do portal do Azure.

Limpar os recursos

Para remover a atribuição criada, utilize a CLI do Azure ou reverta 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
    

Passos seguintes

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 a atribuição de políticas para validar que os novos recursos estão em conformidade, avance para o tutorial para: