Guia de início rápido: criar um provedor de atestado do Azure usando o Terraform

O Atestado do Microsoft Azure é uma solução para atestar Ambientes de Execução Confiáveis (TEEs). Este guia de início rápido se concentra no processo de criação de uma política de Atestado do Microsoft Azure usando o Terraform.

Neste artigo, vai aprender a:

Pré-requisitos

  • Instalar e configurar o Terraform

  • Certificado de assinatura de política: você precisa carregar um certificado X.509, que é usado pelo provedor de atestado para validar políticas assinadas. Este certificado é assinado por uma autoridade de certificação ou autoassinado. As extensões de ficheiro suportadas incluem pem, txte cer. Este artigo pressupõe que você já tenha um certificado X.509 válido.

Implementar o código Terraform

Nota

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 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_version = ">=0.12"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
        tls = {
          source  = "hashicorp/tls"
          version = "4.0.4"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. Crie um arquivo chamado main.tf e insira o seguinte código:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    locals {
      create_signing_cert = try(!fileexists(var.cert_path), true)
    }
    
    resource "tls_private_key" "signing_cert" {
      count = local.create_signing_cert ? 1 : 0
    
      algorithm = "RSA"
      rsa_bits  = 4096
    }
    
    resource "tls_self_signed_cert" "attestation" {
      count = local.create_signing_cert ? 1 : 0
    
      private_key_pem       = tls_private_key.signing_cert[0].private_key_pem
      validity_period_hours = 12
      allowed_uses = [
        "cert_signing",
      ]
    }
    
    resource "random_string" "attestation_suffix" {
      length  = 8
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_attestation_provider" "corp_attestation" {
      location                        = azurerm_resource_group.rg.location
      name                            = "${var.attestation_provider_name}${random_string.attestation_suffix.result}"
      resource_group_name             = azurerm_resource_group.rg.name
      policy_signing_certificate_data = try(tls_self_signed_cert.attestation[0].cert_pem, file(var.cert_path))
      #https://github.com/hashicorp/terraform-provider-azurerm/issues/21998#issuecomment-1573312297
      lifecycle {
        ignore_changes = [
          "open_enclave_policy_base64",
          "sev_snp_policy_base64",
          "sgx_enclave_policy_base64",
          "tpm_policy_base64",
        ]
      }
    }
    
  4. Crie um arquivo chamado variables.tf e insira o seguinte código:

    variable "attestation_provider_name" {
      default = "attestation"
    }
    
    variable "cert_path" {
      default = "~/.certs/cert.pem"
    }
    
    variable "resource_group_location" {
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    

    Pontos principais:

    • Ajuste o campo conforme necessário para apontar para o policy_file seu arquivo PEM.
  5. Crie um arquivo chamado outputs.tf e insira o seguinte código:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    

Inicializar o Terraform

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 -upgrade parâmetro 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 plano de terraforma 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 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 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 você executou terraform plan -out main.tfplananteriormente o .
  • Se você especificou um nome de arquivo diferente para o -out parâmetro, use esse mesmo nome de arquivo na chamada para terraform apply.
  • Se você não usou o -out parâmetro, ligue terraform apply sem nenhum parâmetro.

6. Verificar os resultados

  1. Obtenha o nome do grupo de recursos do Azure.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Execute az attestation list para listar os provedores para o nome do grupo de recursos especificado.

    az attestation list --resource-group $resource_group_name
    

Clean up resources (Limpar recursos)

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

  1. Execute o plano de terraforma e especifique o destroy sinalizador.

    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 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

Solucionar problemas comuns ao usar o Terraform no Azure

Próximos passos