アプリが毎回ユニークなDBユーザとパスワードをVaultから受け取り、TTL切れで自動失効する。これがDatabaseシークレットエンジンの中核です。
本稿は、なぜ動的発行が安全なのか、最小構成の手順、ローテーションと失効、ポリシー設計、試験に出やすいポイントまでを一気通貫で解説します。
動的クレデンシャルは、Vaultが要求のたびに短命なDBユーザを作成し、TTL満了や明示的リボークで確実に破棄する方式です。長期共有パスワードや人手配布に比べ、漏洩時の影響半径を小さくできます。
監査性も高く、誰がいつどのロールで資格情報を取得したかをVaultの監査ログで追跡可能です。障害時の切り戻しやインシデント対応においても、リース単位での失効が即効性を持ちます。
| 方式 | 有効期限 | 漏洩時の影響 | ローテーション運用 |
|---|---|---|---|
| 動的クレデンシャル(Vault) | 短期(TTL, Max TTL) | 低(期限切れ/即時失効可) | 自動(取得都度新規) |
| 固定アプリ内アカウント | 長期/無期限 | 高(全環境に波及) | 人手orスクリプト依存 |
| 人手払い出し(チケットベース) | ケースバイケース | 中〜高(剥奪遅延が常) | 都度手作業 |
Databaseシークレットエンジンはプラグイン(例: postgresql-database-plugin)を通じてDBに接続し、ロール定義に基づくSQLを実行してユーザを作成します。Vaultは生成した資格情報をLeaseに紐付け、TTL満了時に撤去SQLを実行します。
アプリはVaultへのRead権限のみを保持し、DBの作成・削除はVaultが代行します。これにより、アプリケーションからDB管理権限を切り離せます。
動的クレデンシャル発行のフロー
以下は最小手順の一例です。実DBの接続ユーザ(例: vault_admin)にはユーザ作成・権限付与・削除権限が必要です。接続URLやTLS設定は環境に合わせて調整してください。
creation_statementsでは、作成する一時ユーザ名やパスワードをVaultのテンプレート変数で受け取り、必要最小限の権限だけを付与します。
Vault CLIでの設定と取得(PostgreSQL)
export VAULT_ADDR=https://vault.example.com
export VAULT_TOKEN=hvs.xxxxx
# 1) Databaseシークレットエンジンを有効化
vault secrets enable database
# 2) DB接続設定(postgresql-database-plugin)
vault write database/config/my-postgresql \
plugin_name=postgresql-database-plugin \
allowed_roles=app-readonly \
connection_url="postgresql://{{username}}:{{password}}@db.example.com:5432/postgres?sslmode=require" \
username="vault_admin" \
password="s3cr3t"
# 3) ロール定義(読み取り専用の一時ユーザを作成)
vault write database/roles/app-readonly \
db_name=my-postgresql \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\"; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO \"{{name}}\";" \
revocation_statements="REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM \"{{name}}\"; DROP ROLE IF EXISTS \"{{name}}\";" \
default_ttl=1h \
max_ttl=24h
# 4) アプリが資格情報を取得(動的)
vault read database/creds/app-readonly
# 出力例
# Key Value
# lease_id database/creds/app-readonly/xxxxx
# lease_duration 1h
# lease_renewable true
# password A1b2C3d4e5f6g7h8
# username v-token-app-readonly-1693258841-abcde
# 5) 最小権限ポリシー(アプリ用)
cat <<'EOF' > app-readonly.hcl
path "database/creds/app-readonly" {
capabilities = ["read"]
}
EOF
vault policy write app-readonly app-readonly.hcl
# 必要ならアプリ用トークンを発行(例)
vault token create -policy=app-readonly -display-name=app-A
# 6) 失効(インシデント対応など、即時剥奪)
vault lease revoke database/creds/app-readonly/xxxxx
# 7) 接続ユーザのローテーション(定期的なベストプラクティス)
vault write -f database/rotate-root/my-postgresqlLeaseの更新はmax_ttlの範囲内で可能です。更新すると、Vaultの失効スケジュールが延長され、ユーザ削除(撤去)タイミングが後ろ倒しになります。ロール設計上、長期接続が不要ならdefault_ttlを短く維持します。
接続ユーザ(VaultがDBに接続するための固定アカウント)はrotate-rootでローテーション可能です。これにより、Vault-DB間の固定資格情報の露出期間を短縮できます。
アプリは原則として database/creds/<role> のread権限のみを持たせます。書き込みや一覧取得は不要です。ロールごとにパスを分離すると、サービス間の境界が明確になります。
同一アプリでも開発・検証・本番でロール名を分離し、環境越境を防止します。NamespaceやMount Pathを分けるのも有効です。
よくある失敗は、接続ユーザの権限不足(ROLE作成やGRANT不可)や、creation_statementsのエスケープ不備、DB接続のTLS要件未満です。まずはVaultログとDBサーバログの両方を併読します。
Associate / Ops向けには、Lease/TTL/Max TTLの関係、rotate-rootの意味、lease revokeの効果、allowed_rolesの制約などが頻出です。
Associate / Ops
問題 1
Vault Databaseシークレットエンジンでアプリがdatabase/creds/readroleから資格情報を取得した。直後にその認証情報を無効化したい。最も適切な操作はどれか。
正解: A
特定の取得済み資格情報を即時に無効化するには、そのLeaseをrevokeするのが最短です。rotate-rootはVault→DBの接続ユーザをローテーションする操作で、既に払い出された一時ユーザには影響しません。トークンrevokeは今後の取得を止められますが、既に払い出されたDBユーザは別経路で残存します。TTLを0に変更しても既存Leaseには即時反映されません。
接続ユーザ(VaultがDBに接続する固定アカウント)の必要権限は?
ロールのcreation/revocationで実行するSQLに応じた権限が必要です。典型的にはユーザ作成・権限付与・削除(CREATE ROLE/GRANT/DROP ROLEなど)。最小権限の原則に従い、不要なスーパーユーザ権限は避けます。
同じユーザ名を再利用しますか?それとも毎回新規ですか?
動的クレデンシャルは基本的に毎回一意のユーザ名(例: v-token-...)が生成されます。Lease失効時にはrevocation_statementsに従って当該ユーザが撤去されます。
TTLの延長(renew)はDB側パスワードを変更しますか?
通常、Leaseの更新はVault側の失効スケジュールを延長するだけで、DB側のユーザ名/パスワードはそのままです(Max TTL範囲内)。失効またはrevoke時に撤去SQLが実行されます。
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...