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 guia de início rápido orienta você pelo processo de criação de uma atribuição de política para identificar máquinas virtuais que não estão usando discos gerenciados.

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 para definições internas utilizam, por padrão, a versão mais recente e herdam automaticamente alterações de versões menores, a menos que especificado de outra forma.

Terraform permite a definição, visualização e implantação de infraestrutura em nuvem. Usando Terraform, você cria arquivos de configuração usando a sintaxe HCL. A sintaxe HCL permite especificar o provedor de nuvem - como o Azure - e os elementos que compõem sua infraestrutura de nuvem. Depois de criar os arquivos de configuração, você cria um plano de execução que permite visualizar as alterações na infraestrutura antes que elas sejam implantadas. Depois de verificar as alterações, você aplica o plano de execução para implantar a infraestrutura.

Neste artigo, você aprenderá a:

  • Recupere a configuração atual do cliente do Azure.
  • Crie um grupo de recursos do Azure com o nome aleatório gerado.
  • Criar atribuição de política de assinatura para identificar máquinas virtuais que não estão usando discos gerenciados

Pré-requisitos

Implementar o código Terraform

O código de exemplo para este artigo está localizado no repositório GitHub do Azure Terraform. Você pode visualizar o arquivo de log que contém os resultados do teste das versões atual e anterior do Terraform. Veja mais artigos e código de exemplo mostrando como usar o Terraform para gerenciar recursos do Azure

  1. Crie um diretório no qual testar e executar o código Terraform de exemplo e torne-o o diretório atual.

  2. Crie um arquivo chamado providers.tf e insira o código a seguir.

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. Crie um arquivo chamado main.tf e insira o código a seguir.

    # Create a random pet name to ensure unique resource group name
    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    # Create a resource group
    resource "azurerm_resource_group" "example" {
      ___location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    # Get the current subscription
    data "azurerm_subscription" "current" {}
    
    # Create a subscription policy assignment
    resource "azurerm_subscription_policy_assignment" "auditvms" {
      name                 = "audit-vm-manageddisks"
      subscription_id      = coalesce(var.scope, "/subscriptions/${data.azurerm_subscription.current.subscription_id}")
      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"
    }
    
  4. Crie um arquivo chamado variables.tf e insira o código a seguir.

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "scope" {
      type        = string
      default     = ""
      description = "Scope of the policy assignment."
    }
    
  5. Crie um arquivo chamado outputs.tf e insira o código a seguir.

    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
    output "assignment_id" {
      value = azurerm_subscription_policy_assignment.auditvms.id
    }
    
    output "subscription_id" {
      value = data.azurerm_subscription.current.subscription_id
    }
    

Especificar âmbito

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. Para usar qualquer um dos escopos a seguir, atualize a variável scope no arquivo variables.tf. Se deixar o valor da variável scope em branco, o escopo "assinatura" será utilizado.

  • Subscrição: /subscriptions/<subscription_id>
  • Grupo de recursos: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>
  • Recurso: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/<resource_provider_namespace>/[{parentResourcePath}/]

Inicializar Terraform

Importante

Se você estiver usando o provedor azurerm 4.x, deverá especificar explicitamente a ID de assinatura do Azure para autenticar no Azure antes de executar os comandos Terraform.

Uma maneira de especificar a ID de assinatura do Azure sem colocá-la no providers bloco é especificar a ID da assinatura em uma variável de ambiente chamada ARM_SUBSCRIPTION_ID.

Para obter mais informações, consulte a documentação de referência do provedor do Azure.

Execute terraform init para inicializar a implantação do Terraform. Este comando baixa o provedor do Azure necessário para gerenciar seus recursos do Azure.

terraform init -upgrade

Pontos principais:

  • O parâmetro -upgrade atualiza os plug-ins de provedor necessários para a versão mais recente que está em conformidade com as restrições de versão da configuração.

Criar um plano de execução do Terraform

Execute o comando terraform plan para criar um plano de execução.

terraform plan -out main.tfplan

Pontos principais:

  • O comando terraform plan cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer quaisquer alterações nos recursos reais.
  • O parâmetro opcional -out permite especificar um arquivo de saída para o plano. O uso do -out parâmetro garante que o plano revisado seja exatamente o que é aplicado.

Aplicar um plano de execução do Terraform

Execute terraform apply para aplicar o plano de execução à sua infraestrutura de nuvem.

terraform apply main.tfplan

Pontos principais:

  • O comando de exemplo terraform apply pressupõe que já executaste terraform plan -out main.tfplan anteriormente.
  • Se você especificou um nome de arquivo diferente para o parâmetro -out, use esse mesmo nome de arquivo na chamada para terraform apply.
  • Se você não usou o parâmetro -out, chame terraform apply sem nenhum parâmetro.

Verificar os resultados

  1. Obtenha o _assignment\_id_ devolvido por terraform apply.

  2. Execute o comando a seguir para exibir os recursos que não estão em conformidade com sua nova atribuição de política.

    armclient post "/subscriptions/<subscription_id>/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>
    
  3. Os resultados são comparáveis ao que você vê listado em Recursos não compatíveis no modo de exibição do portal do Azure.

Limpar recursos

Quando você não precisar mais dos recursos criados via Terraform, execute as seguintes etapas:

  1. Execute terraform plan e especifique o destroy parâmetro.

    terraform plan -destroy -out main.destroy.tfplan
    

    Pontos principais:

    • O comando terraform plan cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer quaisquer alterações nos recursos reais.
    • O parâmetro opcional -out permite especificar um arquivo de saída para o plano. O uso do -out parâmetro garante que o plano revisado seja exatamente o que é aplicado.
  2. Execute terraform apply para aplicar o plano de execução.

    terraform apply main.destroy.tfplan
    

Solucionar problemas do Terraform no Azure

Solucione problemas comuns ao usar o Terraform no Azure.

Próximos passos