🗝️

Keycloakで新規作成realmのadmin-cliのサービスアカウントの設定

2022/07/19に公開

はじめに

KeycloakをREST API経由で操作する場合にはadmin-cliのクライアントを利用しサービスアカウントが利用されます。
このサービスアカウントの権限の設定についての話となります。

経緯

インストール時に生成されているmasterのrealmについてはadmin-cliから利用されるサービスアカウントとは別に新規で作成したrealmとします。
その新規に作成したrealmのadmin-cliのサービスアカウントの権限の設定手順となります。

※masterのサービスアカウントに対して新規に作成したrealmへの管理権限を付与する方法もあります。今回の場合masterのadmin-cliは無効化するため、本手順で新規realm側のサービスアカウントの権限を設定しています。

利用側の話

  • pythonのKeycloakAdminを利用する。
  • 以下のパッケージを利用

https://pypi.org/project/python-keycloak/

テストコード

from keycloak import KeycloakAdmin

keycloak_admin = KeycloakAdmin(
	server_url="https://${keycloak-url}/auth/",
	realm_name="admin-cli",
	client_secret_key="${client-secret}",
	verify=True
)

count_users = keycloak_admin.users_count()

print("count_users",count_users)

Keycloakの設定【準備】

Realmの新規追加

  • masterとは別の新規realmを追加

Cliensからadmin-cliを選択

  • masterのadmin-cliではなく、新規作成したrealmのadmin-cli

admin-cliの設定

  • サービスアカウントを有効
  • Access Typeを「confidential」に変更
  • Direct Access Grants Enabled を無効

  • 一回Saveする。
  • 「Credentials」のタブが増える。
  • 「Credentials」のタブのSecretを確保(=${client-secret})する。

Keycloakの設定【目的】

  • 作成したrealmのサービスアカウントの権限を設定します。
  • 「Service Account Roles」のタブを選択します。

設定前の状態

Client Rolesの「realm-management」を選択する。

  • 画面の「Client Roles」のプルダウンメニューから「realm-management」を選択します。

  • Realm作成直後の状態では権限がなく、サービスアカウントでは何も行うことができない状態になっています。

必要な権限を選択する。

  • この例では、「manage-users」を追加しています。
  • サービスアカウントに付与する権限はなるべく極小の範囲にするのが望ましいです。
  • 「ream-admin」を追加するとなんでもできます。

まとめ

  • 上記手順によりpythonのKeycloakAdminから、ユーザの参照や作成・削除などが実施可能となります。
  • これによりシステムの認証基盤としてKeycloakを自動で連携させて利用することが可能です。
  • 実際にサービスとして利用する場合は、別途OpenIdConnectの設定は必要です。
  • 新規realmのサービスアカウントではなく管理用のユーザを追加する方法でも可能かも?
  • セキュリティを厳しくする場合は、リバースプロキシでAPI経由でadmin配下のパスに対してアクセス制限をつけるなどの対応を実施する。

Discussion