Partilhar via


Guia de início rápido: crie uma atribuição de política para identificar recursos não compatíveis usando 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 desse processo, você identifica máquinas virtuais que não estão usando discos gerenciados na assinatura. Estão em não conformidade com a atribuição de política.

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

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

Neste início rápido, vai criar uma atribuição de política e atribuir a definição VMs de Auditoria que não utilizam discos geridos. 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.

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

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

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

    Nota

    Para criar uma Atribuição de Política em um Grupo de Gerenciamento, use o recurso azurerm_management_group_policy_assignment , para um Grupo de Recursos use o azurerm_resource_group_policy_assignment e para 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 âmbito determina quais os recursos ou agrupamento de recursos em que a atribuição de política será imposta. Pode ir desde um grupo de gestão até um recurso individual. Certifique-se de substituir {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 Terraform e criar plano

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

  1. Execute o comando terraform init . Este 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 sucesso.

  2. Autentique-se com a CLI do Azure para Terraform. Para obter mais informações, consulte Provedor do Azure: Autenticando 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.

    Nota

    Para obter informações sobre planos de execução persistentes e segurança, consulte Plano Terraform: Aviso de segurança.

Aplicar o plano de execução do Terraform

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 da criação de recursos resultante.

Com a Apply complete! Resources: 1 added, 0 changed, 0 destroyed. mensagem, a atribuição de política é criada. Desde que definimos o outputs.tf arquivo, o assignment_id também é retornado.

Identificar recursos que não estão em conformidade

Para exibir os recursos que não estão em conformidade com essa nova atribuição, use o assignment_id retornado pelo terraform apply. Com ele, execute o seguinte comando para obter as IDs de recursos dos recursos não compatíveis que são enviados para 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>

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.

Clean up resources (Limpar recursos)

Para remover a atribuição criada, use 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
    

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 para validar se os novos recursos estão em conformidade, continue no tutorial para: