Vault の認証は auth メソッド単位ですが、認可は最終的に Identity の Entity/Group に集約されます。特に Groups はポリシーの付与点として中心的で、内部グループと外部グループの正しい使い分けが運用の安定性を左右します。
本稿は公式ドキュメントに基づき、内部グループ (type=internal) と外部グループ (type=external) の差分、group-alias を使った外部IdPグループの取り込み、評価フローと落とし穴を、資格対策の観点も交えて整理します。
Vault Identity は、認証メソッドごとのログイン情報を Entity (人やアプリの実体) に束ね、Aliases で結びつけます。アクセス許可は、Entity と Groups に付与されたポリシーの合算で決まります。
Groups には内部グループ (type=internal) と外部グループ (type=external) の2種があります。内部グループはVault内でメンバー管理する通常のグループ、外部グループはIdP等の外部グループをVaultに対応付ける読み取り主体のグループです。外部グループは group-alias により、外部のグループ名と auth メソッドの mount_accessor を Vault グループにマッピングします。
主な API/CLI パス(抜粋)
identity/group # グループの作成/更新/参照
identity/group/id/<id> # グループIDでの参照
identity/group-alias # グループエイリアスの作成
identity/group-alias/id/<id> # グループエイリアスの参照
identity/entity # エンティティの作成/参照
内部と外部の最大の違いはメンバー管理の所在です。内部はVaultで直接メンバーを保持、外部はIdP等の外部情報を group-alias によって解決します。どちらのグループにもポリシーを付与でき、評価時にはポリシーの合算がトークンに反映されます。
既存のIdPグループをそのまま使いたい場合は外部グループを作成し group-alias を張る、Vault内で細かいサブセットを作りたい場合は内部グループを使って入れ子化する、というのが基本的な選び方です。
| 属性 | 内部グループ (type=internal) | 外部グループ (type=external) | 注意点 |
|---|---|---|---|
| 生成 | identity/group に type=internal | identity/group に type=external | どちらも policies, metadata を設定可能 |
| メンバー管理 | member_entity_ids, member_group_ids を直接管理 | 直接管理しない(group-alias と IdP 側に依存) | 外部は人手でメンバー追加しない |
| ネスト | 子として内部/外部グループを含められる | 自身に子を直接持たせる運用は推奨しない/不可(実質読み取り) | 入れ子を組む場合は親を内部にするのが扱いやすい |
| 変更権限 | Vault 管理者が自由に更新 | エイリアスとポリシーは更新可、メンバーは不可 | IdP 側のグループ名変更は alias 側で対応が必要 |
| 主用途 | Vault 内での編成、細粒度のサブセット化 | IdP のグループをVaultに反映して一元管理 | OIDC/LDAP/GitHub等の外部グループ取り込み |
| 評価タイミング | 常時有効(設定即時反映) | ログイン時に alias 解決・クレーム反映 | 再ログインで最新のIdPグループが反映される |
作成コマンドの最小例
# 内部グループ
vault write identity/group name=app-dev type=internal policies=kv-read
# 外部グループ(IdPの engineers を取り込む土台)
vault write identity/group name=oidc-engineers type=external policies=kv-read
実務では、まずグループ本体を作成し(内部または外部)、必要なポリシーを付与します。外部グループの場合は、auth メソッドの mount_accessor を取得し、IdP側のグループ名と Vault グループID(canonical_id)を用いて group-alias を作成します。
内部グループには必要に応じて Entity や子グループを直接追加できます。外部グループはメンバーを直接持たず、ログイン時に group-alias と IdP のクレームから所属が解決されます。
内部/外部グループと group-alias の具体例
# 1) 内部グループを作成しポリシー付与
vault write identity/group \
name=app-dev \
type=internal \
policies=kv-read,transit-sign
# 2) 既存の Entity を内部グループへ追加(例: entity_id=1111-2222-3333)
vault write identity/group/id/<GROUP_ID_OF_app-dev> \
member_entity_ids=1111-2222-3333
# 3) 外部グループを作成(ポリシーはここに付与)
vault write identity/group \
name=oidc-engineers \
type=external \
policies=kv-read
# 4) mount_accessor を取得(OIDC を例示)
vault auth list -format=json | jq -r '."oidc/".accessor'
# 出力例: auth_oidc_AbCdEf
# 5) group-alias を作成(IdP 側のグループ名 engineers を Vault グループへ結合)
vault write identity/group-alias \
name=engineers \
mount_accessor=auth_oidc_AbCdEf \
canonical_id=<GROUP_ID_OF_oidc-engineers>
# 6) HTTP API での alias 作成例(同等の操作)
curl -sS --header "X-Vault-Token: $VAULT_TOKEN" \
--request POST \
--data '{"name":"engineers","mount_accessor":"auth_oidc_AbCdEf","canonical_id":"<GROUP_ID>"}' \
$VAULT_ADDR/v1/identity/group-alias
ユーザーが OIDC/LDAP/GitHub などでログインすると、Vault は Entity を解決し、関連する Entity のポリシーと、所属するグループ(内部・外部・入れ子を含む)に付与されたポリシーを合算してトークンに反映します。
外部グループの所属は group-alias と auth メソッドのクレーム(例: OIDC の groups クレーム)により決まり、ログイン毎に最新の所属が解決されます。内部グループは Vault 内設定に基づき常時有効です。
有効ポリシーの確認
# 現在のトークンに付与されたポリシー
vault token lookup | jq -r .data.policies[]
# Entity とグループの突き合わせ(Entity ID が分かっている場合)
vault read identity/entity/id/<ENTITY_ID> | sed -n '1,200p'
# 自身のパスに対する権限確認
vault write sys/capabilities-self path=secret/data/app
外部グループはメンバーを直接編集しないのが鉄則です。所属はIdP側のグループ管理で行い、Vault では group-alias とポリシー付与に専念します。入れ子構成が必要なら、親は内部グループにして外部グループを子として取り込みます。
auth メソッドの再有効化やマウント変更で mount_accessor が変わると、既存の group-alias が一致しなくなります。移行時は新 accessor を参照する alias を追加・切替する計画を立ててください。
メンテ系コマンド例
# 既存グループの一覧/参照
vault list identity/group/id
vault read identity/group/id/<GROUP_ID>
# グループのポリシー更新
vault write identity/group/id/<GROUP_ID> policies=kv-read,sys-audit
# グループエイリアスの一覧/参照
vault list identity/group-alias/id
vault read identity/group-alias/id/<ALIAS_ID>
ログインしても外部グループ由来の権限が付与されない場合、まず group-alias の name と mount_accessor が正しいか、IdP 側のクレームに期待するグループ名が含まれているかを確認します。OIDC なら role の groups_claim 設定が鍵です。
auth メソッドの再作成・パス変更で accessor が変わると、既存の group-alias は一致しなくなります。新 accessor で alias を再作成するか更新してください。移行期間中は一時的に旧新両方の alias を並行させることで影響軽減が可能です。
LDAP ではサーバ設定や検索フィルタにより、取得できるグループ名やネスト解決が異なります。まず ldap/ 配下の設定と実際のクエリ結果を突き合わせ、Vault に届いているグループ名が alias の name と一致しているかを検証します。
確認チェックコマンド
# auth メソッドと accessor の確認
vault auth list
vault auth list -format=json | jq
# group-alias の詳細(name, mount_accessor, canonical_id を確認)
vault read identity/group-alias/id/<ALIAS_ID>
# OIDC ロールのグループクレーム設定の確認
vault read auth/oidc/role/<ROLE_NAME>
Associate
問題 1
外部IdPのグループ engineers を Vault の権限付与に利用したい。正しい手順はどれか。
正解: A
外部グループは group-alias(name と mount_accessor と canonical_id)で外部名を Vault グループへ対応付け、グループ自体にポリシーを付与して用います。外部グループへ member_entity_ids を直接追加することは想定されていません。entity-alias は Entity と auth の結合であり、グループ名の取り込みには group-alias が必要です。auth 個別マッピングのみでは複数メソッドをまたぐ一元管理ができません。
外部グループにもポリシーを付与できますか?
はい。内部・外部どちらのグループにも policies を設定できます。外部グループはメンバー管理をIdP側に委ねますが、Vault 内での許可はグループの policies により決まります。
IdP 側でグループ名が変更されたら、Vault 側はどう対応しますか?
既存の group-alias の name を新しいグループ名に合わせて更新するか、新しい alias を作成します。mount_accessor は auth メソッドに固有なので、メソッドの再作成やパス変更で accessor が変わった場合も alias の更新が必要です。
group-alias と entity-alias の違いは何ですか?
entity-alias は auth メソッド固有のユーザー識別子を Entity に結び、同一人物の複数ログインを統合する仕組みです。group-alias は外部IdPのグループ名(と mount_accessor)を Vault の Group に結び、外部グループ所属を Vault に取り込むための仕組みです。目的と対象が異なります。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token
HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...
Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる
HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...
Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く
HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...
Vault Tokens の基礎: 認証の起点となる概念
HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...
Vault のトークン種類を正しく使い分ける: service / batch 実践
HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...