GitLab OpenID ConnectによるVault認証
GitLab 9.0 で導入されました。
VaultはHashiCorpが提供するシークレット管理アプリケーションです。 シークレット環境変数、暗号化キー、認証トークンなどの機密情報を保存、管理することができます。 VaultはIdentity-based Accessを提供しており、Vaultユーザーは複数の好みのクラウドプロバイダを介して認証することができます。
このドキュメントでは、VaultのOpenID認証機能を利用してGitLabからVaultユーザーを認証する方法を説明します。 以下は、すでにVaultがインストールされ、実行されていることを前提としています。
-
GitLab から OpenID Connect クライアント ID とシークレットを取得します:
まず GitLab アプリケーションを作成し、Vault で認証するためのアプリケーション ID とシークレットを取得します。 これを行うには、GitLab にサインインして以下の手順に従います:
- GitLabで右上のアバターをクリックし、Settings(設定)> Applications(アプリケーション)を選択します。
- アプリケーション名とリダイレクトURIを入力し、OpenIDスコープを選択してください。
- アプリケーションを保存します。
- クライアントIDとシークレットをコピーするか、参照用にページを開いておいてください。
-
Vault で OIDC 認証を有効にします:
OpenID ConnectはデフォルトではVaultで有効になっていません。 ターミナルで有効にする必要があります。
ターミナルセッションを開き、以下のコマンドを実行して、VaultのOpenID Connect認証プロバイダを有効にします:
vault auth enable oidc
ターミナルに次のような出力が表示されるはずです:
Success! Enabled oidc auth method at: oidc/
-
OIDCコンフィグを書き込みます:
次に、VaultにGitLabが生成したアプリケーションIDとシークレットを渡す必要があります。
ターミナルセッションで以下のコマンドを実行し、OpenIDスコープを使って作成したGitLabアプリケーションにVaultがアクセスできるようにします。 これにより、VaultはGitLabを通して認証を行うことができます。
以下の例の
your_application_id
とyour_secret
は、アプリ用に生成されたアプリケーションIDとシークレットに置き換えてください:$ vault write auth/oidc/config \ oidc_discovery_url="https://gitlab.com" \ oidc_client_id="your_application_id" \ oidc_client_secret="your_secret" \ default_role="demo" \ bound_issuer="localhost"
ターミナルに次のような出力が表示されるはずです:
Success! Data written to: auth/oidc/config
-
OIDCロールコンフィグを書き込みます:
Vault が GitLab アプリケーション ID とシークレットを取得したところで、今度は リダイレクト URIとアプリケーション作成時に GitLab に渡されたスコープを知る必要があります。 リダイレクト URI は、Vault のインスタンスが動いている場所と一致する必要があります。
oidc_scopes
フィールドにはopenid
を含める必要があります。前のステップと同様に、your_application_id
を GitLab から生成されたアプリケーション ID に置き換えます:この設定は、作成するロールの名前で保存されます。今回は、
demo
ロールを作成します。後ほど、Vault CLIからこのロールにアクセスする方法を説明します。vault write auth/oidc/role/demo \ user_claim="sub" \ allowed_redirect_uris="http://localhost:8250/oidc/callback,http://127.0.0.1:8200/ui/vault/auth/oidc/oidc/callback" \ bound_audiences="your_application_id" \ role_type="oidc" \ oidc_scopes="openid" \ policies=demo \ ttl=1h
-
Vaultにサインインしてください:
- Vault UI(例:http://127.0.0.1:8200/ui/vault/auth?with=oidc)にアクセスします。
-
OIDC
メソッドが現在選択されていない場合は、ドロップダウンを開いて選択します。 -
Sign in With GitLab ボタンをクリックすると、モーダルウィンドウが開きます:
-
モーダルでAuthorize をクリックし、Vault が GitLab 経由でサインインできるようにします。 サインインしたユーザーとして Vault UI にリダイレクトされます。
-
Vault CLIを使用してサインインします(オプション):
VaultではCLIを使ってサインインすることもできます。
上記と同じ設定を書いた後、ターミナルで以下のコマンドを実行すると、上記ステップ4で作成したロール設定でサインインすることができます:
vault login -method=oidc port=8250 role=demo
このコマンドが何をするのかを簡単に説明します:
-
OIDCロールの設定を書き込む(ステップ4)で、
demo
というロールを作成しました。role=demo
を設定することで、Vaultがどの設定でログインしたいかを知ることができます。 - Vault が
OIDC
のサインイン方法を使うように設定するために、-method=oidc
を設定します。 - GitLabがリダイレクトするポートを設定するために、
port=8250
、またはRedirect URIをリストするときにGitLabに与えられたポート番号と一致するポート番号を設定します。
上記のコマンドを実行すると、ターミナルにリンクが表示されます。 ターミナルのリンクをクリックすると、OIDC経由でVaultにサインインしていることを確認するタブがブラウザに開きます:
ターミナルから出力されます:
Success! You are now authenticated. The token information displayed below is already stored in the token helper. You do NOT need to run "vault login" again. Future Vault requests will automatically use this token.
-
OIDCロールの設定を書き込む(ステップ4)で、