Início Rápido: Criar um provedor do Atestado do Azure usando o Terraform
O Atestado do Microsoft Azure é uma solução usada para atestar TEEs (Ambientes de Execução Confiáveis). Esse 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, você aprenderá como:
- Criar um valor aleatório para o nome do grupo de recursos do Azure usando random_pet.
- Criar um grupo de recursos do Azure usando azurerm_resource_group.
- Crie um provedor do Atestado do Azure usando azurerm_attestation_provider.
Pré-requisitos
Certificado de Autenticação de Política: você precisa carregar um certificado X.509, que é usado pelo provedor de atestado para validar as políticas assinadas. Esse certificado é assinado por uma autoridade de certificação ou autoassinado. As extensões de arquivo com suporte incluem
pem
,txt
ecer
. Este artigo pressupõe que você já tenha um certificado X.509 válido.
Implementar o código do Terraform
Observação
O código de exemplo deste artigo está localizado no repositório do GitHub do Azure Terraform. Você pode exibir o arquivo de log que contém os resultados do teste das versões atuais e anteriores do Terraform.
Veja mais artigos e exemplos de código mostrando como usar o Terraform para gerenciar recursos do Azure
Crie um diretório em que você vai testar o código de exemplo do Terraform, depois transforme-o no diretório atual.
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 {} }
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", ] } }
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
policy_file
conforme necessário para indicar um arquivo PEM.
- Ajuste o campo
Crie um arquivo chamado
outputs.tf
e insira o seguinte código:output "resource_group_name" { value = azurerm_resource_group.rg.name }
Inicializar Terraform
Execute terraform init para inicializar a implantação do Terraform. Esse 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 do provedor necessários para a versão mais recente que esteja em conformidade com as restrições de versão da configuração.
Criar um plano de execução 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 qualquer alteração nos recursos reais. - O parâmetro opcional
-out
permite que você especifique um arquivo de saída para o plano. Usar o parâmetro-out
garante que o plano que você examinou 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 exemplo de comando do
terraform apply
pressupõe que você executou oterraform 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 paraterraform apply
. - Se você não usou o parâmetro
-out
, chameterraform apply
sem nenhum parâmetro.
6. Verificar os resultados
Obtenha o nome do grupo de recursos do Azure.
resource_group_name=$(terraform output -raw resource_group_name)
Execute az attestation list para listar os provedores para o nome do grupo de recursos especificado.
az attestation list --resource-group $resource_group_name
Limpar os recursos
Quando você não precisar mais dos recursos criados por meio o Terraform, execute as seguintes etapas:
Execute terraform plan e especifique o sinalizador
destroy
.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 qualquer alteração nos recursos reais. - O parâmetro opcional
-out
permite que você especifique um arquivo de saída para o plano. Usar o parâmetro-out
garante que o plano que você examinou seja exatamente o que é aplicado.
- O comando
Execute a aplicação do Terraform 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