SummerWind

Web, Photography, Space Development

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 の更新は忘れないようにしたい。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。