Vault

HashiCorp Vault Mount Tuning 実践ガイド: TTLと可視性の正しい設計

2026-04-19
NicheeLab編集部

Vaultでは、シークレットエンジンや認証方式ごと(マウント単位)にTTLと可視性を微調整できます。これが適切に設計されていると、短寿命の動的シークレットを安全に回しつつ、不要な露出を避けられます。

本稿は公式ドキュメントの安定仕様に基づき、運用で迷いがちなdefault_lease_ttl・max_lease_ttlの優先関係、listing_visibilityの振る舞いを具体例とともに解説します。バージョンにより微細な差異がある項目は注意書きを付し、試験で問われやすい要点も整理します。

Mount Tuningの基本: どこをどう変えるか

Vaultはシークレットエンジンと認証方式を“マウント”として有効化します。Mount Tuningは、そのマウント単位でTTL(default_lease_ttl, max_lease_ttl)や可視性(listing_visibility)などの振る舞いを上書きする仕組みです。

ポイントは、サーバ全体のデフォルトTTL/最大TTLをベースにしつつ、マウント固有の要件(例: 動的DB資格情報は短TTL、汎用KVは長め)に合わせて微調整すること。tuneの変更は新規に発行されるリース・トークンから適用され、既存のものには遡及しません。

  • 対象: シークレットエンジン(例: kv/, database/)、認証方式(例: kubernetes/, oidc/)
  • 反映: 新規発行・以後の更新に適用。既存リース/トークンには遡及しない
  • 上限: マウントのmax_lease_ttlはサーバ全体のmax_lease_ttlを超えられない

MountごとのTTLと可視性のイメージ

Vault Serverglobal TTL limits / Mount Registryauth/kubernetes/tune: default_lease_ttl, max_lease_ttl, visibilityissue tokens for appssecret/database/tune: default_lease_ttl, max_lease_ttl, visibilityissue dynamic DB credssecret/kv/tune: listing_visibility=hiddenpath は有効だが一覧表示からは非表示MountごとのTTLと可視性のイメージ

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とサーバ上限には拘束されます。

  • 新規発行: default_lease_ttlが初期TTL、ただしロール/エンジン固有TTLがあればそれが優先されることがある
  • 更新時: 要求TTLはmax_lease_ttl(およびサーバ上限)を超過できない
  • 既存リース: tune変更の影響は受けない(更新時の扱いのみ影響)

実践: CLIとAPIでのtune手順

運用で使うのはvault secrets tune(シークレットエンジン)とvault auth tune(認証方式)。単位は1hや30m、3600sのようにわかりやすく指定できます。変更後は-detailedフラグで反映を必ず確認します。

APIで自動化したい場合は、/sys/mounts/<path>/tune(シークレットエンジン)や/sys/auth/<path>/tune(認証方式)に対する読み書きを使います。CI/CDからの変更は、変更前後の値を取得してドリフト検知できるようにしておくと安全です。

  • 前提権限: sys/mounts/* または sys/auth/* のtuneに対するupdate/read
  • 単位: 30m, 1h, 24h などの期間表記。整数秒も可
  • 検証: vault secrets list -detailed、vault auth list -detailed、および /sys/*/tune 読み取り

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での可視性制御

listing_visibilityは、マウントを一覧にどの程度見せるかを制御します。運用では、存在自体を隠したいパス(例: 管理用KV)にhiddenを使う一方、一般利用のエンジンはdefaultにしておくのが無難です。

値のバリエーションや細かい挙動はVaultのバージョンやUI/ポリシーとの関係に影響されます。特にunauth系の可視化は、未認証状態での列挙挙動に関係するため、利用前に公式ドキュメントと環境での検証を行ってください。

  • hiddenは“存在を一覧に出さない”だけで、直アクセスは可能(ポリシーで拒否すべき)
  • 可視性設定は誤解されやすいので、一覧に出ない=安全という誤認を避ける
  • CI/CDや運用Runbookに、可視性の意図と検証手順を明記
概要vault secrets listでの表示未認証での列挙
default通常の可視性。一般利用に推奨表示される非表示(環境やバージョン、ポリシーに依存)
hidden一覧に出さない。直指定のアクセスは可能表示されない非表示(直URLでのアクセスは別問題)
unauth(利用前に要検証)未認証での列挙に関わる設定。用途は限定的環境依存環境依存(本番利用前に公式仕様と検証が必須)

運用パターン: TTL設計と更新戦略

動的シークレットは“短TTL・自動更新”が基本です。例として、database/の資格情報は15〜60分程度、クラウド一時クレデンシャルも同等かやや短めを目安にし、アプリ側は期限前に更新できるよう設計します。更新の上限はマウントのmax_lease_ttlとサーバ上限で縛られるため、更新間隔と上限の差分(バッファ)を十分に確保してください。

KVのような静的データはTTLが直接は関係しませんが、マウントの可視性をhiddenにして運用系パスを目立たせないなどの工夫が有効です。重要なのは、可視性よりも最終的にはポリシーでアクセスを制限することです。

  • 短TTLの原則: 失効しても再取得できる設計に
  • 更新の健全性: 監視でlease_renew_errorや期限切れを検知
  • 上限の管理: max_lease_ttlとサーバ上限の差分を把握
  • Runbook: 期待TTL、更新間隔、失効時の復旧手順を明文化

トラブルシュートと試験対策の要点

よくある落とし穴は、tune後に既存リースのTTLが変わらないこと、更新要求がmax_lease_ttlにより想定より短くなる(または拒否される)こと、hiddenにした結果“一覧に見えない=アクセス不可”と誤解することです。いずれも仕様通りの挙動です。

試験対策としては、サーバ上限→マウントmax→マウントdefault/ロール固有TTLの流れ、vault secrets tuneとvault auth tuneの使い分け、listing_visibility=hiddenの意味(非表示だが存在はする)を確実に押さえてください。

  • 確認コマンド: vault secrets list -detailed、vault auth list -detailed
  • API確認: /sys/mounts/<path>/tune、/sys/auth/<path>/tune
  • 変更は新規発行から有効。既存は更新時のみ影響

問題で確認

Ops

問題 1

運用チームはdatabase/マウントでdefault_lease_ttl=30m、max_lease_ttl=2hに設定しました。アプリは発行直後にleaseを90分へ更新要求し、その後も定期的に更新したいと考えています。正しい説明はどれか。

  1. A. 初回更新で90分に延長できるが、その後の更新は許可されない
  2. B. 初回更新はmax_lease_ttlを超えるため拒否される
  3. C. 初回更新は許可されるが、実TTLは上限に従い切り詰めまたは制限される可能性がある。以後の更新も2時間の上限内でのみ行える
  4. D. default_lease_ttlが30分なので、更新で30分を超える延長は一切できない

正解: 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はその範囲内でのみ設定できます。超えた指定は拒否または上限に切り詰められます。

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

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.