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
- これは
userpass
Auth Methodを、my-auth
pathで有効化している。このAuthenticationはmy-auth
pathでアクセスする事が出来るようになる。 - 多くの場合、認証は同じ名前の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 Leases
sectionでカバーされている。 - 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>
を用いる。