11.3. 詳細にわたる管理者権限
Fine Grain Admin Permissions はテクノロジープレビュー機能ですが、完全にサポートされていません。この機能はデフォルトで無効になっています。
-Dkeycloak.profile=preview
または -Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
を使用してサーバーを起動します。詳細は、Profiles を参照してください。
manage-realm
、manage-users
などのロールは粒度が荒すぎて、より詳細なパーミッションを持つ制限された admin アカウントの作成が必要になることがあります。Red Hat Single Sign-On を使用すると、レルム管理に制限付きアクセスポリシーを定義して割り当てることができます。以下に例を示します。
- 特定のクライアントの管理
- 特定グループに所属するユーザーの管理
- グループのメンバーシップの管理
- 制限されたユーザー管理。
- 粒度の細かい偽装制御
- ユーザーの特定の制限付きロールセットを割り当てることができる。
- 特定の制限付きロールセットを複合ロールに割り当てることができます。
- 特定の制限付きロールのセットをクライアントのスコープに割り当てることができます。
- ユーザー、グループ、ロール、およびクライアントを表示および管理するための新しい一般的なポリシー。
詳細にわたる管理者権限で注目すべき重要な点があります。
- 粒度の細かい管理権限は、認可サービス に実装されました。細分のパーミッションに分割する前に、この機能に対して読むことを強く推奨します。
- きめ細かな権限は、専用の管理コンソール と、それらのレルム内で定義された管理者内でのみ使用できます。レルム間の細かいグラザブルパーミッションを定義することはできません。
- 追加のパーミッションを付与するのに細かいパーミッションを使用します。ビルトインの admin ロールのデフォルト動作を上書きすることはできません。
11.3.1. 特定のクライアントの管理
最初に、管理者がクライアントを 1 つ、クライアントを 1 つだけ管理できるようにします。この例では、test
という名前のレルムと、sales-application
というクライアントがあります。レルム test
では、そのレルムのパーミッションで、そのアプリケーションを管理する権限をユーザーに付与します。
レルムの細かいアクセス権限をまたがって実行できません。master
レルムの管理者は、以前の章で定義された事前定義済みの admin ロールに制限されます。
11.3.1.1. パーミッションのセットアップ
最初に管理コンソールにログインし、そのクライアントのパーミッションを設定できます。きめ細かなパーミッションを定義するクライアントの管理セクションに移動します。
クライアント管理
Permissions
というタブメニュー項目が表示されるはずです。そのタブをクリックします。
クライアントパーミッションタブ
デフォルトでは、各クライアントは細かいパーミッションを実行することはできません。したがって、Permissions Enabled
をオンにしてパーミッションを初期化します。
Permissions Enabled
スイッチをオフに設定すると、このクライアントに定義したすべてのパーミッションが削除されます。
クライアントパーミッションタブ
Permissions Enabled
を on に切り替えると、認可サービス を使用して、背後でさまざまなパーミッションオブジェクトを初期化します。この例では、クライアントの 管理
パーミッションが対象になります。クライアントの manage
パーミッションを処理するパーミッションにリダイレクトするものをクリックします。すべての認可オブジェクトは、realm-management
クライアントの Authorization
タブに含まれます。
クライアントパーミッションの管理
最初に初期化された場合、manage
パーミッションには関連付けられたポリシーがありません。policy タブに移動して作成する必要があります。高速に進むには、上記のイメージに表示される Authorization
リンクをクリックします。次に、policies タブをクリックします。
このページに、Create policy
というプルダウンメニューがあります。設定可能なさまざまなポリシーがあります。ロールまたはグループに関連付けられたポリシーを定義したり、JavaScript でルールを定義したりできます。この簡単な例では、User Policy
を作成します。
ユーザーポリシー
このポリシーは、ユーザーデータベースのハードコーディングされたユーザーと一致します。この場合、これは sales-admin
ユーザーです。次に、sales-application
クライアントの manage
パーミッションページに戻り、ポリシーをパーミッションオブジェクトに割り当てる必要があります。
ユーザーグループの割り当て
sales-admin
ユーザーには、sales-application
クライアントを管理するパーミッションが使用できるようになりました。
さらに 1 つのことが必要です。Role Mappings
タブに移動し、query-clients
ロールを sales-admin
に割り当てます。
query-clients の割り当て
これを行う必要があるのはなぜですか ?このロールは、sales-admin
が管理コンソールにアクセスする際にレンダリングするメニュー項目を管理コンソールに指示します。query-clients
ロールは、sales-admin
ユーザーのクライアントメニューをレンダリングするよう管理コンソールに指示します。
IMPORTANT query-clients
ロールを設定しない場合、sales-admin
などの制限された管理者が管理コンソールにログインするときにメニューオプションは表示されません。
11.3.1.2. テスト
次に、master レルムからログアウトし、ユーザー名として sales-admin
を使用して、test
レルム 専用の管理コンソール に再ログインします。これは /auth/admin/test/console
にあります。
営業管理者ログイン
これで、この admin がこのクライアントを 1 つ管理できるようになりました。
11.3.2. ユーザーロールのマッピングの制限
もう 1 つは、管理者がユーザーに割り当て可能なロールセットを制限することです。最後のサンプルを続行して、'sales-admin' ユーザーのパーミッションセットを拡張して、このアプリケーションにアクセスできるユーザーも制御できるようにします。きめ細かいパーミッションを使用することで、sales-admin
が sales-application
への特定のアクセス権限を付与するロールのみを割り当てることができます。また、管理者はロールのみをマッピングでき、他のタイプのユーザー管理を実行しないように制限することもできます。
sales-application
が 3 つの異なるクライアントロールを定義しました。
セールスアプリケーションロール
sales-admin
ユーザーがこれらのロールをシステムの任意のユーザーにマッピングできるようにします。これを実行する最初のステップでは、ロールが admin でマップされるようにします。viewLeads
ロールをクリックすると、このロールの Permissions
タブがあることを確認できます。
Leads ロールのパーミッションタブの表示
そのタブをクリックし、Permissions Enabled
を on にすると、ポリシーを適用することのできる多数のアクションが表示されます。
Leads パーミッションの表示
関心のあるのは map-role
です。このパーミッションをクリックし、上記の例で作成されたのと同じ User Policy を追加します。
map-roles パーミッション
行った内容は、sales-admin
が viewLeads
ロールをマッピングできることを示しています。何も指定していないユーザーは、管理者がこのロールをマップできるユーザーで指定します。このレルムの管理コンソールの Users
セクションに移動する必要があります。左側のメニュー項目 Users
をクリックすると、レルムのユーザーインターフェイスが表示されます。Permissions
タブが表示されるはずです。それをクリックして有効にします。
ユーザーパーミッション
対象のパーミッションは map-roles
です。これは、管理者のみがロールをユーザーにマッピングできるようにする制限ポリシーです。map-roles
パーミッションをクリックし、作成したユーザーポリシーを再度追加すると、sales-admin
はロールをどのユーザーにもマッピングできます。
最後に、view-users
ロールを sales-admin
に追加します。これにより、管理者は、sales-application
ロールを追加するレルム内のユーザーを表示できます。
view-users の追加
11.3.2.1. テスト
次に、master レルムからログアウトし、ユーザー名として sales-admin
を使用して、test
レルム 専用の管理コンソール に再ログインします。これは /auth/admin/test/console
にあります。
これで、sess-admin
がシステムにユーザーを表示できるようになります。ユーザーの 1 つを選択すると、各ユーザー詳細ページが読み取り専用であることが表示されます (Role Mappings
タブを除く)。これらのタブに移動すると、sales-application
ロールを参照する場合を除き、管理者がユーザーにマップするのに Available
となっているロールがないことが確認できます。
viewLeads の追加
sales-admin
が viewLeads
ロールをマッピングすることのみを指定しました。
11.3.2.2. クライアントごとの map-roles ショートカット
sales-application
を公開するすべてのクライアントロールに対してこれを行う必要がある場合や、より容易になってしまうと、管理者がクライアントで定義されているすべてのロールをマップできるように指定する方法があります。マスターレルム admin に管理コンソールにログインし、sales-application
パーミッションページに戻ると、map-roles
パーミッションが表示されます。
クライアント map-roles パーミッション
この特別なパーミッションへのアクセスを管理者に付与すると、この管理者はクライアントで定義されるロールをマップできます。
11.3.3. パーミッションの完全リスト
特定のクライアントやクライアントの特定のロールの管理以外に、より詳細なパーミッションを設定することが可能です。本章では、レルムに設定できるパーミッションタイプ全体を定義します。
11.3.3.1. ロール
特定のロールの Permissions
タブに移動すると、これらのパーミッションタイプが表示されます。
- map-role
- 管理者がこのロールをユーザーにマッピングできるかどうかを決定するポリシー。これらのポリシーは、管理者がユーザーロールマッピングタスクを実行することが許可されているわけではなく、ロールをユーザーにマッピングできることのみを指定します。また、管理者は管理またはロールのマッピングパーミッションを持っている必要があります。詳細については、ユーザー権限 を参照してください。
- map-role-composite
-
管理者がこのロールを複合としてマッピングできるかどうかを決定するポリシー。管理者は、そのクライアントのパーミッションを管理する必要があるにも拘らず、ロールの
map-role-composite
権限がない場合は、クライアントのロールを定義できます。 - map-role-client-scope
- 管理者がこのロールをクライアントの範囲に適用するかどうかを決定するポリシー。管理者がクライアントを管理できる場合でも、この特権が付与されない限り、このロールを含むクライアントのトークンを作成するパーミッションがありません。
11.3.3.2. クライアント
特定のクライアントの パーミッション
タブに移動すると、これらのパーミッションタイプが表示されます。
- view
- 管理者がクライアントの設定を表示できるかどうかを決定するポリシー。
- manage
- 管理者がクライアントの設定を表示および管理するかどうかを判断するポリシー。この場合、意図せずに、特権がリークする可能性があるという問題があります。たとえば、管理者がロールをクライアントのスコープにマップする権限を持たない場合でも、管理者はロールをハードコーディングするプロトコルマッパーを定義できます。これは、現状に個別のパーミッションを割り当てる方法がないため、プロトコルマッパーの制限になります。
- configure
-
クライアント管理の特権が減ります。管理者によるプロトコルマッパーの定義、クライアントテンプレートの変更、クライアントのスコープ変更が許可されていないことを除けば、
管理
スコープに似ています。 - map-roles
- 管理者がクライアントで定義したロールをユーザーにマップできるかどうかを決定するポリシー。これはショートカットであり、使いやすく、クライアントが定義した各ロールのポリシーを定義する必要はありません。
- map-roles-composite
- 管理者がクライアントで定義したロールを別のロールに複合としてマッピングできるかどうかを決定するポリシー。これはショートカットであり、使いやすく、クライアントが定義した各ロールのポリシーを定義する必要はありません。
- map-roles-client-scope
- 管理者がクライアントで定義した任意のロールを別のクライアントのスコープにマッピングできるかどうかを決定するポリシー。これはショートカットであり、使いやすく、クライアントが定義した各ロールのポリシーを定義する必要はありません。
11.3.3.3. ユーザー
全ユーザーの Permissions
タブに移動すると、全ユーザーのパーミッションタイプがリスト表示されます。
- view
- 管理者がレルム内のすべてのユーザーを表示できるかどうかを決定するポリシー。
- manage
- 管理者がレルム内のすべてのユーザーが管理できるかどうかを決定するポリシー。この権限は、管理者にユーザーロールマッピングを実行する権限を付与しますが、管理者がマッピングできるロールを指定するものではありません。admin がマッピングできるように、各ロールに特権を定義する必要があります。
- map-roles
-
これは、
manage
スコープによって付与される権限のサブセットです。この場合、管理者はロールのみをマップできます。admin は、他のユーザー管理操作を実行できません。また、admin
の適用が許可されるロールは、クライアントロールに対応する場合はロールごとまたはロールのセットごとに指定する必要があります。 - manage-group-membership
-
map-roles
と同様に、グループメンバーシップに関連するものを除き、ユーザーが追加または削除できるグループです。これらのポリシーは、管理者がメンバーシップを管理できるグループではなく、グループメンバーシップを管理する admin パーミッションを付与します。各グループのmanage-members
パーミッションにポリシーを指定する必要があります。 - 切り替え
- 他のユーザーの権限を借用できるかを決定するポリシー。これらのポリシーは、管理者の属性およびロールマッピングに適用されます。
- user-impersonated
- 権限を借用できるユーザーを決定するポリシー。これらのポリシーは、権限を借用するユーザーに適用されます。たとえば、管理者権限のあるユーザーを偽装するポリシーを定義する場合などです。
11.3.3.4. グループ
特定のグループの Permissions
タブに移動すると、これらのパーミッションタイプが表示されます。
- view
- 管理者がグループの情報を表示するかどうかを決定するポリシー。
- manage
- 管理者がグループの設定を管理するかどうかを決定するポリシー。
- view-members
- 管理者がグループのメンバーのユーザーの詳細を表示できるかどうかを決定するポリシー。
- manage-members
- 管理者がこのグループに所属するユーザーを管理するかどうかを決定するポリシー。
- manage-membership
- 管理者がグループのメンバーシップを変更できるかどうかを決定するポリシー。グループからメンバーを追加または削除します。