このクイックスタートでは、Terraform を使用して Azure リソース グループと機密台帳を作成します。 Azure Confidential Ledger は、機密データを保存するための改ざん防止レジスタを備えるフル マネージド サービスです。 これは、Azure Confidential Computing に基づいて構築されており、ハードウェアベースの信頼できる実行環境を使用して、使用中であってもデータを脅威から保護します。 この台帳は、保存対象データの機密性と整合性を維持するように設計されており、高レベルのデータ保護を必要とするユース ケースに最適です。 このスクリプトで作成されるリソースには、Azure 機密台帳と Azure リソース グループが含まれます。
Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。
- リソース グループのランダムなペット名を生成します。
- 生成された名前で Azure リソース グループを作成します。
- 現在の Azure クライアント構成を取得します。
- Azure 機密台帳名のランダムな文字列を生成します。
- 生成された名前で Azure 機密台帳を作成し、リソース グループに割り当てます。
- Azure AD ベースのサービス プリンシパルを機密台帳に割り当てます。
- 例として機密台帳にタグを付けます。
- リソース グループ名、機密台帳名、機密台帳の種類、機密台帳ロール名を出力します。
- Terraform の必要なバージョンと必要なプロバイダーを指定します。
- 追加機能を使用せずに Azure プロバイダーを定義します。
- リソース グループ名のプレフィックス、リソース グループの場所、機密台帳名、機密台帳の種類、機密台帳ロール名の変数を定義します。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウントを作成します。 無料でアカウントを作成できます。
Terraform コードを実装する
注意
この記事のサンプル コードは、Azure Terraform GitHub リポジトリにあります。 Terraform の現在および以前のバージョンのテスト結果を含むログ ファイルを表示できます。
Terraform を使用して Azure リソースを管理する方法を示すその他の記事とサンプル コードを参照してください。
サンプル Terraform コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。
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" } }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 }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 {} }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 を使用して作成したリソースが不要になった場合は、次の手順を実行します。
terraform plan を実行して、
destroyフラグを指定します。terraform plan -destroy -out main.destroy.tfplan重要なポイント:
-
terraform planコマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。 - 省略可能な
-outパラメーターを使用すると、プランの出力ファイルを指定できます。-outパラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
-
terraform apply を実行して、実行プランを適用します。
terraform apply main.destroy.tfplan
Azure での Terraform のトラブルシューティング
Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング。