レルムのインポートとエクスポート

レルムのインポートとエクスポートの方法の概要

このガイドでは、JSONファイルを使用したレルムのインポートとエクスポートのさまざまなアプローチについて理解します。

単一ファイルへのエクスポートとインポートは、ファイルサイズが大きくなる可能性があります。そのため、データベースに500人以上のユーザーが含まれている場合は、単一のファイルではなく、ディレクトリにエクスポートしてください。ディレクトリプロバイダーは「ページ」(ユーザーのファイル)ごとに個別のトランザクションを使用するため、ディレクトリを使用する方がパフォーマンスが向上します。ファイルごとおよびトランザクションごとのユーザーのデフォルト数は50です。これを増やすと、実行時間が指数関数的に増加します。

kc.[sh|bat] import | export コマンドを使用する前に、すべての Keycloak ノードを停止する必要があります。これにより、実行される操作に同時リクエストとの整合性の問題が発生しないことが保証されます。また、サーバーインスタンスと同じマシンからインポートまたはエクスポートコマンドを実行しても、ポートやその他の競合が発生しないことが保証されます。

データベース接続パラメータのオプションの提供

以下の export および import コマンドを使用する場合、Keycloak はレルム、クライアント、ユーザー、およびその他のエンティティに関する情報が保存されているデータベースへの接続方法を知る必要があります。Keycloak の設定 で説明されているように、その情報はコマンドラインパラメータ、環境変数、または設定ファイルとして提供できます。各コマンドの利用可能なオプションについては、--help コマンドラインオプションを使用してください。

構成オプションの一部は、ビルド時の構成オプションです。デフォルトでは、Keycloak はビルド時のパラメータの変更を検出した場合、export および import コマンドに対して自動的に再ビルドします。

Keycloak の設定 で概説されているように、build コマンドを使用して最適化されたバージョンの Keycloak をビルドした場合、--optimized コマンドラインオプションを使用して、Keycloak が起動時間の高速化のためにビルドチェックをスキップするようにします。これを行う場合は、コマンドラインからビルド時のオプションを削除し、ランタイムオプションのみを保持してください。

--optimized を使用しない場合は、import または export コマンドが暗黙的に最適化されたイメージを作成または更新することに注意してください。サーバーインスタンスと同じマシンからコマンドを実行している場合、これはサーバーの次回の起動に影響を与える可能性があります。

ディレクトリへのレルムのエクスポート

レルムをエクスポートするには、export コマンドを使用できます。このコマンドを呼び出すときは、Keycloak サーバーインスタンスを起動しないでください。

bin/kc.[sh|bat] export --help

レルムをディレクトリにエクスポートするには、--dir <dir> オプションを使用できます。

bin/kc.[sh|bat] export --dir <dir>

レルムをディレクトリにエクスポートすると、サーバーはエクスポートされるレルムごとに個別のファイルを作成します。

ユーザーのエクスポート方法の設定

--users <strategy> オプションを設定することで、ユーザーのエクスポート方法を設定することもできます。このオプションで使用できる値は次のとおりです。

different_files

ユーザーは、--users-per-file で設定されたファイルあたりの最大ユーザー数に応じて、異なる JSON ファイルにエクスポートされます。これはデフォルト値です。

skip

ユーザーのエクスポートをスキップします。

realm_file

ユーザーはレルム設定と同じファイルにエクスポートされます。レルム名が「foo」の場合、これはレルムデータとユーザーを含む「foo-realm.json」になります。

same_file

すべてのユーザーが1つの明示的なファイルにエクスポートされます。そのため、レルムごとに2つの JSON ファイル(1つはレルムデータ、もう1つはユーザー)が生成されます。

different_files 戦略を使用してユーザーをエクスポートしている場合は、--users-per-file オプションを設定することで、ファイルあたりのユーザー数を設定できます。デフォルト値は 50 です。

bin/kc.[sh|bat] export --dir <dir> --users different_files --users-per-file 100

ファイルへのレルムのエクスポート

レルムをファイルにエクスポートするには、--file <file> オプションを使用できます。

bin/kc.[sh|bat] export --file <file>

レルムをファイルにエクスポートすると、サーバーは同じファイルを使用して、エクスポートされるすべてのレルムの構成を保存します。

特定のレルムのエクスポート

エクスポートする特定のレルムを指定しない場合、すべてのレルムがエクスポートされます。単一のレルムをエクスポートするには、次のように --realm オプションを使用できます。

bin/kc.[sh|bat] export [--dir|--file] <path> --realm my-realm

インポートファイルの名前付け規則

レルムをエクスポートすると、特定のファイル名規則が使用されます。これは、ディレクトリからのインポートまたは起動時のインポートでも使用する必要があります。インポートされるレルムファイルは、<レルム名>-realm.json という名前である必要があります。レルムに関連付けられた通常およびフェデレーションユーザーファイルは、<レルム名>-users-<ファイル番号>.json および <レルム名>-federated-users-<ファイル番号>.json という名前である必要があります。この規則を使用しないと、エラーが発生したり、ユーザーファイルがインポートされなかったりする可能性があります。

ディレクトリからのレルムのインポート

レルムをインポートするには、import コマンドを使用できます。このコマンドを呼び出すときは、Keycloak サーバーインスタンスを起動しないでください。

bin/kc.[sh|bat] import --help

レルムをディレクトリにエクスポートした後、--dir <dir> オプションを使用して、次のようにレルムをサーバーにインポートし直すことができます。

bin/kc.[sh|bat] import --dir <dir>

import コマンドを使用してレルムをインポートする場合、既存のレルムをスキップするか、新しい構成で上書きするかを設定できます。そのためには、次のように --override オプションを設定できます。

bin/kc.[sh|bat] import --dir <dir> --override false

デフォルトでは、--override オプションは true に設定されているため、レルムは常に新しい構成で上書きされます。

ファイルからのレルムのインポート

単一のファイルに以前にエクスポートされたレルムをインポートするには、次のように --file <file> オプションを使用できます。

bin/kc.[sh|bat] import --file <file>

レルム構成ファイル内での環境変数の使用

プレースホルダーを使用して、任意のレルム構成の環境変数から値を解決できます。

プレースホルダーを使用したレルム構成
{
    "realm": "${MY_REALM_NAME}",
    "enabled": true,
    ...
}

上記の例では、MY_REALM_NAME 環境変数に設定された値が、realm プロパティを設定するために使用されます。

起動時のレルムのインポート

--import-realm オプションを使用すると、サーバーの起動時にレルムをインポートすることもできます。

bin/kc.[sh|bat] start --import-realm

--import-realm オプションを設定すると、サーバーは data/import ディレクトリからレルム構成ファイルをインポートしようとします。このディレクトリから読み取られるのは .json 拡張子を使用した通常のファイルのみで、サブディレクトリは無視されます。

Keycloak コンテナの場合、インポートディレクトリは /opt/keycloak/data/import です

レルムがサーバーに既に存在する場合、インポート操作はスキップされます。この動作の主な理由は、レルムを再作成し、サーバーの再起動間で状態が失われる可能性を回避するためです。

レルムを再作成するには、サーバーを起動する前に明示的に import コマンドを実行する必要があります。

管理コンソールを使用したインポートとエクスポート

管理コンソールを使用してレルムをインポートおよびエクスポートすることもできます。この機能は、管理コンソールがレルムの部分的なエクスポート機能のみを提供するため、前のセクションで説明した他の CLI オプションとは異なります。この場合、現在のレルム設定と、クライアント、ロール、グループなどの一部のリソースをエクスポートできます。この方法では、そのレルムのユーザーをエクスポートできません

管理コンソールエクスポートを使用すると、レルムと選択されたリソースは常に realm-export.json という名前のファイルにエクスポートされます。また、パスワードやクライアントシークレットなどのすべての機密値は * 記号でマスクされます。

管理コンソールを使用してレルムをエクスポートするには、次の手順を実行します。

  1. レルムを選択します。

  2. メニューで レルム設定 をクリックします。

  3. レルム設定画面の右上隅にある アクション メニューをポイントし、部分エクスポート を選択します。

    レルム構成とともにリソースのリストが表示されます。

  4. エクスポートするリソースを選択します。

  5. エクスポート をクリックします。

管理コンソールからエクスポートされたレルムは、バックアップやサーバー間のデータ転送には適していません。バックアップまたはサーバー間のデータ転送に適しているのは CLI エクスポートのみです。
レルムに多数のグループ、ロール、およびクライアントが含まれている場合、操作によってサーバーがユーザーリクエストに応答しなくなる可能性があります。特に本番システムでは、この機能を慎重に使用してください。

同様の方法で、以前にエクスポートされたレルムをインポートできます。次の手順を実行します。

  1. メニューで レルム設定 をクリックします。

  2. レルム設定画面の右上隅にある アクション メニューをポイントし、部分インポート を選択します。

    インポートするファイルを選択できるプロンプトが表示されます。このファイルに基づいて、レルム設定とともにインポートできるリソースが表示されます。

  3. インポート をクリックします。

インポートされたリソースが既に存在する場合に Keycloak が行うべき処理を制御することもできます。これらのオプションが存在します。

インポートの失敗

インポートを中止します。

スキップ

プロセスを中止せずに重複するリソースをスキップします

上書き

既存のリソースをインポートされるリソースに置き換えます。

管理コンソールの部分インポートは、CLI export コマンドによって作成されたファイルもインポートできます。言い換えれば、CLI によって作成されたフルエクスポートは、管理コンソールを使用してインポートできます。ファイルにユーザーが含まれている場合、それらのユーザーも現在のレルムにインポートするために利用可能になります。
このページの内容