はじめに

HCP Vault では監査情報として Audit ログを出力することができます。だだしデフォルトだと OIDC 認証でログインした際の Audit ログにはログイン ID 等個人を特定できる情報が含まれません。そのため、Vault 監査ログからのユーザー追従しやすくするために OIDC プロバイダーから提供されるクレーム情報を metadata として付与します。

前提

Azure AD との OIDC 連携を例に記載します。
なお、基本的な Azure AD との OIDC 連携方法については省略しますので、下記ドキュメントを参考に設定してください。

設定

OIDC プロバイダーから発行される ID トークンにユーザー属性情報をクレーム(claim)として含むことができます。このクレーム情報を Vault の Entity Alias の metadata として付与します。設定は OIDC 用の role に対して行います。
metadata 付与に必要な設定項目は下記となります。

項目 説明
oidc_scopes OIDC ロールで利用する OIDC スコープのリスト
claim_mappings metadata に設定するクレームのマップ

今回はスコープにクレームグループを指定し、下記クレームを metadata として付与します。

クレームグループ クレーム名
profile name(ユーザー名), preferred_username(任意のユーザー名)
email email(E メールアドレス)

その他のユーザー情報についてもクレームから取得可能です。
詳細は下記ドキュメントや、OIDC プロバイダーのドキュメントから確認してください。

OIDC 用 role 作成

role に oidc_scopes と claim_mappings 設定します。

vault write auth/oidc/role/your_default_role -<<EOF
{
  "allowed_redirect_uris": [
    "http://localhost:8250/oidc/callback",
    "https://online_version_hostname:port_number/ui/vault/auth/oidc/oidc/callback"
  ],
  "bound_audiences": [
    "abc123"
  ],
  "claim_mappings": {
    "email": "email",
    "name": "name",
    "preferred_username": "preferred_username"
  },
  "groups_claim": "groups",
  "oidc_scopes": [
    "https://graph.microsoft.com/.default",
    "profile",
    "email"
  ],
  "role_type": "oidc",
  "token_policies": [
    "default"
  ],
  "token_type": "default",
  "user_claim": "sub"
}
EOF
Success! Data written to: auth/oidc/role/your_default_role

※ oidc_scopes: https://graph.microsoft.com/.default は Azure AD 連携用の設定となります

作成した role は下記コマンドで確認できます。

vault read auth/oidc/role/your_default_role
Key                        Value
---                        -----
allowed_redirect_uris      [http://localhost:8250/oidc/callback https://online_version_hostname:port_number/ui/vault/auth/oidc/oidc/callback]
bound_audiences            [abc123]
bound_claims               <nil>
bound_claims_type          string
bound_subject              n/a
claim_mappings             map[email:email name:name preferred_username:preferred_username]
clock_skew_leeway          0
expiration_leeway          0
groups_claim               groups
max_age                    0
not_before_leeway          0
oidc_scopes                [https://graph.microsoft.com/.default profile email]
role_type                  oidc
token_bound_cidrs          []
token_explicit_max_ttl     0s
token_max_ttl              0s
token_no_default_policy    false
token_num_uses             0
token_period               0s
token_policies             [default]
token_ttl                  0s
token_type                 default
user_claim                 sub
user_claim_json_pointer    false
verbose_oidc_logging       false

確認

設定後にログインすると Entity Alias の metadata に claim_mappings で設定したデータが追加されています。
Entity ではなく Entity Alias の metadata となりますので注意してください。

% vault list identity/entity-alias/id
Keys
----
********-****-****-****-***********a
********-****-****-****-***********b
********-****-****-****-***********c

% vault read identity/entity-alias/id/********-****-****-****-***********c
Key                          Value
---                          -----
canonical_id                 ********-****-****-****-************
creation_time                2024-11-27T08:52:20.116834686Z
custom_metadata              <nil>
id                           ********-****-****-****-***********c
last_update_time             2024-11-27T09:26:35.007429791Z
local                        false
merged_from_canonical_ids    <nil>
metadata                     map[email:audittest@example.com name:auth test preferred_username:audittest@example.com role:your_default_role]
mount_accessor               *****
mount_path                   auth/oidc/
mount_type                   oidc
name                         *****
namespace_id                 *****

監査ログについても下記の通り metadata にユーザー情報が追加されています。

{
    "auth": {
        "accessor": "*****",
        "client_token": "*****",
        "display_name": "*****",
        "entity_id": "*****",
        "identity_policies": [
            "*****"
        ],
        "metadata": {
            "email": "auidittest@example.com",
            "name": "auth test",
            "preferred_username": "audittest@example.com",
            "role": "your_default_role"
        },
:
}