Vault の AWS 認証には IAM と EC2 の2モードがあるが、コンテナやサーバレスでは IAM モードが実務適合しやすい。
IAM 認証は、署名済みの sts:GetCallerIdentity を用いて Vault がクライアントの AWS アイデンティティを検証するのが肝要。
IAM モードは、クライアントが AWS 署名バージョン4で署名した sts:GetCallerIdentity リクエストを Vault に提出し、Vault がそれを AWS STS に転送して正当性を検証する方式です。Vault 側はクライアントの IAM ロールまたはユーザ ARN を事前にロール設定へバインドしておき、一致すれば Vault トークンを発行します。
リプレイ耐性のため、Vault は X-Vault-AWS-IAM-Server-ID ヘッダ(header_value)を推奨します。サーバ側設定とクライアント側署名に同一値を入れることで、中間者攻撃やリージョン跨ぎのリプレイを抑止します。
IAM ログインの信頼チェーン
Vault の AWS 認証は IAM と EC2 の2モード。さらに非AWSワークロードでは AppRole 等が候補になります。試験でも境界条件(どの方式をどの環境に当てるか)が頻出です。
IAM はタスク実行ロールやLambda実行ロールなど、インスタンスに依存しない実行主体に適合。EC2 はインスタンスID文書によるバインドが強み。AppRole は完全にAWS外でも使えますが、ローテーション運用が別途必要です。
| 認証方式 | 主なバインド条件 | 代表ユースケース | 長所 |
|---|---|---|---|
| AWS IAM | bound_iam_principal_arn(IAMロール/ユーザARN) | ECS/EKS/Lambda/外部IDでの実行ロール | インスタンス非依存・鍵配布不要・最小権限容易 |
| AWS EC2 | AMI/インスタンスタグ/リージョン/ロールなど | 固定EC2に密着したワークロード | 詳細なインスタンス属性での厳密バインド |
| AppRole | RoleID + SecretID | オンプレ/他クラウド/CIなどAWS外 | AWS要件なし・シンプル |
IAM モードは、基本的に AWS 資格情報のサーバ設定は不要です。まず AWS auth を有効化し、Server-ID を設定してから、IAM ロール(またはユーザ)をバインドした認証ロールを作成します。
ロールでは policies、TTL、再認証可否などを定義します。bound_iam_principal_arn は複数指定が可能で、クロスアカウントも扱えます。
Vault サーバ設定例(IAM モード)
# AWS auth を有効化(パスは必要に応じて変更)
vault auth enable -path=aws aws
# Server-ID ヘッダ値を設定(クライアントが署名時に同値を入れる)
vault write auth/aws/config/client \
iam_server_id_header_value="vault.example.com"
# アプリ用ポリシー(例)
vault policy write app - <<'EOF'
path "secret/data/app/*" {
capabilities = ["read"]
}
EOF
# IAM ロールにバインドした認証ロールを作成
vault write auth/aws/role/app \
auth_type=iam \
bound_iam_principal_arn=arn:aws:iam::111111111111:role/app-task \
policies=app \
max_ttl=1h \
disallow_reauthentication=trueクライアントは自分の AWS 実行ロールを用いて署名済みの sts:GetCallerIdentity を生成します。Vault CLI や Vault Agent を使うと、この署名生成と /auth/aws/login への提出を自動で行えます。
AWS 環境変数(またはインスタンス/タスクロール)から認証情報を取得し、Server-ID ヘッダ値を一致させるのがポイントです。
CLI と Vault Agent の実行例
# CLI 例(AWS_PROFILE / タスクロールなどで認証情報が利用可能であること)
export AWS_REGION=ap-northeast-1
vault login -method=aws role=app header_value=vault.example.com
# 成功すると Vault トークンが返る(-format=json で機械可読)
# vault login -method=aws role=app header_value=vault.example.com -format=json | jq
# Vault Agent 例(/etc/vault.d/agent-iam.hcl)
auto_auth {
method "aws" {
mount_path = "auth/aws"
config = {
type = "iam"
role = "app"
header_value = "vault.example.com"
# 必要に応じて region 等を指定
}
}
sink "file" {
config = {
path = "/tmp/vault-token"
}
}
}
cache {
use_auto_auth_token = true
}
vault {
address = "https://vault.example.com"
}IAM 認証は、別AWSアカウントのロールにもバインド可能です。bound_iam_principal_arn に対象ロールARNを列挙するだけで、クロスアカウントのアプリからログインできます。assumed-role のセッションARNであっても、Vault は実体のロールARNへ正規化して照合します。
sts:GetCallerIdentity は原則どのプリンシパルでも呼べるため、IAM 認証のために特別なIAM許可を追加する必要はありません。ネットワーク的に Vault から AWS STS へ到達できること、時刻同期、Server-ID の整合が実務上の成否ポイントです。
複数プリンシパルへのバインド例
# 複数の IAM ロールを同一 Vault ロールへバインド
vault write auth/aws/role/app \
auth_type=iam \
bound_iam_principal_arn=arn:aws:iam::111111111111:role/app-task,arn:aws:iam::222222222222:role/app-task \
policies=app \
max_ttl=1h実務では Server-ID 不一致、時計ずれ、ARN の型違い(ユーザARNをロールとして登録など)が典型。試験では IAM と EC2 の使い分け、bound_iam_principal_arn、header_value の意味、Vault が AWS 資格情報不要で検証できる点などが問われやすいです。
問題切り分けでは、-format=json での応答確認、audit ログ、そして AWS STS への到達性(プロキシやFW)を順に検査します。
確認用コマンド断片
# 応答の確認
vault login -method=aws role=app header_value=vault.example.com -format=json | jq '.auth.lease_duration,.auth.policies'
# 監査ログ(ファイル監査デバイス例)
vault audit enable file file_path=/var/log/vault_audit.log
tail -f /var/log/vault_audit.log | grep "/auth/aws/login"Associate
問題 1
Vault の AWS 認証(IAM モード)で、クライアントの実行ロールをロール設定にバインドするために使用するパラメータはどれか。
正解: A
IAM モードでは、クライアントの IAM ロール/ユーザ ARN を bound_iam_principal_arn に設定して照合する。iam_server_id_header_value はリプレイ対策のヘッダ値、credential_type は Secrets Engine 側の概念で認証ロールには該当しない。
Vault は IAM モードの検証で AWS 資格情報を必要としますか?
不要です。クライアントが署名した sts:GetCallerIdentity を Vault がそのまま STS に転送し、応答の Caller ARN をロール設定と照合します。Vault は STS へ到達できるネットワーク接続のみが必要です。
Server-ID ヘッダ(X-Vault-AWS-IAM-Server-ID)は必須ですか?
強く推奨です。Vault 側の iam_server_id_header_value と、クライアントが署名に含める header_value を一致させることで、リプレイや誤宛先を防止します。試験でもこのヘッダの目的が問われやすいです。
クロスアカウントの IAM ロールでもログインできますか?
可能です。bound_iam_principal_arn に対象ロールの ARN を列挙するだけで動作します。assumed-role のセッションARNは実体のロールARNへ正規化されて照合されます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token
HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...
Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる
HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...
Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く
HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...
Vault Tokens の基礎: 認証の起点となる概念
HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...
Vault のトークン種類を正しく使い分ける: service / batch 実践
HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...