快速入門:使用 Terraform 建立 Azure 證明提供者

Microsoft Azure 證明是用於證明信任執行環境 (TEE) 的解決方案。 本快速入門著重於使用 Terraform 建立 Microsoft Azure 證明原則的程序。

在本文中,您將學會如何:

必要條件

  • 安裝及設定 Terraform

  • 原則簽署憑證:您必須上傳 X.509 憑證,證明提供者會使用此憑證來驗證已簽署的原則。 此憑證是由憑證授權單位簽署或自我簽署。 支援的副檔名包括 pemtxtcer。 本文假設您已經擁有有效的 X.509 憑證。

實作 Terraform 程式碼

  1. 建立目錄,然後在目錄中測試範例 Terraform 程式碼,並將其設為目前的目錄。

  2. 建立名為 providers.tf 的檔案,並插入下列程式碼:

    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. 建立名為 main.tf 的檔案,並插入下列程式碼:

    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. 建立名為 variables.tf 的檔案,並插入下列程式碼:

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

    重點︰

    • 視需要調整 policy_file 欄位,以指向您的 PEM 檔案。
  5. 建立名為 outputs.tf 的檔案,並插入下列程式碼:

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

初始化 Terraform

執行 terraform init 來初始化 Terraform 部署。 此命令會下載管理 Azure 資源所需的 Azure 提供者。

terraform init -upgrade

重點︰

  • -upgrade 參數會將必要的提供者外掛程式升級至符合設定版本條件約束的最新版本。

建立 Terraform 執行計畫

執行 terraform plan 以建立執行計畫。

terraform plan -out main.tfplan

重點︰

  • terraform plan 命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。
  • 選用的 -out 參數可讓您指定計畫的輸出檔。 使用 -out 參數可確保您所檢閱的方案就是所套用的方案。

套用 Terraform 執行計畫

執行 terraform apply 將執行計畫套用至您的雲端基礎結構。

terraform apply main.tfplan

重點︰

  • 範例 terraform apply 命令假設您之前已執行過 terraform plan -out main.tfplan
  • 如果您為 -out 參數指定了不同的檔案名稱,請在呼叫 terraform apply 時使用該檔案名稱。
  • 若您未使用 -out 參數,請呼叫 terraform apply,不需要使用參數。

6.驗證結果

  1. 取得 Azure 資源群組名稱。

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. 執行 az attestation list 以列出指定資源群組名稱的提供者。

    az attestation list --resource-group $resource_group_name
    

清除資源

當您不再需要透過 Terraform 建立的資源時,請執行下列步驟:

  1. 執行 terraform plan 並指定 destroy 旗標。

    terraform plan -destroy -out main.destroy.tfplan
    

    重點︰

    • terraform plan 命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。
    • 選用的 -out 參數可讓您指定計畫的輸出檔。 使用 -out 參數可確保您所檢閱的方案就是所套用的方案。
  2. 執行 terraform apply 以套用執行方案。

    terraform apply main.destroy.tfplan
    

對 Azure 上的 Terraform 進行疑難排解

針對在 Azure 上使用 Terraform 時的常見問題進行疑難排解

下一步