Snabbstart: Hantera Azure Key Vault certifikatkontakter med AzAPI Terraform-providern

Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du genomförandeplanen för att implementera infrastrukturen.

Använd azapi_data_plane_resource för att hantera Azure dataplansresurser i Terraform. I det här exemplet konfigurerar du certifikatkontakter för en Azure Key Vault.

Grundläggande begrepp om hur dataplansramverket fungerar och parent_id mönster finns i Förstå AzAPI-dataplansramverket.

  • Skapa en Key Vault med AzureRM-providern
  • Använd azapi_data_plane_resource för att konfigurera certifikatkontakter

Förutsättningar

  • Azure-prenumeration: Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

När du loggar in på Azure-portalen med ett Microsoft-konto används standardprenumerationen för det kontot.

Terraform autentiserar automatiskt med hjälp av information från standardprenumerationen i Azure.

Kör az account show för att verifiera det aktuella Microsoft-kontot och Azure-prenumerationen.

az account show

Alla ändringar du gör via Terraform finns i den azure-prenumeration som visas. Om det är vad du vill kan du hoppa över resten av den här artikeln.

Utför implementeringen av Terraform-koden

  1. Skapa en katalog där du kan testa Terraform-exempelkoden och göra den till den aktuella katalogen.

  2. Skapa en fil med namnet providers.tf och infoga följande kod:

    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. Skapa en fil med namnet variables.tf och infoga följande kod:

    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. Skapa en fil med namnet main.tf och infoga följande kod:

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

    Viktiga punkter om azapi_data_plane_resource:

    • Fältet type använder formatet <resource-type>@<api-version> för dataplanets API.
    • parent_id är värdnamnet för dataplanets slutpunkt (utan prefixethttps://), inte ett ARM-resurs-ID.
    • Fältet name identifierar den specifika resursen inom den överordnade resursen. För Key Vault certifikatkontakter är värdet alltid default.
  5. Skapa en fil med namnet outputs.tf och infoga följande kod:

    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
    }
    

Kör terraform init för att initiera Terraform-distributionen. Det här kommandot laddar ned den Azure-provider som krävs för att hantera dina Azure-resurser.

terraform init -upgrade

Viktiga punkter:

  • Parametern -upgrade uppgraderar nödvändiga provider-plugin-program till den senaste versionen som uppfyller konfigurationens versionsbegränsningar.

Kör terraform plan för att skapa en utförandeplan.

terraform plan -out main.tfplan

Viktiga punkter:

  • Kommandot terraform plan skapar en utförandeplan, men utför den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om åtgärdsplanen stämmer överens med dina förväntningar innan du gör några ändringar i faktiska resurser.
  • Med den valfria parametern -out kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att den plan som du har granskat är exakt vad som tillämpas.

Kör terraform apply för att applicera genomförandeplanen på din molninfrastruktur.

terraform apply main.tfplan

Viktiga punkter:

  • terraform apply Exempelkommandot förutsätter att du tidigare körde terraform plan -out main.tfplan.
  • Om du har angett ett annat filnamn för parametern -out använder du samma filnamn i anropet till terraform apply.
  • Om du inte använde parametern -out anropar du terraform apply utan några parametrar.

Verifiera resultatet

Kör az keyvault certificate contact list för att hämta certifikatkontakterna.

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

Rensa resurser

Gör följande när du inte längre behöver de resurser som skapats via Terraform:

  1. Kör terraform plan och specificera flaggan destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Viktiga punkter:

    • Kommandot terraform plan skapar en utförandeplan, men utför den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om åtgärdsplanen stämmer överens med dina förväntningar innan du gör några ändringar i faktiska resurser.
    • Med den valfria parametern -out kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att den plan som du har granskat är exakt vad som tillämpas.
  2. Kör terraform apply för att tillämpa genomförandeplanen.

    terraform apply main.destroy.tfplan
    

Felsöka Terraform på Azure

Felsök vanliga problem när du använder Terraform på Azure

Nästa steg

Ytterligare läsning