Vaultでは、シークレットエンジンや認証方式ごと(マウント単位)にTTLと可視性を微調整できます。これが適切に設計されていると、短寿命の動的シークレットを安全に回しつつ、不要な露出を避けられます。
本稿は公式ドキュメントの安定仕様に基づき、運用で迷いがちなdefault_lease_ttl・max_lease_ttlの優先関係、listing_visibilityの振る舞いを具体例とともに解説します。バージョンにより微細な差異がある項目は注意書きを付し、試験で問われやすい要点も整理します。
Vaultはシークレットエンジンと認証方式を“マウント”として有効化します。Mount Tuningは、そのマウント単位でTTL(default_lease_ttl, max_lease_ttl)や可視性(listing_visibility)などの振る舞いを上書きする仕組みです。
ポイントは、サーバ全体のデフォルトTTL/最大TTLをベースにしつつ、マウント固有の要件(例: 動的DB資格情報は短TTL、汎用KVは長め)に合わせて微調整すること。tuneの変更は新規に発行されるリース・トークンから適用され、既存のものには遡及しません。
MountごとのTTLと可視性のイメージ
default_lease_ttlは、そのマウントから新規に発行されるリースの標準寿命。max_lease_ttlは上限で、更新や発行時のTTLはこの値を超えられません。サーバ全体のmax_lease_ttl(vault serverの設定)も最終上限として働き、マウント側でこれを上回る指定はできません。
更新時の挙動は要注意です。クライアントが長いTTLを要求しても、マウントのmax_lease_ttl(およびサーバ全体の上限)を超える延長は拒否または上限に切り詰められます。エンジンやAPIによってはエラーになる場合と上限に丸められる場合があり得るため、実運用では想定どおりに丸められるかを事前に検証してください。
ロールやエンジン固有のTTL(例: DatabaseエンジンのRoleに設定したTTL)がある場合、しばしばそれがdefault_lease_ttlより優先されますが、いずれもmax_lease_ttlとサーバ上限には拘束されます。
運用で使うのはvault secrets tune(シークレットエンジン)とvault auth tune(認証方式)。単位は1hや30m、3600sのようにわかりやすく指定できます。変更後は-detailedフラグで反映を必ず確認します。
APIで自動化したい場合は、/sys/mounts/<path>/tune(シークレットエンジン)や/sys/auth/<path>/tune(認証方式)に対する読み書きを使います。CI/CDからの変更は、変更前後の値を取得してドリフト検知できるようにしておくと安全です。
CLIとAPIの具体例
# シークレットエンジン(database/)のTTLを調整
vault secrets tune -default-lease-ttl=1h -max-lease-ttl=24h database/
# 認証方式(kubernetes/)のTTLを調整
vault auth tune -default-lease-ttl=20m -max-lease-ttl=4h kubernetes/
# KVを一覧から隠す
vault secrets tune -listing-visibility=hidden kv/
# 反映確認(詳細表示)
vault secrets list -detailed
vault auth list -detailed
# APIでtune値を取得(例: database/)
# VAULT_ADDRとVAULT_TOKENを環境変数で指定している前提
curl -sH "X-Vault-Token: $VAULT_TOKEN" "$VAULT_ADDR/v1/sys/mounts/database/tune" | jq .listing_visibilityは、マウントを一覧にどの程度見せるかを制御します。運用では、存在自体を隠したいパス(例: 管理用KV)にhiddenを使う一方、一般利用のエンジンはdefaultにしておくのが無難です。
値のバリエーションや細かい挙動はVaultのバージョンやUI/ポリシーとの関係に影響されます。特にunauth系の可視化は、未認証状態での列挙挙動に関係するため、利用前に公式ドキュメントと環境での検証を行ってください。
| 値 | 概要 | vault secrets listでの表示 | 未認証での列挙 |
|---|---|---|---|
| default | 通常の可視性。一般利用に推奨 | 表示される | 非表示(環境やバージョン、ポリシーに依存) |
| hidden | 一覧に出さない。直指定のアクセスは可能 | 表示されない | 非表示(直URLでのアクセスは別問題) |
| unauth(利用前に要検証) | 未認証での列挙に関わる設定。用途は限定的 | 環境依存 | 環境依存(本番利用前に公式仕様と検証が必須) |
動的シークレットは“短TTL・自動更新”が基本です。例として、database/の資格情報は15〜60分程度、クラウド一時クレデンシャルも同等かやや短めを目安にし、アプリ側は期限前に更新できるよう設計します。更新の上限はマウントのmax_lease_ttlとサーバ上限で縛られるため、更新間隔と上限の差分(バッファ)を十分に確保してください。
KVのような静的データはTTLが直接は関係しませんが、マウントの可視性をhiddenにして運用系パスを目立たせないなどの工夫が有効です。重要なのは、可視性よりも最終的にはポリシーでアクセスを制限することです。
よくある落とし穴は、tune後に既存リースのTTLが変わらないこと、更新要求がmax_lease_ttlにより想定より短くなる(または拒否される)こと、hiddenにした結果“一覧に見えない=アクセス不可”と誤解することです。いずれも仕様通りの挙動です。
試験対策としては、サーバ上限→マウントmax→マウントdefault/ロール固有TTLの流れ、vault secrets tuneとvault auth tuneの使い分け、listing_visibility=hiddenの意味(非表示だが存在はする)を確実に押さえてください。
Ops
問題 1
運用チームはdatabase/マウントでdefault_lease_ttl=30m、max_lease_ttl=2hに設定しました。アプリは発行直後にleaseを90分へ更新要求し、その後も定期的に更新したいと考えています。正しい説明はどれか。
正解: C
max_lease_ttl=2hが上限として働き、更新要求はこれを超えられません。90分は上限内のため許容されますが、実環境ではエンジン/APIにより丸めや制限のかかり方が異なるため、結果TTLは上限に従い切り詰め・制限される可能性があります。default_lease_ttlは初期値であり、更新自体を妨げるものではありません。
tuneでTTLを変えたのに、既に発行済みのリースTTLが変わりません。なぜですか?
tuneの変更は新規発行以降が対象で、既存リースには遡及しません。既存リースは更新時にmax_lease_ttlなどの新しい制約の影響を受けます。
listing_visibility=hiddenにすると完全にアクセス不能になりますか?
いいえ。hiddenは一覧に出さないだけです。パスを知っているクライアントが適切なポリシー権限を持っていればアクセスできます。可視性ではなくポリシーでアクセス制御してください。
サーバ全体のmax_lease_ttlより長い値をマウントのmax_lease_ttlに設定できますか?
できません。サーバ全体のmax_lease_ttlが最終上限です。マウントのmax_lease_ttlはその範囲内でのみ設定できます。超えた指定は拒否または上限に切り詰められます。
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...