Vault の Lease と TTL
Vault を使っていてよく Lease とか TTL の話を忘れるのでここにメモしておく。以下の公式ドキュメントにも詳しく書かれている。
Lease
Vault で管理されるダイナミックシークレットや認証トークンには Lease と呼ばれるメタデータが設定される。Lease には有効期限などの情報が含まれる。有効期限を過ぎて Lease が失効すると Vault はそのシークレットやトークンを無効化 (Revoke) する。Lease は以下のようにして有効期限を更新したり、手動で無効化もできる。なお、一度無効化すると元に戻せない。
# Lease の更新
$ vault lease renew -increment=1h database/creds/readonly/2f6a614c...
# Revoke の実行
$ vault lease revoke database/creds/readonly/2f6a614c...
この仕組みにより、シークレットの利用者は Vault に定期的にシークレットを取得しにくることが強制されるので監査ログの価値が高まり、またシークレットの交換が容易になる。
TTL と Max TTL
Lease には TTL と Max TTL が設定される。TTL は Lease の現在の有効期限にあたる。TTL の時間内であれば Lease を更新すれば利用を継続できる。Max TTL は Lease の最終的な有効期限であり、この時間を超えて Lease を更新することはできない。例えば、TTL が1時間、Max TTL が24時間に設定された場合、最大24時間までは Lease を更新し続けられるものの、それを超えては更新できない。
バックエンドのデフォルト TTL と Max TTL は以下のように確認できる。バックエンドごとに個別のデフォルト値も設定できる。
$ vault secrets list -detailed
Path Type Accessor Plugin Default TTL Max TTL Force No Cache Replication Seal Wrap Options Description
---- ---- -------- ------ ----------- ------- -------------- ----------- --------- ------- -----------
cubbyhole/ cubbyhole cubbyhole_bffd6b89 n/a n/a n/a false local false map[] per-token private secret storage
identity/ identity identity_30b9949e n/a system system false replicated false map[] identity store
kv/ kv kv_e3368eba n/a system system false replicated false map[version:2] n/a
sys/ system system_ac0ecc81 n/a n/a n/a false replicated false map[] system endpoints used for control, policy and debugging
Periodic Token
Vault にアクセスするための認証トークンにも Lease は設定される。Max TTL が設定されたトークンだと、長時間起動し続けるようなサービスでは途中でトークンが使えなくなってしまい困るケースがあるため、Max TTL が設定されない Periodic Token を発行して使用する。以下の例では24時間ごとに更新が必要な Periodic Token を発行している。
# ロールの登録
$ vault write auth/token/roles/app allowed_policies="default" period="24h"
# トークンの発行
$ vault token create -role=app
Key Value
--- -----
token 343ff278-66e1-7934-fb78-dd027df385ba
token_accessor ceae25de-e97f-8477-b009-330dcea7f27e
token_duration 24h
token_renewable true
token_policies ["default"]
identity_policies []
policies ["default"]
実際に Vault を使う場合は TTL と Max TTL を意識しておく必要がある。Lease の更新は忘れないようにしたい。