3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HashiCorp VaultでOIDC認証プロバイダーとしてIBM Verifyを利用する

Last updated at Posted at 2025-10-26

はじめに

生成AIのMVPアプリを作るなら、セキュリティも最初からちゃんと考えておきたいところ。ログイン認証にはIBM Verifyを使って、LLMのクラウドAPIキーとかシークレット情報はHashiCorp Vaultでしっかり管理。これだけでも安心して開発を進められる土台ができます。

そこでシークレット管理としてHashiCorp Vaultを利用する時、ログイン認証のMethodにOIDCが選べることに気が付きます。「そうだ IBM Cloud でログイン認証に使ってる IBMid をここで使えたら便利」と思いませんか?

Screenshot 2025-10-26 012107.png

HashiCorp Vault とは

Vaultは APIキーやAPIシークレット、管理権限のユーザーIDやパスワードといったシークレットを暗号化し、アクセスを制御することで、シークレット管理機能を提供します。Vaultを使用するとポリシーを適用して、シークレット、証明書、キー、データを保護します。

IBM Verify とは

IBM VerifyはいわゆるIAM ソリューションでID管理とアクセス管理、特権アカウントの制御のための機能を提供します。OktaAuth0のようなIAMサービスであり Azure Active Directory (Azure AD) のようなIDプラットフォーム的な使い方もできます。

今回は、その中でもDirectory機能として独自Directory ProviderとIBM Cloudにログインする時に使う IBMid を用いて認証を行えることに着目しました。

Screenshot 2025-10-22 215110.png

ここで試せること

IBM VerifyをOIDC IDプロバイダーとして、HashiCorp Vaultに設定します。

VaultでAdminとReaderの2つのグループを作成し、IBM Verifyのdepartment属性にマッピングすることでアクセスを分離します。同様の設定は、Verifyでユーザーをグループに追加し、Vaultでグループ名をマッピングすることでも実現できます。

ここではIBM Verifyを使ってますが、もちろんOIDC認証をサポートする他のIAMプラットフォームもVaultは対応しています(むしろそっちの記事の方が多い)

前提条件

設定手順

ステップ1: IBM Verify に HashiCorp Vault アプリケーションを追加

Screenshot 2025-10-25 151832.png

  1. Verify 管理コンソールで、Application に移動し、Add application を選択
  2. Hashicorp Vault を検索してアプリケーションを追加
  3. アプリケーションページで Sign-on タブを選択、次の3か所入力します
  4. Application URL に Vault インスタンスの URL を入力 (VAULT_ADDR 例えば https://your-vault-hostname.hashicorp.cloud:8200)
  5. Redirect URIs に以下のエントリを追加:
    • VAULT_ADDR/ui/vault/auth/oidc/oidc/callback (VAULT_ADDR は Vault インスタンスの URL)
    • http://localhost:8250/oidc/callback (Vault CLI 用)
  6. 下にスクロールして Attribute mappings セクションで、Attribute namegroupAttribute sourcedepartment に更新
  7. Save をクリックした後、もう一度この画面に戻って、Entitlement タブで Automatic access for all users and groups を選択
  8. Save をクリック
  9. Vault側の設定で使用するため、Sign-on タブから Client IDClient secret の値をコピーしておく
    File.jpg

ステップ2: Vault側のOIDC設定

OIDCプロトコルは標準化されているので、各プロバイダーで必要なのは基本的に Client ID, Client Secret, Discovery URL のみです。

  1. Vault CLI に接続

  2. OIDC 認証メソッドを有効化:

vault auth enable oidc

IBM Verify の接続情報を追加し、デフォルトロールを設定:

Bash / Linux / macOS:

vault write auth/oidc/config \
  oidc_discovery_url="<Verify_Tenant>/oidc/endpoint/default" \
  oidc_client_id="Verify_Client_ID" \
  oidc_client_secret="Verify_Client_Secret" \
  default_role="verify"

PowerShell / Windows:

vault write auth/oidc/config `
  oidc_discovery_url="<Verify_Tenant>/oidc/endpoint/default" `
  oidc_client_id="Verify_Client_ID" `
  oidc_client_secret="Verify_Client_Secret" `
  default_role="verify"

注: Discovery URL は、OIDC ProviderのURLで、ここから .well-known/openid-configuration を取得できます。例えば https://<your-hostname>.verify.ibm.com/oidc/endpoint/default と記述します

デフォルトロール verify を作成:

Bash / Linux / macOS:

vault write auth/oidc/role/verify \
  bound_audiences="Verify_Client_ID" \
  allowed_redirect_uris="<VaultAddress>/ui/vault/auth/oidc/oidc/callback" \
  allowed_redirect_uris="http://localhost:8250/oidc/callback" \
  user_claim="sub" \
  groups_claim="group" \
  token_policies="default"

PowerShell / Windows:

vault write auth/oidc/role/verify `
  bound_audiences="Verify_Client_ID" `
  allowed_redirect_uris="<VaultAddress>/ui/vault/auth/oidc/oidc/callback" `
  allowed_redirect_uris="http://localhost:8250/oidc/callback" `
  user_claim="sub" `
  groups_claim="group" `
  token_policies="default"

Admin と Reader のポリシーを作成:

Bash / Linux / macOS:

# Admin ポリシー: Vault のすべての権限を付与
cat > admin.hcl <<EOF
path "*" {
  capabilities = ["sudo","read","create","update","delete","list","patch"]
}
EOF
vault policy write admin admin.hcl

# Reader ポリシー: "kv/" パス配下のシークレットの一覧表示と読み取りを許可
cat > reader.hcl <<EOF
path "kv/*" {
  capabilities = ["read", "list"]
}
EOF
vault policy write reader reader.hcl

PowerShell / Windows:

# Admin ポリシー: Vault のすべての権限を付与
@"
path "*" {
  capabilities = ["sudo","read","create","update","delete","list","patch"]
}
"@ | Out-File -FilePath admin.hcl -Encoding utf8
vault policy write admin admin.hcl

# Reader ポリシー: "kv/" パス配下のシークレットの一覧表示と読み取りを許可
@"
path "kv/*" {
  capabilities = ["read", "list"]
}
"@ | Out-File -FilePath reader.hcl -Encoding utf8
vault policy write reader reader.hcl

外部グループ Verify-AdminsVerify-Readers を作成:

Bash / Linux / macOS:

vault write -format=json identity/group name="Verify-Admins" \
  policies="admin" \
  type="external" | jq -r ".data.id" > admin_group_id.txt

vault write -format=json identity/group name="Verify-Readers" \
  policies="reader" \
  type="external" | jq -r ".data.id" > reader_group_id.txt

PowerShell / Windows:

vault write -format=json identity/group name="Verify-Admins" `
  policies="admin" `
  type="external" | ConvertFrom-Json | Select-Object -ExpandProperty data | Select-Object -ExpandProperty id | Out-File -FilePath admin_group_id.txt -Encoding utf8 -NoNewline

vault write -format=json identity/group name="Verify-Readers" `
  policies="reader" `
  type="external" | ConvertFrom-Json | Select-Object -ExpandProperty data | Select-Object -ExpandProperty id | Out-File -FilePath reader_group_id.txt -Encoding utf8 -NoNewline

注: これらのグループ名は、Verify の属性値やグループ名と一致しなくても大丈夫。

Verify の department 属性値またはグループ名と一致するグループエイリアスを作成:

Bash / Linux / macOS:

vault auth list -format=json | jq -r '.["oidc/"].accessor' > accessor.txt

vault write identity/group-alias name="Admin" \
  mount_accessor=$(cat accessor.txt) \
  canonical_id="$(cat admin_group_id.txt)"

vault write identity/group-alias name="Reader" \
  mount_accessor=$(cat accessor.txt) \
  canonical_id="$(cat reader_group_id.txt)"

PowerShell / Windows:

vault auth list -format=json | ConvertFrom-Json | Select-Object -ExpandProperty 'oidc/' | Select-Object -ExpandProperty accessor | Out-File -FilePath accessor.txt -Encoding utf8 -NoNewline

$accessor = Get-Content -Path accessor.txt -Raw
$adminGroupId = Get-Content -Path admin_group_id.txt -Raw
$readerGroupId = Get-Content -Path reader_group_id.txt -Raw

vault write identity/group-alias name="Admin" `
  mount_accessor=$accessor `
  canonical_id=$adminGroupId

vault write identity/group-alias name="Reader" `
  mount_accessor=$accessor `
  canonical_id=$readerGroupId

ステップ3: 接続テスト

方法1: ブラウザ経由

  • Vault コンソールにブラウザで接続し、OIDCを選択。うまく動いてるとIBM Verify別ウィンドウが開きます。IBMidを使ってログインする時は、左下に控えめにあるリンク Sign in with IBMid をクリックして認証します。

Screenshot 2025-10-26 013021.png

方法2: CLI 経由

vault login -method=oidc

まとめ

もともとHashiCorp VaultはOIDC認証をサポートするIAMプラットフォームと親和性が高いですが、この記事ではIBM VerifyをOIDC ProviderとしてHashiCorp Vaultと接続することができました。

参考リンク

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?