Vault の中核は Secrets Engines(シークレットエンジン)です。エンジンはパスにマウントされ、各パスごとに「何をするか(保存・発行・暗号化)」が決まります。本稿では、試験で頻出の分類(静的・動的・暗号化/署名)に沿って、挙動・用途・試験観点を整理します。
Associate レベルでは、KV による静的管理、Database/AWS などの動的発行、Transit による暗号化/署名の違いを具体例で判別できることが重要です。TTL/Lease、Revoke/Renew、ポリシー適用、パス設計といった安定した基本概念に絞って解説します。
Secrets Engine は Vault にマウントされるプラグインで、用途ごとにパスが分かれます。例えば kv/ はキー・バリューの保存、database/ は動的な DB 資格情報の発行、transit/ はデータの暗号化/署名を提供します。クライアントはトークン+ポリシーでパスにアクセスし、エンジンが所定の動作を実行します。
分類の軸は「保存するのか(静的)」「都度発行するのか(動的)」「データそのものは持たず処理だけを行うのか(暗号化/署名)」です。設計と試験の両面で、この切り分けが最初の判断ポイントになります。
| 種別 | 代表エンジン/機能 | 主な用途 | 試験の焦点 |
|---|---|---|---|
| 静的 | kv(一般に kv-v2 が多用) | アプリ設定・API キー・証明書素材の保存 | バージョニング/メタデータ、パスとポリシーの紐づけ |
| 動的 | database, aws など | 都度発行の短命資格情報で最小権限を実現 | Lease/TTL、Renew/Revoke、ロール定義と発行フロー |
| 暗号化/署名 | transit(暗号化・復号・署名・検証) | データは保存せず“暗号化サービス”を提供 | 平文を保存しない、キー管理、用途と限界(保存先は別) |
Vault による認可とエンジン呼び出しの流れ
代表的なエンジンの有効化(例)
# 管理者が必要なパスでエンジンを有効化
vault secrets enable -path=kv kv-v2
vault secrets enable -path=database database
vault secrets enable -path=transit transit
# 現在のマウント確認
vault secrets list -detailed静的シークレットは、保存された値を取得するシンプルなモデルです。最も一般的なのが kv で、アプリの設定値、API キー、Webhook トークンなどを保管します。Associate では、パス設計とポリシーの最小権限付与、そして運用(更新・削除・監査)が押さえどころです。
kv はバージョニング対応の実装が広く使われています。バージョン付きの場合は「最新/特定バージョンの取得」「論理削除/完全削除」などの操作が用意され、監査・ロールバックに役立ちます。試験でバージョニングの有無が問われる際は、メタデータと履歴管理がキーワードになります。
KV の基本操作(保存/取得/バージョン管理の例)
# エンジンが未有効なら先に有効化
vault secrets enable -path=kv kv-v2
# 保存(create/update)
vault kv put kv/app/config api_key=xxx timeout=30
# 取得(最新)
vault kv get kv/app/config
# 上書き(新バージョン作成)
vault kv put kv/app/config api_key=yyy timeout=30
# 特定バージョンを取得(例: バージョン1)
vault kv get -version=1 kv/app/config
# 論理削除(最新を削除)
vault kv delete kv/app/config
# 完全削除(履歴自体を消去)
vault kv destroy -versions=1 kv/app/config動的シークレットは、要求のたびに短命の資格情報を発行し、Lease/TTL で寿命を管理します。期限切れや Revoke により権限が無効化されるため、漏洩リスクの低減と最小権限の実装に適しています。代表例は database(RDBMS に対するユーザー/パスワード発行)と aws(IAM 資格情報の発行)です。
発行はロールに基づきます。ロールは接続先、権限(例: DB の GRANT)、TTL の上限、Renew 可否などを規定します。クライアントは read を呼ぶだけで新規資格情報が払い出され、レスポンスには lease_id, lease_duration, renewable などのメタデータが含まれます。
Database エンジンの最小構成から発行/失効まで
# エンジンの有効化
vault secrets enable -path=database database
# 接続(例: PostgreSQL)。管理ユーザーで接続情報を登録
vault write database/config/appdb \
plugin_name=postgresql-database-plugin \
connection_url="postgresql://{{username}}:{{password}}@db.example.com:5432/postgres?sslmode=disable" \
username="vault_admin" \
password="s3cr3t"
# ロールを定義(最小権限、TTL 設定)
vault write database/roles/app \
db_name=appdb \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl=1h \
max_ttl=24h
# 動的資格情報の発行(read で新規払い出し)
vault read database/creds/app
# -> username/password と lease_id/lease_duration を受領
# 失効(漏洩時など即時無効化)
vault lease revoke <lease_id>Transit はデータを保存しません。鍵を Vault 側で保護・操作し、クライアントから渡された平文を暗号化/復号、データに署名/検証を行う“暗号化サービス”です。保存先(DB/S3 など)はアプリケーション側で管理します。
メリットは、アプリが鍵素材を直接扱わない点と、監査・ローテーション・アクセス制御を Vault に集約できる点です。用途は、機密列の暗号化、透過的なトークン署名、アプリ間のメッセージ認証など。
Transit の鍵作成と暗号化/復号・署名/検証
# エンジンの有効化
vault secrets enable -path=transit transit
# 鍵の作成(対称鍵の例)
vault write -f transit/keys/payroll
# 暗号化(Base64 入出力が基本)
PLAINTEXT=$(echo -n "card=4111111111111111" | base64)
vault write transit/encrypt/payroll plaintext="$PLAINTEXT"
# -> ciphertext: vault:v1:...
# 復号
CIPHERTEXT="vault:v1:..."
vault write transit/decrypt/payroll ciphertext="$CIPHERTEXT"
# -> plaintext: Base64(平文化はクライアント側で)
# 署名/検証(非対称鍵や HMAC 用途)
vault write transit/sign/payroll input="$PLAINTEXT"
# -> signature: vault:sha2-256:...
vault write transit/verify/payroll input="$PLAINTEXT" signature="vault:sha2-256:..."Vault はポリシーでパスごとの能力を制御し、トークンと Lease に TTL を持たせてライフサイクルを管理します。トークンの期限と、動的シークレットの Lease 期限は独立しており、どちらかが切れると実質的にアクセスは失われます。
運用では、Renew(延長)と Revoke(失効)の使い分け、上限 TTL、ロールやポリシーの見直しを定期的に行います。監査ログ(誰が何を読んだ/発行した)を前提に、インシデント時は速やかに lease revoke とトークン無効化を実施します。
読み取り専用ポリシーとトークンの TTL/更新
# ポリシー定義(kv/app/config の読み取りのみ)
cat > ro-app.hcl <<'POLICY'
path "kv/data/app/config" {
capabilities = ["read"]
}
POLICY
vault policy write ro-app ro-app.hcl
# ポリシー付与トークンを作成(1時間 TTL, 更新可)
vault token create -policy=ro-app -ttl=1h -renewable=true
# トークンの更新(追加1時間)
vault token renew <token>
# トークンの失効
vault token revoke <token>シナリオから分類を即断する訓練が有効です。保存が必要なら kv、短命の資格情報なら database/aws、データは保存せず暗号処理だけなら transit。さらに Lease/TTL、Renew/Revoke、ロール/ポリシーの関係を言語化して説明できると得点に直結します。
バージョン管理(kv)と Lease(動的)の概念は混同しやすいポイントです。Transit は“保存しない”が本質で、暗号文の保管先はアプリ側という前提を忘れないこと。
分類の当てはめ素振り(コマンドで確認できる観点)
# どのエンジンが有効か(分類の前提)
vault secrets list -detailed
# 動的なら lease 情報が返る read パスがある(例: database/creds/...)
vault read -format=json database/creds/app | jq '.lease_id, .lease_duration, .renewable'
# transit は encrypt/decrypt パスが中心で、kv のような data 保持はしない
vault list transit/keysAssociate
問題 1
開発チームはアプリが使用するデータベース資格情報を、平時は最小権限かつ短命に保ち、漏洩時には即時に無効化したい。Vault で最も適切な設計はどれか。
正解: A
短命で最小権限の DB 資格情報には database エンジンの動的発行が適しています。ロールで権限と TTL を定義し、Renew/Revoke でライフサイクルを管理します。kv は静的保存で即時無効化が難しく、transit は保存ではなく暗号処理の提供が本質。aws エンジンは AWS リソース向けで、DB ログイン用途には直接適合しません。
kv と動的シークレット(database/aws)の一番の違いは何ですか?
kv は保存型で既存の値を取り出します。動的シークレットは要求ごとに新規資格情報を発行し、Lease/TTL により自動的に期限切れや失効が可能です。即時無効化、短命運用が要件なら動的が適します。
Transit はデータを保存しますか?暗号文はどこに置けばよいですか?
Transit は平文データを保存しません。鍵の保護と暗号/署名処理のみを提供します。生成された暗号文や署名はアプリケーションが外部ストレージ(DB、オブジェクトストレージなど)へ保存します。
Lease の Revoke はオフラインの対象にも有効ですか?
Revoke は対象システム側で資格情報を無効化する操作です。Database など連携先への取り消しが成功すれば、クライアントが接続中でも以降の認証は拒否されます。対象側に反映できない場合は、上位のアクセス経路(ネットワークやアプリケーション)での遮断も併用します。
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...