🐈‍⬛

HashiCorp Vaultを何となく理解する(3):Token

2024/04/16に公開

イオン⁠⁠⁠⁠⁠⁠⁠スマートテクノロジーのCTO室SREチームの@hikkie13です。

過去の記事に記載がある通り、弊社ではHCP Vaultの導入を進めています。
https://zenn.dev/aeonpeople/articles/6625a900552311
https://zenn.dev/aeonpeople/articles/0b4492898a0fd3

導入には教育・学習が欠かせません。
その過程で得た知識を何回かに分けてまとめていこうと思います。(心が折れない限り)

今回は、VaultのTokenについてです。

Tokenについては、弊社内のこの記事もご参考ください。
https://zenn.dev/aeonpeople/articles/ec634244fd1437

Tokenについて

Vault Token

  • Tokenは認証の中核的な方法。
  • Vaultでのほとんどの操作は既存のトークンを必要とする
    • 例外として、例えばログインパスには不要
  • Token Auth MethodはTokenの作成と保管を担当する。
    • Token Auth Methodは無効にできない。
    • Tokenは直接使用することもできるし、他の認証方法(例えば外部のIdPLDAPなど)と組み合わせて動的にTokenを生成することもできる。
  • Tokenには、Tokenが実行可能な操作を制御するための1つ以上のポリシーが付随する。 ※ポリシーについては別記事で。
  • トークンはX-Vault-Tokenヘッダー経由で送信される。
    • Authorization Bearerも有効なヘッダー。

Tokenの種類

Tokenには大きく Service TokenとBatch Tokenに大別される。

tokenの種類はprefixで見分けられる。

タイプ prefix
Service Token hvs.
Batch Token hvb.
Recovery Token hvr.

後述されるが、Service Tokenは用途によりさらに分別される。

Serivce Token

  • デフォルトのTokenタイプ。
  • ストレージに永続化される(ストレージに対して大量のwrite/readが発生)。
  • 更新、無効化が可能で、子Tokenを作成することも可能。

Batch Token

  • 暗号化されたバイナリ・ラージ・オブジェクト(BLOB)である。
  • 軽量でスケーラブルに設計されている。
  • ストレージには永続化されない。
  • 全機能を持ってはいない。
  • 高ボリュームの操作、例えば暗号化に理想的である。
  • ディザスタリカバリ(DR)レプリケーションクラスターの昇格にも使用される。

Service TokenとBatch Tokenの比較

特性 Service Token Batch Token
Root Tokenになれる
子Tokenを生成できる
更新可能
周期的になれる
明示的にMaxTTLを設定可能
Accessorを持つ
Cubbyholeを持つ
親Tokenが取り消された時に取り消される (orphenでない場合) 停止
Dynamic Secretのリース割り当て 自己 親 (orphanでない場合)
Performance Replication Cluster間で使用可能
Performance Standby Nodeの数に応じてスケール
パフォーマンス・コスト 重量
Token生成時に大量の書き込みが発生する
軽量
Token生成時にストレージの書き込みコストがない

Tokenのヒエラルキー

  • Root Tokenを除いて、各TokenはTTL(Time-To-Live)を持つ。
  • 更新されない限り、TTLに達した時点でrevoke(廃止)され、無効となる。
    • max TTLに達すると、無効になる。
    • 手動で無効化することによって、TTLより前にに無効にすることも可能
    • 親Tokenが無効になると、その子Tokenもすべて無効になる。

以下のTokenのヒエラルキーを持つ場合、Tokenが無効になる順番はC,D → A,Bとなる。
DはCの子Token、BはAの子Tokenのため。

トークンA (ttl=4h)
 ├ トークンB(ttl=6h)
 └ トークンC(ttl=2h)
      └トークンD(ttl=3h)

ユースケースとTokenの選択

ユースケース Token
長時間稼働するアプリケーションがあり、Tokenや秘密鍵の再生成ができない Periodic Service Token
一度の使用後に自動的に無効になるTokenが必要 Service Token with Use Limit
親Tokenの影響を受ける有効期限を持つTokenをアプリで使用できない Orphen Service Token

Periodic Service Token

以下の特徴を持つため、Tokenの再生成を扱えない長期稼働のサービスやアプリケーションに有用。

  • Tokenが無効になることが問題になる場合、Rootまたはsudoユーザーは周期的なTokenを生成できる。
  • 周期的なTokenにはTTLはあるが、max TTLはない。
  • 周期的なTokenは無限の時間存続する可能性がある。

Service Token with Use Limit

使用回数制限付きのService Token。

  • Tokenの使用回数を設定する。TTL(Time To Live)およびmax TTLに加える形となる。使用回数の制限もしくはTTLのうち、早い方の制限で失効する。
    つまり、失効するのは以下の通り。
    • 残りのTTLに関わらず、最後の使用時。
    • 残りの使用回数に関わらず、そのTTLの終わり。

Orphan Service Token

Orphan=孤立、という意味。

  • 親Tokenの子ではないため、親Tokenが失効しても失効しない。
  • 自身のmax TTLに達した時に失効する。
    RootまたはsudoユーザーがOrphan Tokenの生成可能

Root Tokenについて

Root Tokenとは

Rott TokenはVaultに無制限のアクセスを持つスーパーユーザーである。

  • TTLはない。
  • Root Policyが紐づけられる。(つまり何でもできる)
  • Root TokenはTTLを持つRoot Tokenを生成できる。
  • 権限が強すぎるので、Root Tokenを日常使いしてはいけない。
  • 削除することを推奨

Root Tokenはいつ作られるのか?

vaultの初期化( vault operator init )で生成される。

  • Vaultを最初にデプロイする際の唯一の認証方法となる。
  • 認証方法や監査デバイスなどの初期設定に使用される。
  • 新しい認証方法が設定・疎通されたら、Root Tokenは削除すべき。

Token Accessors

すべてのTokenには、Tokenへの参照として使用されるToken Accessorがある。
Token Accessorsは、限定されたアクションを実行するために使用する。
例としては、

  • 更新(renew)/無効化(revoke)
  • プロパティやcapabilitiesを参照する。

Vaultへの認証や追加リクエストの実行には使用できない。

TTLについて

  • TTLのデフォルトは32日(768h)
  • 変更する場合は、 defalut_lease_ttl を設定する。

参考

https://developer.hashicorp.com/vault/tutorials/tokens/tokens
https://developer.hashicorp.com/vault/docs
https://youtube.com/playlist?list=PLFkEchqXDZx7CuMTbxnlGVflB7UKwf_N3&si=uJE2c_GhjxQ4FmMA
HashiCorp Certified: Vault Associate 2024 (w/ Hands-On Labs)
HashiCorp Certified: Vault Operations Professional

最後に(採用のお知らせ)

イオンスマートテクノロジーではエンジニアをはじめとした様々な職種を積極的に採用中です!
これからとてもおもしろいフェーズへ突入していくと思いますので興味のある方は是非カジュアル面談などで話を聞いてください!

https://engineer-recuruiting.aeon.info/

AEON TECH HUB

Discussion