Vaultの「Auth Methods」を完全に理解する

Posted on
Vault

VaultのAuth Methodsを理解する為に、以下の公式Docを読んだ内容をまとめてみる。

Overview

  • Auth Methodsは、Vaultに対する認証を行うコンポーネントであり、ユーザに対してIDとポリシーを割り当てることに責務を持つ。
  • 複数のAuth Methodsを有効化することで、組織とVaultのユースケースに応じた認証方法を利用する事が出来る。
  • 例えば、開発者のマシンはGitHub Auth Methodを用いるのが最も簡単で、サーバにとっては、AppRole Methodが推奨される選択である。

Auth Methodsの有効化/無効化

Auth MethodsはCLI/APIを用いて有効化/無効化を行うことが出来る。

vault auth enable userpass

有効化する時、Auth MethodsはSecrets Engineと似ている。Vault mount table内にマウントされ、標準のRead/Write APIを用いて構成及びアクセスされる。全てのAuth Methodsはauth/prefix配下にマウントされる。

デフォルトでは、Auth Methodsはauth/<type>にマウントされる。 例えば、githubを有効化した時、auth/githubで操作することができる。このpathはカスタマイズする事が出来る。アドバンスドなユースケースとして、ユーザは単一のAuth Methodsを複数回マウントすることを許可されている

vault auth enable -path=my-login userpass

Auth Methodsが無効化された時、そのAuth Methodsを経由して認証されたユーザは自動的にログアウトされる

Concepts

  • Vaultにおける認証は、ユーザあるいはマシンが提供した情報を、internal/externalのシステムに対して検証するプロセスである。
  • Vaultは複数のAuth Methodsをサポートし、各々のAuth Methodsは特定のユースケースを持っている。
  • クライアントがVaultを操作出来るようになる前に、Auth Methodに対する認証が必要である。
  • 認証時に、Tokenが生成される。このtokenは、コンセプト的にはWebSiteにおけるSessionIDと似ている。
  • tokenには、認証時にマッピングされるポリシーがアタッチされている場合がある。
  • このプロセスの詳細については、policies conceptsのドキュメントで詳しく説明されている。

auth methods

  • Vaultは複数のAuth Methodsをサポートしている。いくつかのバックエンドはユーザをターゲットにしているのに対して、他はマシンをターゲットにしている。
  • 多くの認証バックエンドは利用する前に有効化する必要がある。
vault write sys/auth/my-auth type=userpass
  • これはuserpassAuth Methodを、my-authpathで有効化している。このAuthenticationはmy-authpathでアクセスする事が出来るようになる。
  • 多くの場合、認証は同じ名前のpathに認証が表示されるが、これは必須要件ではない。認証について詳しく知るには、組み込みのpath-helpコマンドを用いる。
vault path-help auth/my-auth
  • Vaultは同時に複数のAuth Methodsをサポートしており、ユーザは異なるパスに同じタイプのAuth Methodsをマウントすることもできる。
  • Vaultへのアクセス権限を得るのに必要な認証方法は一つだけである。複数の認証を強制することは出来ない。一部の認証バックエンドはMFAをサポートしている。

Tokens

  • tokenの全体像について説明しているページは別にあるが、identityの検証及びidentityと関連したtokenの生成など認証の動作を理解するには重要な要素である。
  • 例えば、GitHubのようなものを使って認証したとしても、Vaultは一意のアクセストークンを生成し、次のリクエストで利用出来るようにする。
  • CLIはリクエストの為にトークンを自動的にアタッチするが、もしAPIを利用する場合は、これを手作業で行う必要がある。
  • あらゆる認証バックエンドでの認証で与えられるトークンは、全てのtoken commands(新しいsub-tokensを作ったり、tokenをrevokeしたり、tokenをrenewしたり)でも使用できる。

Authenticating

Via the CLI

CLIを使って認証するには、vault loginを用いる。これは多くの組み込みAuth Methodsをサポートしている。例えばGitHubでは以下のようになる。

vault login -method=github token=<token>
  • 認証後にログインすることができる。CLI commandは生のTokenを出力する。このトークンは失効と更新に用いられる。ユーザがログインするように、トークンの一番のユースケースは更新であり、以下のAuth Leasessectionでカバーされている。
  • Auth Methodに必要とされる変数を決定する為に、追加の引数なしで-methodフラグを指定すると、ヘルプが表示される。もしCLIをサポートしていないAuth Methodを使う場合、APIを使う使用する必要がある。

Via the API

  • API認証は一般的にマシンの認証に使用される。各々のAuth Methodsは自身のlogin endpointを実装している。vault path-helpの仕組みを使うことで、適切なendpointを見つける。
  • 例えば、GitHubのlogin endpointはauth/github/loginにある。そして、必要な引数を明らかにする為には、vault path-help auth/github/loginを用いる。

Auth Leases

  • 秘匿情報と同様に、identityはリース期間を持っている。これは、リース期間が過ぎてもVaultにアクセスし続ける為には再認証が必要であることを意味する。
  • リース期間を設定する為には、特定のAuth Methodのhelpを参照すること。
  • 個々の認証バックエンドでリースがどのように実装されているかは、固有である。
  • また、秘匿情報のように、identityは完全に再認証する事なく、更新する事ができる。vault token renew <token>を用いる。