Vault

Vault Secrets Engines の概要: 静的・動的・暗号化の分類

2026-04-19
NicheeLab編集部

Vault の中核は Secrets Engines(シークレットエンジン)です。エンジンはパスにマウントされ、各パスごとに「何をするか(保存・発行・暗号化)」が決まります。本稿では、試験で頻出の分類(静的・動的・暗号化/署名)に沿って、挙動・用途・試験観点を整理します。

Associate レベルでは、KV による静的管理、Database/AWS などの動的発行、Transit による暗号化/署名の違いを具体例で判別できることが重要です。TTL/Lease、Revoke/Renew、ポリシー適用、パス設計といった安定した基本概念に絞って解説します。

Secrets Engines の全体像と分類

Secrets Engine は Vault にマウントされるプラグインで、用途ごとにパスが分かれます。例えば kv/ はキー・バリューの保存、database/ は動的な DB 資格情報の発行、transit/ はデータの暗号化/署名を提供します。クライアントはトークン+ポリシーでパスにアクセスし、エンジンが所定の動作を実行します。

分類の軸は「保存するのか(静的)」「都度発行するのか(動的)」「データそのものは持たず処理だけを行うのか(暗号化/署名)」です。設計と試験の両面で、この切り分けが最初の判断ポイントになります。

  • 静的: 既存の値を保存・取得(例: kv)
  • 動的: 一時的な資格情報を都度発行し、Lease/TTL を付与(例: database, aws)
  • 暗号化/署名: データを保存せず、鍵を使って処理を提供(例: transit)
  • ポリシーはパスに対して能力(read, create, update, delete, list, sudo)を付与
  • Lease は「発行物」に付く寿命。トークン TTL/Renew と併せて管理
種別代表エンジン/機能主な用途試験の焦点
静的kv(一般に kv-v2 が多用)アプリ設定・API キー・証明書素材の保存バージョニング/メタデータ、パスとポリシーの紐づけ
動的database, aws など都度発行の短命資格情報で最小権限を実現Lease/TTL、Renew/Revoke、ロール定義と発行フロー
暗号化/署名transit(暗号化・復号・署名・検証)データは保存せず“暗号化サービス”を提供平文を保存しない、キー管理、用途と限界(保存先は別)

Vault による認可とエンジン呼び出しの流れ

Vault(Policy Check)Token + Requestkv/store/returndatabase/issue credstransit/encrypt/signVault (Policy Check) → Dispatch by Path → kv / database / transit

代表的なエンジンの有効化(例)

# 管理者が必要なパスでエンジンを有効化
vault secrets enable -path=kv kv-v2
vault secrets enable -path=database database
vault secrets enable -path=transit transit

# 現在のマウント確認
vault secrets list -detailed

静的シークレット: KV エンジンの要点

静的シークレットは、保存された値を取得するシンプルなモデルです。最も一般的なのが kv で、アプリの設定値、API キー、Webhook トークンなどを保管します。Associate では、パス設計とポリシーの最小権限付与、そして運用(更新・削除・監査)が押さえどころです。

kv はバージョニング対応の実装が広く使われています。バージョン付きの場合は「最新/特定バージョンの取得」「論理削除/完全削除」などの操作が用意され、監査・ロールバックに役立ちます。試験でバージョニングの有無が問われる際は、メタデータと履歴管理がキーワードになります。

  • ユースケース: 設定値や固定トークンの集中管理
  • ポリシー: パス単位で read だけを付与し、create/update は限定
  • ライフサイクル: 回転(定期更新)、ラベル/フォルダ分割、監査ログ
  • セキュリティ: アプリは必要な最小パスのみを許可し、環境別(dev/stg/prd)で分離

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

動的シークレット: Database/AWS などの発行エンジン

動的シークレットは、要求のたびに短命の資格情報を発行し、Lease/TTL で寿命を管理します。期限切れや Revoke により権限が無効化されるため、漏洩リスクの低減と最小権限の実装に適しています。代表例は database(RDBMS に対するユーザー/パスワード発行)と aws(IAM 資格情報の発行)です。

発行はロールに基づきます。ロールは接続先、権限(例: DB の GRANT)、TTL の上限、Renew 可否などを規定します。クライアントは read を呼ぶだけで新規資格情報が払い出され、レスポンスには lease_id, lease_duration, renewable などのメタデータが含まれます。

  • Lease/TTL: 寿命が明確で、期限後は無効化
  • Renew: 必要に応じて延長(上限 TTL に注意)
  • Revoke: 即時無効化(漏洩・退役時)
  • ロール設計: 最小権限プリンシプル、上限 TTL とローテーション方針
  • 監査: だれが、どのロールから、いつ発行したか

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 エンジンの設計ポイント

Transit はデータを保存しません。鍵を Vault 側で保護・操作し、クライアントから渡された平文を暗号化/復号、データに署名/検証を行う“暗号化サービス”です。保存先(DB/S3 など)はアプリケーション側で管理します。

メリットは、アプリが鍵素材を直接扱わない点と、監査・ローテーション・アクセス制御を Vault に集約できる点です。用途は、機密列の暗号化、透過的なトークン署名、アプリ間のメッセージ認証など。

  • データは保存しない(暗号文/署名を返す)
  • キー管理の一元化(作成、ローテーション、無効化)
  • 操作: encrypt/decrypt、sign/verify、rewrap(キーローテ時の暗号文更新)
  • 権限は transit/keys/<name> や encrypt/decrypt パス単位に付与

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:..."

アクセス制御とライフサイクル: ポリシー、TTL、監査

Vault はポリシーでパスごとの能力を制御し、トークンと Lease に TTL を持たせてライフサイクルを管理します。トークンの期限と、動的シークレットの Lease 期限は独立しており、どちらかが切れると実質的にアクセスは失われます。

運用では、Renew(延長)と Revoke(失効)の使い分け、上限 TTL、ロールやポリシーの見直しを定期的に行います。監査ログ(誰が何を読んだ/発行した)を前提に、インシデント時は速やかに lease revoke とトークン無効化を実施します。

  • ポリシーは最小権限(必要なパスに必要な能力のみ)
  • トークン TTL と Lease TTL を混同しない
  • Renew は上限 TTL の範囲内、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>

試験対策の要点と落とし穴(Associate)

シナリオから分類を即断する訓練が有効です。保存が必要なら kv、短命の資格情報なら database/aws、データは保存せず暗号処理だけなら transit。さらに Lease/TTL、Renew/Revoke、ロール/ポリシーの関係を言語化して説明できると得点に直結します。

バージョン管理(kv)と Lease(動的)の概念は混同しやすいポイントです。Transit は“保存しない”が本質で、暗号文の保管先はアプリ側という前提を忘れないこと。

  • 保存 vs 発行 vs 暗号処理の三択で出題されやすい
  • Lease 情報(lease_id, lease_duration, renewable)を見て動的と判断
  • Revoke は即時無効化、Renew は上限内延長
  • transit は鍵を管理するがデータは保管しない
  • kv はポリシーで読み取り専用にしやすく、環境別パス分離が定石

分類の当てはめ素振り(コマンドで確認できる観点)

# どのエンジンが有効か(分類の前提)
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/keys

問題で確認

Associate

問題 1

開発チームはアプリが使用するデータベース資格情報を、平時は最小権限かつ短命に保ち、漏洩時には即時に無効化したい。Vault で最も適切な設計はどれか。

  1. database エンジンでロールを定義し、アプリは database/creds/&lt;role&gt; を読み取って都度資格情報を取得。TTL は短めに設定し、必要に応じて Renew。漏洩時は lease revoke を実行する。
  2. kv エンジンにユーザー名とパスワードを保存し、アプリ起動時に一度だけ読み込む。漏洩時は kv のバージョンをロールバックする。
  3. transit エンジンでパスワードを暗号化して保存し、必要時に復号して使う。漏洩時はキーをローテーションする。
  4. aws エンジンで一時的な IAM 資格情報を発行し、それを DB ログインに使う。TTL の管理はアプリで行う。

正解: A

短命で最小権限の DB 資格情報には database エンジンの動的発行が適しています。ロールで権限と TTL を定義し、Renew/Revoke でライフサイクルを管理します。kv は静的保存で即時無効化が難しく、transit は保存ではなく暗号処理の提供が本質。aws エンジンは AWS リソース向けで、DB ログイン用途には直接適合しません。

よくある質問

kv と動的シークレット(database/aws)の一番の違いは何ですか?

kv は保存型で既存の値を取り出します。動的シークレットは要求ごとに新規資格情報を発行し、Lease/TTL により自動的に期限切れや失効が可能です。即時無効化、短命運用が要件なら動的が適します。

Transit はデータを保存しますか?暗号文はどこに置けばよいですか?

Transit は平文データを保存しません。鍵の保護と暗号/署名処理のみを提供します。生成された暗号文や署名はアプリケーションが外部ストレージ(DB、オブジェクトストレージなど)へ保存します。

Lease の Revoke はオフラインの対象にも有効ですか?

Revoke は対象システム側で資格情報を無効化する操作です。Database など連携先への取り消しが成功すれば、クライアントが接続中でも以降の認証は拒否されます。対象側に反映できない場合は、上位のアクセス経路(ネットワークやアプリケーション)での遮断も併用します。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Vault

Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token

HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...

Vault

Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる

HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...

Vault

Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く

HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...

Vault

Vault Tokens の基礎: 認証の起点となる概念

HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...

Vault

Vault のトークン種類を正しく使い分ける: service / batch 実践

HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...

Vaultの記事一覧 (100件)
© 2026 NicheeLab All rights reserved.