GitLab OpenID Connect認証プロバイダとしてVaultを使用します。

VaultはHashiCorpが提供するシークレット管理アプリケーションです。シークレット環境変数、暗号化キー、認証トークンなどの機密情報を保存・管理することができます。

VaultはIdentity-based Accessを提供しており、Vaultユーザーは複数の好みのクラウドプロバイダーを通して認証することができます。

以下のコンテンツでは、VaultユーザーがGitLabを通じてOpenID認証機能を使って認証する方法を説明します。

前提条件

  1. Vaultをインストールします。
  2. Vaultを実行します。

GitLab から OpenID Connect のクライアント ID とシークレットを取得します。

まず GitLab アプリケーションを作成して、Vault で認証するためのアプリケーション ID とシークレットを取得します。これを行うには、GitLabにサインインして以下の手順に従います:

  1. 左のサイドバーで、自分のアバターを選択してください。
  2. プロフィールの編集を選択します。
  3. 左サイドバーで「アプリケーション」を選択します。
  4. アプリケーション名とリダイレクトURI.
  5. OpenIDスコープを選択します。
  6. Save applicationを選択します。
  7. クライアントIDとクライアントシークレットをコピーするか、参照用にページを開いておきます。

GitLab OAuth provider

VaultでOpenID Connectを有効化

Vault では、OpenID Connect(OIDC) はデフォルトでは有効になっていません。

Vault で OIDC 認証プロバイダを有効にするには、ターミナル・セッションを開き、以下のコマンドを実行します:

vault auth enable oidc

ターミナルに以下の出力が表示されるはずです:

Success! Enabled oidc auth method at: oidc/

OIDC設定の書き込み

GitLabが生成したアプリケーションIDとシークレットをVaultに渡し、VaultがGitLabを通して認証できるようにするには、ターミナルで以下のコマンドを実行します:

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"

<your_application_id><your_secret> を、アプリ用に生成したアプリケーション ID とシークレットに置き換えます。

ターミナルに以下の出力が表示されるはずです:

Success! Data written to: auth/oidc/config

OIDCロール設定の書き込み

Vaultに リダイレクトURIとスコープを GitLab に伝えなければなりません。

ターミナルで以下のコマンドを実行します:

vault write auth/oidc/role/demo - <<EOF
{
   "user_claim": "sub",
   "allowed_redirect_uris": "<your_vault_instance_redirect_uris>",
   "bound_audiences": "<your_application_id>",
   "oidc_scopes": "<openid>",
   "role_type": "oidc",
   "policies": "demo",
   "ttl": "1h",
   "bound_claims": { "groups": ["<yourGroup/yourSubgrup>"] }
}
EOF

Replace:

  • <your_vault_instance_redirect_uris> を、Vaultインスタンスが実行されている場所に一致するリダイレクトURIに置き換えてください。
  • <your_application_id> を、アプリ用に生成されたアプリケーションIDで指定します。

oidc_scopes フィールドにはopenid を含める必要があります。

この設定は作成するロールの名前で保存されます。この例では、demo ロールを作成します。

caution
GitLab.com のような GitLab 公開インスタンスを使う場合は、bound_claims を指定してグループやプロジェクトのメンバーだけにアクセスを許可する必要があります。そうしないと、公開アカウントを持っている人なら誰でも Vault インスタンスにアクセスできてしまいます。

Vaultにサインイン

  1. Vault UIにアクセスします。例:http://127.0.0.1:8200/ui/vault/auth?with=oidc。
  2. OIDC メソッドが選択されていない場合は、ドロップダウンリストを開いて選択します。
  3. Sign in With GitLab を選択すると、モーダルウィンドウが開きます:

    Sign into Vault with GitLab

  4. GitLab 経由でのサインインを Vault に許可するには、Authorize を選択します。これで、認証済みユーザーとして Vault UI にリダイレクトされます。

    Authorize Vault to connect with GitLab

Vault CLI を使ってサインイン(オプション)

VaultCLI を使用して Vault にサインインすることもできます。

  1. 前の例で作成したロール設定でサインインするには、ターミナルで以下のコマンドを実行します:

    vault login -method=oidc port=8250 role=demo
    

    このコマンドは

    • role=demo Vaultがどの設定でサインインしたいかを知ることができます。
    • -method=oidc で、Vault がOIDC のサインイン方法を使うように設定します。
    • port=8250 GitLab がリダイレクトするポートを設定します。このポート番号は、Redirect URIをリストアップする際にGitLabに与えられたポートと一致する必要があります。

    このコマンドを実行すると、ターミナルにリンクが表示されます。

  2. このリンクをウェブブラウザで開いてください:

    Signed into Vault via OIDC

    ターミナルが表示されます:

    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.