動的認証情報(Dynamic Credentials)は、Terraform 実行時にだけ有効な短期クレデンシャルをクラウドから払い出す仕組みです。Terraform Cloud/Enterprise(TFC/TFE)の OIDC フェデレーションを用いると、ワークスペース毎・実行単位での安全な権限付与が可能になります。
本稿では、TFC/TFE を OIDC 発行者として AWS/Azure/GCP にフェデレーションする実務の要点と、試験(Pro 想定)で押さえるべき設計論点を整理します。静的な長期キーを無くすこと、最小権限・短寿命・スコープ分離を徹底することが中核です。
長期キー(例: AWS Access Key、Service Principal 秘密、JSON キーファイル)は漏えい時の影響が大きく、ローテーション運用も重い。一方、OIDC を使った動的認証情報は、Terraform の実行要求に応じてクラウド側の STS/トークン発行エンドポイントで短期資格を払い出し、実行終了とともに失効します。TFC/TFE が OIDC 発行者となり、クラウド側に信頼関係(トラスト)を設定するのが基本構成です。
設計の原則は次の3点に集約されます。1) ワークスペース/実行単位のスコープ化、2) クラウド側ロール/ID の最小権限、3) セッション寿命の短縮とローテーションの自動化。これらは公式ドキュメントで推奨される安定的なベストプラクティスに一致します。
| クラウド | OIDC 連携の呼称/仕組み | トークン交換の入口(概念) | セッション管理の考え方 |
|---|---|---|---|
| AWS | IAM OIDC IdP + STS Web Identity | AssumeRoleWithWebIdentity(STS) | ロールの信頼ポリシーとセッション継続時間で制御(役割側設定) |
| Azure | Microsoft Entra ID Federated Credential | サービスプリンシパルの Federated Credential によるトークン発行 | アプリ登録/ロール割当と Federated Credential の条件で制御 |
| GCP | Workload Identity Federation | Security Token Service(STS)→ サービスアカウントの短期な委任/偽装 | WIF プール/プロバイダの条件と SA 側権限で制御 |
Terraform 実行環境(TFC/TFE のエージェント/ランナー)が OIDC トークンを取得し、各クラウドの STS/トークンエンドポイントで交換、短期資格を得てプロバイダが API を実行します。信頼設定はクラウド側(ロール・アプリ・WIF プール)に保持し、TFC/TFE は実行単位のクレームを発行します。
ネットワーク要件としては、ランナーからクラウドの STS/ID エンドポイントへ到達可能であることが必要です。トラスト条件(Issuer, Audience, 必要に応じて Subject/クレーム)は、TFC/TFE 側の設定画面で提示される値とクラウド側の信頼設定を一致させます。
TFC/TFE とクラウドの OIDC フロー
プロバイダは静的キー不要(環境連携に委ねる)
# 例:main.tf(抜粋)。認証情報の明示は不要(TFC/TFE の動的資格を利用)
terraform {
required_providers {
aws = { source = "hashicorp/aws", version = ">= 5.0" }
azurerm = { source = "hashicorp/azurerm", version = ">= 3.0" }
google = { source = "hashicorp/google", version = ">= 5.0" }
}
}
provider "aws" {
region = var.aws_region
}
provider "azurerm" {
features {}
}
provider "google" {
project = var.gcp_project
region = var.gcp_region
}
# 動作確認:実行時の呼び出し主体(例:AWS)
data "aws_caller_identity" "current" {}
output "aws_caller_arn" { value = data.aws_caller_identity.current.arn }
AWS では、IAM に OIDC プロバイダを登録し、信頼ポリシーを持つロールを作成して STS の AssumeRoleWithWebIdentity を許可します。ロールには最小権限のポリシーを付与し、セッション継続時間は要件に応じてロール側で制御します。
TFC/TFE のワークスペースで AWS 動的認証を有効化すると、実行環境に必要な環境変数(Web Identity トークンファイルやロール指定など)が設定され、AWS プロバイダはそれを用いて短期資格を自動取得します。静的な access_key/secret_key の設定は不要です。
AWS プロバイダ例(短期資格での実行を前提)
provider "aws" {
region = var.aws_region
}
# 実行主体の確認
data "aws_caller_identity" "me" {}
output "aws_principal" {
value = data.aws_caller_identity.me.arn
}
# ベストプラクティス:
# - ここに access_key/secret_key を書かない
# - ロールの信頼条件はワークスペース/組織単位でスコープ化する
Azure では、アプリ登録(サービスプリンシパル)に Federated Credential を作成し、Issuer/Audience/Subject を TFC/TFE の OIDC 設定に合わせます。ロール割り当てはスコープ最小化(リソースグループ単位など)を基本とし、必要最小限の組み合わせに留めます。
TFC/TFE のワークスペースで Azure 動的認証を有効化すると、Azure SDK/プロバイダが参照する環境変数(クライアント ID、テナント ID、フェデレーテッドトークンファイル等)が実行時に提供され、明示的なクライアントシークレットは不要になります。
AzureRM プロバイダ例(動的資格前提)
provider "azurerm" {
features {}
}
# 動作確認(例):現在のサブスクリプション
data "azurerm_subscription" "current" {}
output "azure_subscription_id" {
value = data.azurerm_subscription.current.subscription_id
}
# ベストプラクティス:SP のクライアントシークレットは作成しない(Federated Credential を使用)
GCP では、Workload Identity Pool/Provider を作成し、TFC/TFE の OIDC Issuer を信頼させます。必要に応じてサービスアカウントの偽装(impersonation)を組み合わせ、実行に必要なロールのみを付与します。
TFC/TFE のワークスペースで GCP 動的認証を有効化すると、Google Provider/ADC が参照する実行時情報が付与され、外部アカウント経由で短期トークンが交換されます。サービスアカウントの長期キー(JSON キー)を発行・保存する必要はありません。
Google プロバイダ例(動的資格前提)
provider "google" {
project = var.gcp_project
region = var.gcp_region
}
# 呼び出し主体の確認(プロジェクト情報)
data "google_project" "current" {}
output "gcp_project_number" {
value = data.google_project.current.number
}
# ベストプラクティス:サービスアカウントの JSON キーを使わない(WIF を使用)
試験(Pro 想定)では、静的キー排除、OIDC フェデレーションの信頼境界、最小権限、ワークスペース単位のスコープ化、セッション寿命、監査可能性が頻出です。Terraform 側に資格情報を一切書かない構成が模範解答であることが多いです。
運用では、ワークスペース/環境(prod/stg)の分離、ロール/ID の命名規約、クレーム条件の過不足(広すぎる Subject や Audience の共有)、セッション時間の過大設定、失効後のリトライ設計、監査ログの一元化が落とし穴になりやすいです。
実行時に短期資格で動いているかを確認する小技(例:AWS)
# apply 後にロール ARN を確認し、想定の OIDC 用ロールになっているかを検証
# outputs.tf
output "caller_arn" {
value = data.aws_caller_identity.me.arn
description = "実行時の呼び出し主体(短期ロールであること)"
}
# 想定外の長期ユーザ/アクセスキー主体が出たら、動的資格が効いていないサイン
Pro
問題 1
Terraform Cloud を使い、AWS/Azure/GCP すべてで静的な長期資格情報を排除しつつ最小権限で運用したい。最も適切なアプローチはどれか。
正解: A
TFC/TFE の Dynamic Provider Credentials と OIDC フェデレーションを用いることで、実行時にのみ有効な短期資格を取得し、プロバイダへ自動連携できる。これは最小権限と静的キー排除の両立に適合する。長期キーの保管・配布は試験/実務のベストプラクティスに反する。
Terraform 側に access_key やクライアントシークレットを書かずに本当に動きますか?
はい。TFC/TFE のワークスペースで動的認証(Dynamic Provider Credentials)を有効化すると、実行環境に適切な環境変数やトークンファイルが設定されます。各プロバイダは公式のデフォルト認証連鎖を通じて短期資格を自動取得します。
Audience や Subject の具体値はどう決めますか?
TFC/TFE の設定画面で、クラウド側の信頼条件に必要な値(Issuer/Audience/必要に応じて Subject など)が提示されます。クラウド側(AWS ロールの信頼ポリシー、Azure Federated Credential、GCP WIF 条件)で、その値と一致するよう設定してください。ワークスペースや組織単位でスコープを分離するのが安全です。
セッションの有効期限はどこで制御しますか?
クラウド側の設定で制御します。AWS はロールのセッション継続時間、Azure はトークンとロール割り当ての前提、GCP は WIF/STS とサービスアカウントの短期資格の組合せで管理します。必要最小限の期間に留めるのが推奨です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける
Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...
Terraform Authoring & Ops Pro: 上位資格の範囲と対策
上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...
Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす
Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...
Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義
Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...
Terraform Data Source徹底理解:既存リソースの参照で壊さず足す
Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...