Início Rápido: Gerir contactos de certificados do Azure Key Vault com o provedor AzAPI Terraform

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 criares os ficheiros de configuração, crias um plano de execução que te permite pré-visualizar as alterações da infraestrutura antes de serem implementadas. Depois de verificares as alterações, aplicas o plano de execução para implementar a infraestrutura.

Utilize azapi_data_plane_resource para gerir os recursos do plano de dados do Azure no Terraform. Neste exemplo, configura contactos de certificado para um Azure Key Vault.

Para conceitos fundamentais sobre como funciona a estrutura do plano de dados e parent_id os padrões, consulte Compreender a estrutura do plano de dados AzAPI.

  • Crie um Key Vault com o fornecedor AzureRM
  • Utilização azapi_data_plane_resource para configurar contactos de certificados

Pré-requisitos

  • Subscrição do Azure: Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Quando inicia sessão no portal do Azure com uma conta Microsoft, é utilizada a subscrição predefinida do Azure para essa conta.

O Terraform autentica automaticamente usando informações da assinatura padrão do Azure.

Execute az account show para verificar a conta Microsoft atual e a assinatura do Azure.

az account show

As alterações que fizer através do Terraform serão aplicadas à subscrição do Azure exibida. Se é isso que você quer, pule o resto deste artigo.

Implementar o código Terraform

  1. Crie um diretório no qual testar o código Terraform de exemplo e torná-lo o diretório atual.

  2. Crie um arquivo chamado providers.tf e insira o seguinte código:

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {
        key_vault {
          purge_soft_delete_on_destroy    = true
          recover_soft_deleted_key_vaults = true
        }
      }
    }
    
    provider "azapi" {}
    
  3. Crie um arquivo chamado variables.tf e insira o seguinte código:

    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 value to create a unique name."
    }
    
  4. Crie um arquivo chamado main.tf e insira o seguinte código:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "random_string" "kv_suffix" {
      length  = 6
      upper   = false
      special = false
    }
    
    resource "azurerm_resource_group" "example" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    data "azurerm_client_config" "current" {}
    
    resource "azurerm_key_vault" "example" {
      name                = "kv-${random_string.kv_suffix.result}"
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
      tenant_id           = data.azurerm_client_config.current.tenant_id
      sku_name            = "standard"
    
      access_policy {
        tenant_id = data.azurerm_client_config.current.tenant_id
        object_id = data.azurerm_client_config.current.object_id
    
        certificate_permissions = [
          "ManageContacts",
        ]
      }
    }
    
    resource "azapi_data_plane_resource" "certificate_contacts" {
      type      = "Microsoft.KeyVault/vaults/certificates/contacts@7.3"
      parent_id = trimsuffix(trimprefix(azurerm_key_vault.example.vault_uri, "https://"), "/")
      name      = "default"
    
      body = {
        contacts = [
          {
            emailAddress = "admin@contoso.com"
            name         = "Admin Contact"
            phone        = "555-555-0100"
          },
          {
            emailAddress = "ops@contoso.com"
            name         = "Operations"
          }
        ]
      }
    }
    

    Pontos-chave sobre azapi_data_plane_resource:

    • O type campo utiliza o formato <resource-type>@<api-version> da API do plano de dados.
    • O parent_id é o nome de host do endpoint do plano de dados (sem o https:// prefixo), não um ID de recurso ARM.
    • O name campo identifica o recurso específico dentro do elemento pai. Para contatos de certificados do Key Vault, o valor é sempre default.
  5. Crie um arquivo chamado outputs.tf e insira o seguinte código:

    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
    output "key_vault_name" {
      value = azurerm_key_vault.example.name
    }
    
    output "certificate_contacts" {
      value = azapi_data_plane_resource.certificate_contacts.output
    }
    

Execute terraform init para inicializar a implantação do Terraform. Este comando descarrega o fornecedor Azure necessário para gerir os seus recursos Azure.

terraform init -upgrade

Pontos principais:

  • O -upgrade parâmetro atualiza os plugins do fornecedor necessários para a versão mais recente que cumpra as restrições de versão da configuração.

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

terraform plan -out main.tfplan

Pontos principais:

  • O terraform plan comando 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-lhe especificar um ficheiro de saída para o plano. Usar o -out parâmetro garante que o plano que analisou é exatamente o que é aplicado.

Executa o Terraform Application para aplicar o plano de execução à tua infraestrutura cloud.

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 não usaste o -out parâmetro, chama terraform apply sem nenhum parâmetro.

Verificar os resultados

Execute az keyvault certificate contact list para recuperar os contactos do certificado.

az keyvault certificate contact list --vault-name <key_vault_name>

Limpeza de recursos

Quando já não precisares dos recursos criados via Terraform, faz os seguintes passos:

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

    terraform plan -destroy -out main.destroy.tfplan
    

    Pontos principais:

    • O terraform plan comando 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-lhe especificar um ficheiro de saída para o plano. Usar o -out parâmetro garante que o plano que analisou é 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

Solucionar problemas comuns ao usar o Terraform no Azure

Passos seguintes

Leitura adicional