AWS の長期アクセスキーをやめ、Vault から動的に STS クレデンシャルを払い出すのが現在の定石です。
本稿は Associate / Ops レベルの試験を意識しつつ、最短で正しく動かすための実務ノウハウをまとめています。
Vault の AWS シークレットエンジンは、AWS 側の API(STS、IAM)を呼び出し、動的にクレデンシャルを生成します。最も実務的なのは assumed_role(既存の IAM ロールを STS AssumeRole で引き受ける方式)です。
Vault で発行される一時クレデンシャルにはリース(lease)が付き、TTL 超過で自動失効します。AWS 側のセッションはロールの MaxSessionDuration に縛られるため、Vault の TTL 設計は常に AWS 側の上限以下に収める必要があります。
試験では、静的シークレットとの違い、TTL/リースの扱い、assumed_role と iam_user の使い分け、最小権限(Least Privilege)設計が頻出です。
Vault と AWS STS のやり取り(概念)
プロダクションでは基本的に assumed_role 一択です。理由は、長期キーを保有せず、発行・失効をセッションで完結できるためです。例外的に、外部要件でアクセスキーの形が必要な場合のみ iam_user を検討します。federation_token は一時的な制約付き利用者の付与に使えますが、既存ロール設計があるなら assumed_role の方が単純です。
| 発行タイプ | 仕組み | TTL/ローテーション | 最小権限設計 |
|---|---|---|---|
| assumed_role | 既存 IAM ロールを STS AssumeRole で引き受ける | AWS ロールの MaxSessionDuration に制約(多くは1h、最大12h) | ロールに集約。Vault 側は sts:AssumeRole のみ許可で最小化可能 |
| iam_user | IAM ユーザー作成+アクセスキー払い出し | キー削除で即時失効可。ローテは Vault が実施 | 権限はユーザー/ポリシーで個別管理が必要 |
| federation_token | GetFederationToken で一時ユーザー発行(ポリシー同梱) | 短期セッション。上限は AWS 側設定に依存 | 都度ポリシーを付与可能 |
Vault は aws/config/root に設定した認証情報で AWS API を呼びます。assumed_role を使う場合、Vault 側には sts:AssumeRole のみを許し、ターゲットロールの信頼ポリシーで Vault の実行主体(IAM ユーザー/ロール)を許可するのが最小です。
iam_user を使う場合は、iam:CreateUser/iam:CreateAccessKey/iam:DeleteAccessKey などが追加で必要になります。実務でも試験でも、不要な権限を含めない点が重要です。
Vault 用 IAM ポリシー例(assumed_role のみを許可)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAssumeSpecificRoles",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::111122223333:role/ProdAppReadOnly",
"arn:aws:iam::111122223333:role/ProdAppRW"
]
}
]
}
-- ターゲットロールの信頼ポリシー(抜粋) --
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::111122223333:role/VaultRunner" },
"Action": "sts:AssumeRole"
}
]
}以下は assumed_role を使った最小構成の例です。まず Vault に AWS シークレットエンジンを有効化し、root 設定に AWS 側の実行資格を設定します。続いて、Assume したいターゲットロールを紐づける Vault ロールを作成します。
TTL は default_sts_ttl と max_sts_ttl を明示し、AWS 側ロールの MaxSessionDuration を超えない値にします。発行後は lease_id で追跡できます。
Vault CLI(assumed_role で 30 分 TTL のクレデンシャル発行)
# 1) AWS Secrets Engine を有効化
vault secrets enable aws
# 2) 実行用クレデンシャルを設定(環境に応じて region など調整)
vault write aws/config/root \
access_key="AKIA..." \
secret_key="<REDACTED>" \
region="ap-northeast-1"
# 3) Vault ロール作成(ターゲットの IAM ロールを Assume)
vault write aws/roles/app-readonly \
credential_type=assumed_role \
role_arn="arn:aws:iam::111122223333:role/ProdAppReadOnly" \
default_sts_ttl="30m" \
max_sts_ttl="1h"
# 4) 一時クレデンシャルを発行
vault read aws/creds/app-readonly
#=> access_key, secret_key, security_token, lease_id, lease_duration などが返る
# 5) リースの更新(AWS 側ロールの MaxSessionDuration を超える更新は不可)
vault lease renew <lease_id>
# 6) 失効(assumed_role は即時無効化できず、以降の払い出しを止めるのみ)
vault lease revoke <lease_id>Vault は発行したクレデンシャルにリースを付与し、TTL 超過で自動的に失効扱いにします。assumed_role の場合、AWS 側のセッションは発行時点の DurationSeconds に従い、早期取り消しは基本的にできません。Vault の revoke は、そのシークレットをこれ以上配布しないという管理上の失効であり、既に発行された STS セッションを直ちに無効化するものではありません。
iam_user の場合は DeleteAccessKey で即時無効化が可能です。用途に応じて、即時失効の要件が強いときのみ iam_user を検討します。
実運用では TTL と AWS 側の MaxSessionDuration の不一致、ターゲットロールの信頼ポリシー漏れ、リージョン/エンドポイント設定ミスが典型的なハマりどころです。試験では、assumed_role が推奨である点、Vault は STS の上限を超えられない点、静的キーと動的キーの管轄が異なる点が問われやすいです。
Associate / Ops
問題 1
Vault の AWS シークレットエンジンで credential_type=assumed_role のロールを作成し、default_sts_ttl=30m に設定した。しかし、ターゲットの AWS IAM ロールの MaxSessionDuration は 15 分である。正しい挙動と対処はどれか。
正解: A
STS AssumeRole の DurationSeconds は AWS 側ロールの MaxSessionDuration を超えられません。超過リクエストは STS エラーとなるため、Vault の発行も失敗します。対処は (1) AWS ロールの MaxSessionDuration を引き上げる、または (2) Vault 側の TTL をロール上限以下に下げることです。
Vault からの発行を 30 分間隔で回し続けたい。更新(renew)と再発行(read)のどちらを使うべき?
assumed_role では renew は AWS 側の上限内でのみ成功します。安定運用を重視するなら、短めの TTL(例: 15 分)で都度 read して新しいセッションを取得する設計が単純で安全です。
Vault 側の revoke で STS セッションを即時無効化できますか?
できません。revoke は管理上の取り消しであり、既に発行した STS セッション自体は有効期限まで有効です。即時失効が要件なら iam_user 発行を使い、DeleteAccessKey で無効化します。
aws/config/root の資格情報を静的キーで持ちたくありません。代替は?
Vault を AWS 上で実行している場合、インスタンスプロファイルやタスクロールなどの一時クレデンシャルを利用する構成を検討してください。Vault は環境にある IAM ロール経由でも STS を実行できます。必要権限は最小に絞り、Assume 先を限定してください。
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...