Delen via


Quickstart: Een Azure Attestation-provider maken met behulp van Terraform

Microsoft Azure Attestation is een oplossing voor het afleiden van Trusted Execution Environments (TEE’s). Deze quickstart is gericht op het proces van het maken van een Microsoft Azure Attestation-beleid met behulp van Terraform.

In dit artikel leert u het volgende:

Vereisten

  • Terraform installeren en configureren

  • Certificaat voor beleidsondertekening: u moet een X.509-certificaat uploaden dat wordt gebruikt door de attestation-provider om ondertekend beleid te valideren. Dit certificaat wordt ondertekend door een certificeringsinstantie of zelfondertekend. Ondersteunde bestandsextensies zijn onder andere pem, txten cer. In dit artikel wordt ervan uitgegaan dat u al een geldig X.509-certificaat hebt.

De Terraform-code implementeren

Notitie

De voorbeeldcode voor dit artikel bevindt zich in de Azure Terraform GitHub-opslagplaats. U kunt het logboekbestand met de testresultaten van de huidige en vorige versies van Terraform bekijken.

Zie meer artikelen en voorbeeldcode waarin wordt getoond hoe u Terraform gebruikt om Azure-resources te beheren

  1. Maak een map waarin u de Terraform-voorbeeldcode wilt testen en de huidige map kunt maken.

  2. Maak een bestand met de naam providers.tf en voeg de volgende code in:

    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. Maak een bestand met de naam main.tf en voeg de volgende code in:

    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. Maak een bestand met de naam variables.tf en voeg de volgende code in:

    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."
    }
    

    Belangrijkste punten:

    • Pas het policy_file veld zo nodig aan om naar uw PEM-bestand te verwijzen.
  5. Maak een bestand met de naam outputs.tf en voeg de volgende code in:

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

Terraform initialiseren

Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van uw Azure-resources.

terraform init -upgrade

Belangrijkste punten:

  • Met -upgrade de parameter worden de benodigde providerinvoegtoepassingen bijgewerkt naar de nieuwste versie die voldoet aan de versiebeperkingen van de configuratie.

Een Terraform-uitvoeringsplan maken

Voer terraform-plan uit om een uitvoeringsplan te maken.

terraform plan -out main.tfplan

Belangrijkste punten:

  • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
  • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.

Een Terraform-uitvoeringsplan toepassen

Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.

terraform apply main.tfplan

Belangrijkste punten:

  • Bij de voorbeeldopdracht terraform apply wordt ervan uitgegaan dat u eerder hebt uitgevoerd terraform plan -out main.tfplan.
  • Als u een andere bestandsnaam voor de -out parameter hebt opgegeven, gebruikt u diezelfde bestandsnaam in de aanroep naar terraform apply.
  • Als u de parameter niet hebt gebruikt, roept terraform apply u deze -out aan zonder parameters.

6. Controleer de resultaten

  1. Haal de naam van de Azure-resourcegroep op.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Voer az attestation list uit om de providers voor de opgegeven resourcegroepnaam weer te geven.

    az attestation list --resource-group $resource_group_name
    

Resources opschonen

Voer de volgende stappen uit wanneer u de resources die zijn gemaakt via Terraform niet meer nodig hebt:

  1. Voer terraform-plan uit en geef de destroy vlag op.

    terraform plan -destroy -out main.destroy.tfplan
    

    Belangrijkste punten:

    • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
    • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.
  2. Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen.

    terraform apply main.destroy.tfplan
    

Problemen met Terraform in Azure oplossen

Veelvoorkomende problemen oplossen bij het gebruik van Terraform in Azure

Volgende stappen