次の方法で共有


クイックスタート: Terraform を使用して Azure 機密台帳を作成する

このクイックスタートでは、Terraform を使用して Azure リソース グループと機密台帳を作成します。 Azure Confidential Ledger は、機密データを保存するための改ざん防止レジスタを備えるフル マネージド サービスです。 これは、Azure Confidential Computing に基づいて構築されており、ハードウェアベースの信頼できる実行環境を使用して、使用中であってもデータを脅威から保護します。 この台帳は、保存対象データの機密性と整合性を維持するように設計されており、高レベルのデータ保護を必要とするユース ケースに最適です。 このスクリプトで作成されるリソースには、Azure 機密台帳と Azure リソース グループが含まれます。

Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。

  • リソース グループのランダムなペット名を生成します。
  • 生成された名前で Azure リソース グループを作成します。
  • 現在の Azure クライアント構成を取得します。
  • Azure 機密台帳名のランダムな文字列を生成します。
  • 生成された名前で Azure 機密台帳を作成し、リソース グループに割り当てます。
  • Azure AD ベースのサービス プリンシパルを機密台帳に割り当てます。
  • 例として機密台帳にタグを付けます。
  • リソース グループ名、機密台帳名、機密台帳の種類、機密台帳ロール名を出力します。
  • Terraform の必要なバージョンと必要なプロバイダーを指定します。
  • 追加機能を使用せずに Azure プロバイダーを定義します。
  • リソース グループ名のプレフィックス、リソース グループの場所、機密台帳名、機密台帳の種類、機密台帳ロール名の変数を定義します。

前提条件

Terraform コードを実装する

注意

この記事のサンプル コードは、Azure Terraform GitHub リポジトリにあります。 Terraform の現在および以前のバージョンのテスト結果を含むログ ファイルを表示できます。

Terraform を使用して Azure リソースを管理する方法を示すその他の記事とサンプル コードを参照してください。

  1. サンプル Terraform コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。

  2. 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
    }
    
    data "azurerm_client_config" "current" {
    }
    
    resource "random_string" "azurerm_confidential_ledger_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_confidential_ledger" "example" {
      name                = coalesce(var.confidential_ledger_name, "ledger-${random_string.azurerm_confidential_ledger_name.result}")
      resource_group_name = azurerm_resource_group.rg.name
      ___location            = azurerm_resource_group.rg.___location
      ledger_type         = var.confidential_ledger_type
    
      azuread_based_service_principal {
        principal_id     = data.azurerm_client_config.current.object_id
        tenant_id        = data.azurerm_client_config.current.tenant_id
        ledger_role_name = var.confidential_ledger_role_name
      }
    
      tags = {
        IsExample = "True"
      }
    }
    
  3. outputs.tf という名前のファイルを作成し、次のコードを挿入します。

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "confidential_ledger_name" {
      value = azurerm_confidential_ledger.example.name
    }
    
    output "confidential_ledger_type" {
      value = azurerm_confidential_ledger.example.ledger_type
    }
    
    output "confidential_ledger_role_name" {
      value = azurerm_confidential_ledger.example.azuread_based_service_principal[0].ledger_role_name
    }
    
  4. providers.tf という名前のファイルを作成し、次のコードを挿入します。

    terraform {
      required_version = ">=1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  5. variables.tf という名前のファイルを作成し、次のコードを挿入します。

    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "confidential_ledger_name" {
      type        = string
      description = "The name of the confidential ledger resource. The value will be randomly generated if blank."
      default     = ""
    }
    
    variable "confidential_ledger_type" {
      type        = string
      default     = "Public"
      validation {
        condition     = contains(["Public", "Private"], var.confidential_ledger_type)
        error_message = "The confidential ledger type value must be one of the following: Public, Private."
      }
      description = "Type of the confidential ledger."
    }
    
    variable "confidential_ledger_role_name" {
      type        = string
      default     = "Administrator"
      description = "Role name for the confidential ledger."
    }
    

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 を呼び出します。

結果を確認する

Azure CLI

az confidential-ledger show を実行して Azure 機密台帳を表示します。

az confidentialledger show --ledger-name <ledger_name> --resource-group <resource_group_name>

<ledger_name> を Azure 機密台帳の名前に置き換え、<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 を使用する場合の一般的な問題のトラブルシューティング

次のステップ