Keycloakレルムのユーザー、グループ、ロールの階層モデル
1. ユーザーの管理
ユーザーはKeycloakの中心的なエンティティであり、システムにログインできるユーザーを表します。各ユーザーは特定のレルムに属し、属性、資格情報、ロール、グループ メンバーシップを持つことができます。
1.1 管理コンソールからユーザーを作成する
レルムを選択します (例:
私の会社) レルムセレクターからクリックユーザーサイドバーにある
クリックユーザーを追加する
情報を入力してください:
- ユーザー名:
ジョン・ドゥ(必須) - 電子メール:
[email protected] - ファーストネーム:
ジョン - 苗字:
ドウ - メール認証済み:ON(メール認証済みの場合)
- 有効: の上
- ユーザー名:
クリック作成する
1.2 管理 CLI によるユーザーの作成
# Tạo user cơ bản bin/kcadm.sh create users \ -r my-company \ -s username=john.doe \ -s [email protected] \ -s firstName=John \ -s lastName=Doe \ -s enabled=true \ -s emailVerified=trueLấy user ID vừa tạo
USER_ID=$(bin/kcadm.sh get users -r my-company -q username=john.doe --fields id --format csv --noquotes)
echo "User ID: $USER_ID"
1.3 REST API経由でユーザーを作成する
# Tạo user mới curl -s -X POST \ "http://localhost:8080/admin/realms/my-company/users" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "username": "john.doe", "email": "[email protected]", "firstName": "John", "lastName": "Doe", "enabled": true, "emailVerified": true, "attributes": { "department": ["Engineering"], "employee_id": ["EMP001"] } }'Lấy user ID từ response header Location
Location: http://localhost:8080/admin/realms/my-company/users/{user-id}
2. 資格情報を設定する
2.1 管理コンソールからパスワードを設定する
入力ユーザー→ ユーザーを選択 → タブ資格
クリックパスワードを設定する
新しいパスワードを入力してください
一時的:ON(初回ログイン時にパスワード変更が必要)またはOFF(パスワード固定)
クリック保存
2.2 CLI 経由でパスワードを設定する
# Đặt password cố định bin/kcadm.sh set-password \ -r my-company \ --username john.doe \ --new-password "SecureP@ssw0rd!"Đặt password tạm thời (bắt đổi khi login)
bin/kcadm.sh set-password
-r my-company
--username john.doe
--new-password "TempP@ss123"
--temporary
2.3 REST API経由でパスワードを設定する
# Lấy user ID USER_ID=$(curl -s -X GET \ "http://localhost:8080/admin/realms/my-company/users?username=john.doe" \ -H "Authorization: Bearer $ACCESS_TOKEN" | jq -r '.[0].id')Đặt password
curl -s -X PUT
"http://localhost:8080/admin/realms/my-company/users/$USER_ID/reset-password"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"
-d '{ "type": "password", "value": "SecureP@ssw0rd!", "temporary": false }'
2.4 パスワードポリシー
レルムのパスワード ポリシーを構成します。認証 → ポリシー → パスワードポリシー:
| ポリシー | 説明する | 値の例 |
|---|---|---|
| 最小長さ | 最小長さ | 8 |
| 大文字 | 大文字が必要です | 1 |
| 小文字 | 小文字が必要です | 1 |
| 数字 | リクエスト番号 | 1 |
| 特殊文字 | 特殊文字が必要です | 1 |
| ユーザー名ではありません | パスワードはユーザー名と同じであってはなりません | - |
| 電子メールではありません | パスワードはメールアドレスと一致してはなりません | - |
| パスワード履歴 | 古いパスワードを再利用しないでください | 3 |
| パスワードの有効期限が切れる | パスワードの有効期限 (日) | 90 |
| ハッシュアルゴリズム | アルゴリズムハッシュパスワード | アルゴン2 |
| ハッシュ反復 | ハッシュラウンド数 | 5 (アルゴン2) |
CLI による設定:
bin/kcadm.sh update realms/my-company \
-s 'passwordPolicy="length(8) and upperCase(1) and lowerCase(1) and digits(1) and specialChars(1) and notUsername and passwordHistory(3)"'
3. ユーザープロフィール
ユーザープロフィールは、管理者がユーザー属性のスキーマを定義できる機能で、ユーザーが持つ属性、検証方法、インターフェイス上での表示方法を制御できます。
3.1 ユーザープロファイルの有効化
Keycloak 24以降では、ユーザープロファイルがデフォルトで有効になっています。古いバージョンの場合:
入力レルム設定 → 一般的な
探すユーザープロファイルが有効になっています: の上
有効にしたら、アクセスしますレルム設定 → ユーザープロフィール設定します。
3.2 属性スキーマの定義
各属性には次の構成があります。
名前— 属性名 (小文字、API に使用)
表示名— UI 表示名 (i18n サポート:
${プロフィール.属性.部門})権限— 閲覧/編集できる人 (管理者、ユーザー)
検証— 値の検証ルール
注釈— UI レンダリングのメタデータ
必須— ユーザー、管理者、またはその両方に必要
多値— 複数の値を許可します
3.3 組み込み属性
Keycloak には使用可能な属性があります。
| 属性 | 説明する | デフォルト |
|---|---|---|
| ユーザー名。ユーザー名 | ログイン名 | 必須、固有 |
| 電子メール | 電子メールアドレス | 必須(オフにすることもできます) |
| ファーストネーム | 名前 | 必須 |
| 苗字 | 姓 | 必須 |
3.4 カスタム属性の作成
属性の作成例電話番号:
入力レルム設定 → ユーザープロフィール
クリック属性の作成
構成:
- 名前:
電話番号 - 表示名:
電話番号 - 属性グループ: (選択または新規作成)
- 次の場合に有効になります:いつも
- 必須: ユーザーに必須
- 名前:
3.5 バリデーター
Keycloakは、属性値をチェックするための多くのバリデーターを提供します。
| バリデーター | 説明する | 構成例 |
|---|---|---|
| 長さ。長さ | 長さ制限 | 最小: 3、最大: 50 |
| 電子メール | メール形式を確認する | - |
| パターン。パターン | 正規表現パターンを確認する | ^\\+[0-9]{10,15}$ |
| 整数 | 整数をチェックする | 最小: 0、最大: 999999 |
| ダブル | 実数を確認する | 最小: 0.0、最大: 100.0 |
| ウリ | 有効な URL を確認する | - |
| オプション | リスト内の制限値 | ["vn","us","jp"] |
| 人名禁止文字 | 名前内の特殊文字をブロックする | - |
| ユーザー名の禁止文字 | ユーザー名内の特殊文字をブロックする | - |
| 多値 | 値の数を検証する | 最小: 1、最大: 5 |
属性の設定例電話番号JSON 経由 ([ユーザー プロファイル] タブ → JSON エディター):
{
"attributes": [
{
"name": "phone_number",
"displayName": "Phone Number",
"validations": {
"length": {
"min": 10,
"max": 15
},
"pattern": {
"pattern": "^\\+[0-9]{10,15}$",
"error-message": "Phone number must start with + and contain 10-15 digits"
}
},
"required": {
"roles": ["user"]
},
"permissions": {
"view": ["admin", "user"],
"edit": ["admin", "user"]
},
"annotations": {
"inputType": "tel",
"inputHelperTextBefore": "Enter your phone number with country code (e.g., +84901234567)"
}
}
]
}
3.6 UI レンダリングの注釈
注釈を使用すると、登録/アカウント ページでの属性の表示方法をカスタマイズできます。
| 注釈 | 説明する | 価値 |
|---|---|---|
| 入力タイプ | HTML入力タイプ | テキスト、電子メール、電話番号、番号、日付、選択、複数選択、テキストエリア、html5-* |
| inputHelperTextBefore | 入力の前にヘルパー テキストが表示されます | テキスト文字列 |
| inputHelperTextAfter | 入力後にヘルパーテキストが表示される | テキスト文字列 |
| inputOptionsFromValidation | バリデーターからオプションを取得する | 検証名 (例: 「オプション」) |
3.7 プログレッシブプロファイリング
プログレッシブ プロファイリングを使用すると、登録時にすべての情報を要求するのではなく、段階的にユーザー情報を収集できます。
属性を作成する必須 → ユーザーに必須: の上
ユーザーがログインするときに、属性に値がない場合、Keycloakは入力を求めるフォームを表示します。
と組み合わせる「いつ有効になるか」スコープ— クライアントが特定のスコープを要求する場合にのみ属性が必要です
例: 属性電話番号クライアントがスコープを要求した場合にのみ必要です電話。電話:
{
"name": "phone_number",
"required": {
"roles": ["user"],
"scopes": ["phone"]
}
}
4. グループとサブグループ
グループは、各ユーザーを個別に割り当てるのではなく、ユーザーを整理し、ユーザーのグループに一度にロールと属性を適用するのに役立ちます。
4.1 管理コンソールからグループを作成する
クリックグループサイドバーにある
クリックグループの作成
入力名前:
エンジニアリングクリック作成する
4.2 サブグループの作成
サブグループは、親グループから属性と役割のマッピングを継承します。
グループをクリックします
エンジニアリングクリックサブグループの作成
名前を入力してください:
バックエンド,フロントエンド,DevOps
グループ構造の例:
Engineering/ ├── Backend/ │ ├── Java Team │ └── Go Team ├── Frontend/ │ ├── Web Team │ └── Mobile Team └── DevOps/ ├── SRE └── Platform
Operations/ ├── HR ├── Finance └── Legal
4.3 CLI 経由でグループを作成する
# Tạo top-level group bin/kcadm.sh create groups -r my-company -s name="Engineering"Lấy group ID
GROUP_ID=$(bin/kcadm.sh get groups -r my-company --fields id,name | jq -r '.[] | select(.name=="Engineering") | .id')
Tạo sub-group
bin/kcadm.sh create groups/$GROUP_ID/children -r my-company -s name="Backend" bin/kcadm.sh create groups/$GROUP_ID/children -r my-company -s name="Frontend" bin/kcadm.sh create groups/$GROUP_ID/children -r my-company -s name="DevOps"
4.4 グループ属性
グループにはキーと値の属性を含めることができます。メタデータやグループ構成に役立ちます。
# Thêm attributes cho group
bin/kcadm.sh update groups/$GROUP_ID -r my-company \
-s 'attributes={"cost_center":["CC-ENG-001"],"location":["HCM","HN"]}'
管理コンソール経由: [グループ] → [タブ] をクリックします。属性→ キーと値のペアを追加します。
4.5 ユーザーをグループに追加する
# Qua Admin Console: # Users → chọn user → tab Groups → Join group → chọn groupQua CLI
USER_ID=$(bin/kcadm.sh get users -r my-company -q username=john.doe --fields id --format csv --noquotes) bin/kcadm.sh update users/$USER_ID/groups/$GROUP_ID -r my-company -s realm=my-company -s userId=$USER_ID -s groupId=$GROUP_ID -n
Qua REST API
curl -s -X PUT
"http://localhost:8080/admin/realms/my-company/users/$USER_ID/groups/$GROUP_ID"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"
4.6 デフォルトのグループ
デフォルト グループは、アカウントの作成時または登録時に新しいユーザーを自動的に追加します。
入力グループ
デフォルトとして設定するグループを選択します
あるいは入ってくださいレルム設定 → ユーザー登録 → デフォルトのグループ
# Qua CLI
bin/kcadm.sh update realms/my-company -s 'defaultGroups=["/Engineering/Backend"]'
5. 必要なアクション
必須アクションは、正常にログインできるようになる前にユーザーが実行する必要があるアクションです。
5.1 利用可能な必須アクションのリスト
| アクション | 説明する |
|---|---|
| パスワードを更新する | パスワードの変更が必要です |
| メールの確認 | メール認証 |
| OTPの構成 | OTP(TOTP/HOTP)の設定 |
| プロフィールを更新する | 個人情報を更新する |
| 利用規約 | 利用規約に同意する |
| Web認証の構成 | WebAuthnデバイスの登録 |
| ユーザーロケールの更新 | 言語を選択してください |
| 認証情報の削除 | 古い認証情報を削除する |
5.2 必要なアクションをユーザーに割り当てる
# Qua Admin Console: # Users → chọn user → tab Details → Required user actions → chọn actionsQua CLI
bin/kcadm.sh update users/$USER_ID -r my-company
-s 'requiredActions=["UPDATE_PASSWORD","VERIFY_EMAIL","CONFIGURE_TOTP"]'Qua REST API
curl -s -X PUT
"http://localhost:8080/admin/realms/my-company/users/$USER_ID"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"
-d '{ "requiredActions": ["UPDATE_PASSWORD", "VERIFY_EMAIL"] }'
5.3 デフォルトの必須アクション
すべての新規ユーザーに対してデフォルトで必要なアクションを次の場所で構成します。認証 → 必要なアクション:
列をオンにするデフォルトのアクションとして設定望ましいアクションのために
すべての新規ユーザーにはデフォルトのアクションが自動的に割り当てられます
6. ユーザーの自己登録
6.1 自己登録を有効にする
入力レルム設定 → ログイン
オンにするユーザー登録: の上
ログインページに「登録」リンクが表示されます
6.2 登録用の reCAPTCHA
登録フォームをボットから保護するには、reCAPTCHA を有効にします。
Google reCAPTCHA にサインアップするには、https://www.google.com/recaptcha
入力認証 → フロー → 登録
ステップの検索再キャプチャ→ 無効からに切り替えます必須
歯車アイコンをクリック→入力サイトキーそして秘密鍵Googleから
6.3 登録フォームのカスタマイズ
ユーザー プロファイルを使用すると、登録フォームに表示されるフィールドを制御できます。
属性付きユーザーに必須:フォーム上にONと表示されます
表示順序並べ替え順序ユーザープロファイル設定内
使用属性グループ関連するフィールドをグループ化する
7. なりすまし
偽装を使用すると、管理者は別のユーザーとして「偽装」ログインできるため、デバッグやサポートに役立ちます。
7.1 偽装の使用
入力ユーザー→ なりすます必要があるユーザーを見つけます
ドロップダウンメニュー(ケバブメニュー)をクリック →なりすます
ブラウザは新しいタブを開き、そのユーザー名でログインします。
すべてのアクションはイベント タイプのイベントに記録されます。
なりすます
7.2 REST APIを介した偽装
curl -s -X POST \
"http://localhost:8080/admin/realms/my-company/users/$USER_ID/impersonation" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json"
セキュリティ上の注意:
ユーザーのみが役割を持ちます
なりすまし領域内でレルム管理なりすますことができますすべての偽装イベントがログに記録されます - 監査にとって重要です
運用環境では、権限の偽装をスーパー管理者のみに制限します
8. ユーザーの高度な検索と管理
8.1 ユーザーの検索
# Tìm theo username bin/kcadm.sh get users -r my-company -q username=johnTìm theo email
bin/kcadm.sh get users -r my-company -q email=[email protected]
Tìm theo attribute
bin/kcadm.sh get users -r my-company -q "q=department:Engineering"
Tìm với pagination
bin/kcadm.sh get users -r my-company --offset 0 --limit 20
REST API - tìm với nhiều tiêu chí
curl -s -X GET
"http://localhost:8080/admin/realms/my-company/users?search=john&max=20&first=0"
-H "Authorization: Bearer $ACCESS_TOKEN" | jq '.[].username'
8.2 ユーザーの削除
# Qua CLI bin/kcadm.sh delete users/$USER_ID -r my-companyQua REST API
curl -s -X DELETE
"http://localhost:8080/admin/realms/my-company/users/$USER_ID"
-H "Authorization: Bearer $ACCESS_TOKEN"
8.3 ユーザーを無効にする (削除ではなく)
# Disable user - vẫn giữ data nhưng không cho login
bin/kcadm.sh update users/$USER_ID -r my-company -s enabled=false
8.4 一括操作
CSV から複数のユーザーを作成するスクリプトの例:
#!/bin/bash # bulk-create-users.shREALM="my-company"
while IFS=',' read -r username email firstName lastName department; do bin/kcadm.sh create users -r $REALM
-s username="$username"
-s email="$email"
-s firstName="$firstName"
-s lastName="$lastName"
-s enabled=true
-s emailVerified=true
-s "attributes={"department":["$department"]}"bin/kcadm.sh set-password -r $REALM
--username "$username"
--new-password "Welcome@123"
--temporary
echo "Created user: $username" done < users.csv
9.個人データの管理
Keycloak は、以下を通じて GDPR 準拠をサポートします。アカウントコンソール、ユーザーに次のことを許可します。
個人情報の閲覧— メールアドレス、名前、属性
情報を編集する— ユーザープロファイルの権限に依存します
セッションを見る— アクティブなログインセッション
デバイスの管理— ログインしたデバイスの表示と取り消し
アプリケーションを見る— アクセスが許可されたアプリケーション
アカウントを削除する— 自分でアカウントを削除します (許可されている場合)
アカウントコンソールのURL:
http://localhost:8080/realms/{realm}/account
アカウントの削除を有効にする:
入力認証 → 必要なアクション
アクションを有効にするアカウントの削除
入力レルム設定 → ログイン→オンにするアカウントを削除する
10. 練習問題
ユーザープロファイルの作成レルム用
私の会社カスタム属性を使用:電話番号(必須、国際形式の正規表現バリデータ)部門(必須、オプション: エンジニアリング、人事、財務、マーケティング)従業員ID(管理者のみ編集、パターン: EMP-[0-9]{4})
グループ階層の作成:
- エンジニアリング → バックエンド、フロントエンド、DevOps
- オペレーション → 人事、財務
5人のユーザーを作成するCLI 経由、各ユーザーは異なるグループに属し、一時パスワード
自己登録をオンにするメール認証と登録テストあり
パスワードポリシーを構成する: 最小 10 文字、大文字 1 文字、数字 1 文字、特殊文字 1 文字、履歴 5 文字、有効期限 90 日
11. まとめ
このレッスンでは、次のことを学びました。
作成と管理ユーザー管理コンソール、CLI、REST API 経由
確立する資格そしてパスワードポリシー
使用ユーザープロフィールバリデーターとアノテーションを使用して属性スキーマを定義する
作成するグループそしてサブグループ階層、属性、およびデフォルトのグループを使用して
構成必要なアクションユーザーに必要な
オンにする自己登録reCAPTCHAあり
使用なりすましデバッグ用
管理個人データGDPR準拠のため
次の記事で手順を説明します役割、権限、アクセス制御キークロークで。