web-dev-qa-db-ja.com

KeyCloakからすべてのユーザーをエクスポートする

Keycloakにすべてのユーザーと各ユーザーのグループとロールを毎日尋ねたいという特定のユースケースがあります。他の内部システムとの調整を目的としています。

現在、UsersResourceで提供されているKeycloakエンドポイントを使用しています。ただし、呼び出しを行うたびにパフォーマンスが低下し、このソリューションを使用できなくなることがわかります。レルムには3万人以上のユーザーがいます。

Keycloakがデータベースをエクスポートできることも確認しましたが、システムの起動時のみです(移行の目的であると思います)。毎日すべてのユーザーを抽出したいので、これを使用することはできません。

いくつかの既知の機能または回避策はありますか?

7
Michel

既存のkeycloakデータベースに接続するdockerを介して並列開始コンテナーを使用してこれを実行しました。

実際のキークロークと同じバージョンのコンテナキークロークを使用してください。バージョン間のdbスキーマの違いのため。

[〜#〜] export [〜#〜]

docker run --rm\
    --name keycloak_exporter\
    -v /tmp:/tmp/keycloak-export:Z\
    -e POSTGRES_DATABASE=keycloak\
    -e POSTGRES_PASSWORD=PASSOWRD_PLEASE\
    -e POSTGRES_USER=keycloak\
    -e DB_VENDOR=POSTGRES\
    -e POSTGRES_PORT_5432_TCP_ADDR=postgresql.local\
    jboss/keycloak:3.4.3.Final\
    -Dkeycloak.migration.action=export\
    -Dkeycloak.migration.provider=dir\
    -Dkeycloak.migration.dir=/tmp/keycloak-export\
    -Dkeycloak.migration.usersExportStrategy=SAME_FILE\
    -Dkeycloak.migration.realmName=therealm

[〜#〜] import [〜#〜]

docker run --rm\
    --name keycloak_importer\
    -v /tmp:/tmp/keycloak-import:Z\
    -e POSTGRES_DATABASE=keycloak_dest\
    -e POSTGRES_PASSWORD=PASSOWRD_DEST_PLEASE\
    -e POSTGRES_USER=keycloak\
    -e DB_VENDOR=POSTGRES\
    -e POSTGRES_PORT_5432_TCP_ADDR=postgresql2.local\
    jboss/keycloak:3.4.3.Final\
    -Dkeycloak.migration.action=import\
    -Dkeycloak.migration.provider=dir\
    -Dkeycloak.migration.dir=/tmp/keycloak-import\
    -Dkeycloak.migration.strategy=IGNORE_EXISTING\
    -Dkeycloak.migration.usersExportStrategy=SAME_FILE\
    -Dkeycloak.migration.realmName=therealm

可能な構成オプション: https://github.com/keycloak/keycloak-documentation/blob/master/server_admin/topics/export-import.adoc

1
Gernot Grames