4.2. 環境間での Red Hat Single Sign-On サーバーのデータベースの移行
このチュートリアルでは、Red Hat Single Sign-On サーバーデータベースをある環境から別の環境への移行、または別のデータベースへの移行に重点を置いています。
Red Hat Single Sign-On 7.6.11 データベースのエクスポートおよびインポートは Red Hat Single Sign-On サーバーの起動時にトリガーされ、そのパラメーターは Java システムプロパティーを介して渡されます。これは、1 回の Red Hat Single Sign-On サーバーの起動中に、可能な移行アクションの 1 つ (エクスポート または インポート) のみが実行されることを意味します。
4.2.1. Red Hat Single Sign-On PostgreSQL アプリケーションテンプレートのデプロイ
前提条件
- Preparing Red Hat Single Sign-On Authentication for OpenShift Deployment で説明されている手順を前提としています。
手順
- OpenShift Web コンソールにログインし、sso-app-demo プロジェクトスペースを選択します。
- Add to project をクリックし、デフォルトのイメージストリームおよびテンプレートをリスト表示します。
- Filter by keyword 検索バーを使用して、リストを sso に一致するものに制限します。See all をクリックして、必要なアプリケーションテンプレートを表示する必要がある場合があります。
sso76-ocp4-postgresql Red Hat Single Sign-On アプリケーションテンプレートを選択します。テンプレートをデプロイする際には、必ず SSO_REALM 変数が設定されていない (デフォルト値) ことを確認してください。
警告Red Hat Single Sign-On for OpenShift イメージに SSO_REALM 設定変数が設定されていると、変数で要求される Red Hat Single Sign-On サーバーレルムを作成するためにデータベースのインポートが実行されます。データベースのエクスポートを正しく実行するには、そのイメージに SSO_REALM 設定変数を同時に定義することはできません。
Create をクリックしてアプリケーションテンプレートをデプロイし、Pod デプロイメントを開始します。これには数分の時間がかかる場合があります。
その後、管理者アカウント を使用して https://secure-sso-<sso-app-demo>.<openshift32.example.com>/auth/admin で Red Hat Single Sign-On の Web コンソールにアクセスします。
注記このワークフロー例では、自己生成された CA を使用して、デモ目的でエンドツーエンドのワークフローを提供します。Red Hat Single Sign-On Web コンソールにアクセスすると、セキュリティーが保護されていない接続に関する警告が表示されます。
実稼働環境では、検証された認証局から購入した SSL 証明書を使用することを推奨します。
4.2.2. (オプション) エクスポートする追加のレルムとユーザーの作成
Red Hat Single Sign-On 7.6.11 サーバーデータベースのエクスポートを実行する場合、現在データベースにあるレルムとユーザーのみがエクスポートされます。エクスポートした JSON ファイルに追加の Red Hat Single Sign-On レルムとユーザーも含まれる場合は、以下を作成する必要があります。これらの手順を使用してください。
これが作成されると、データベースをエクスポートできます。
4.2.3. OpenShift Pod 上の JSON ファイルとして Red Hat Single Sign-On データベースをエクスポートします。
前提条件
- 新しいレルムとユーザーが作成されます。
手順
Red Hat Single Sign-On デプロイメント設定を取得し、これをゼロにスケールダウンします。
$ oc get dc -o name deploymentconfig/sso deploymentconfig/sso-postgresql $ oc scale --replicas=0 dc sso deploymentconfig "sso" scaled
Red Hat Single Sign-On for OpenShift イメージにデプロイされた Red Hat Single Sign-On 7.6.11 サーバーに、Red Hat Single Sign-On サーバーの起動時にデータベースのエクスポートを実行するよう指示します。
$ oc set env dc/sso \ -e "JAVA_OPTS_APPEND= \ -Dkeycloak.migration.action=export \ -Dkeycloak.migration.provider=singleFile \ -Dkeycloak.migration.file=/tmp/demorealm-export.json"
Red Hat Single Sign-On デプロイメント設定のバックアップを拡張します。これにより、Red Hat Single Sign-On サーバーが起動し、そのデータベースをエクスポートします。
$ oc scale --replicas=1 dc sso deploymentconfig "sso" scaled
(必要に応じて) エクスポートが成功したことを確認します。
$ oc get pods NAME READY STATUS RESTARTS AGE sso-4-ejr0k 1/1 Running 0 27m sso-postgresql-1-ozzl0 1/1 Running 0 4h $ oc logs sso-4-ejr0k | grep 'Export' 09:24:59,503 INFO [org.keycloak.exportimport.singlefile.SingleFileExportProvider] (ServerService Thread Pool -- 57) Exporting model into file /tmp/demorealm-export.json 09:24:59,998 INFO [org.keycloak.services] (ServerService Thread Pool -- 57) KC-SERVICES0035: Export finished successfully
4.2.4. エクスポートした JSON ファイルを取得してインポートします。
手順
Pod から Red Hat Single Sign-On データベースの JSON ファイルを取得します。
$ oc get pods NAME READY STATUS RESTARTS AGE sso-4-ejr0k 1/1 Running 0 2m sso-postgresql-1-ozzl0 1/1 Running 0 4h $ oc rsync sso-4-ejr0k:/tmp/demorealm-export.json .
(必要に応じて) Red Hat Single Sign-On データベースの JSON ファイルを、別の環境で実行している Red Hat Single Sign-On サーバーにインポートします。
注記OpenShift で実行されていない Red Hat Single Sign-On サーバーへのインポートについては、Importing and exporting the database を参照してください。
Red Hat Single Sign-On サーバーが OpenShift で Red Hat Single Sign-On 7.6.11 コンテナーとして実行されている場合は、管理コンソールのエクスポート/インポート 機能を使用して、以前にエクスポートした JSON ファイルから Red Hat Single Sign-On サーバーのデータベースにリソースをインポートします。
-
管理者ユーザーの作成に使用する認証情報を使用して、Red Hat Single Sign-On サーバーの
master
レルムの管理コンソールにログインします。ブラウザーで、Red Hat Single Sign-On Web サーバーの場合は http://sso-<project-name>.<hostname>/auth/admin に移動し、暗号化された Red Hat Single Sign-On Web サーバーの場合は https://secure-sso-<project-name>.<hostname>/auth/admin に移動します。 -
サイドバーの上部に、Red Hat Single Sign-On レルム名、ユーザー、クライアント、レルムロール、およびクライアントロールのインポート先を選択します。この例では、
master
レルムを使用します。 - サイドバーの下部にある Manage セクションにある Import のリンクをクリックします。
-
開いたページで Select file をクリックし、ローカルファイルシステムでエクスポートされた JSON ファイル
demorealm-export.json
の場所を指定します。 -
Import from realm ドロップダウンメニューから、データのインポート元となる Red Hat Single Sign-On レルムの名前を選択します。この例では、
master
レルムを使用します。 - インポートするユーザー、クライアント、レルムロール、およびクライアントロールを選択します (すべてのユーザーはデフォルトでインポートされます)。
リソースがすでに存在する場合 (Fail、Skip、または Overwriteのいずれか) に実行するストラテジーを選択します。
注記オブジェクト (ユーザー、クライアント、レルムロール、またはクライアントロール) をインポートしようとすると、現在のデータベースに同じ識別子を持つオブジェクトがすでに存在する場合に失敗します。Skip ストラテジーを使用して、
demorealm-export.json
ファイルにあるが、現在のデータベースに存在しないオブジェクトをインポートします。インポート をクリックしてインポートを実行します。
Import ボタンをクリックすると、
master
レルム以外のレルムから master レルムにオブジェクトをインポートする場合や、その逆の場合、以下のようなエラーが発生することがあります。この場合、まず、Access Type を bearer-only に設定して、不足しているクライアントを作成する必要があります。これらのクライアントは、エクスポート JSON ファイルが作成されたソースの Red Hat Single Sign-On サーバーから、JSON ファイルがインポートされるターゲット Red Hat Single Sign-On サーバーに、その特性を手動でコピーして作成できます。必要なクライアントを作成したら、再度 Import ボタンをクリックします。
上記の エラーメッセージを非表示にするには、Access Type が bearer-only の不足している
realm-management
クライアントを作成して、Import ボタンを再度クリックする必要があります。Skip インポートストラテジーでは、新たに追加されたオブジェクトは ADDED としてマークされ、スキップされたオブジェクトが、インポート結果ページの Action 列の SKIPPED としてマークされます。
管理コンソールのインポートにより、選択した場合にリソースを 上書き できます (Overwrite ストラテジー)。実稼働システムでは、この機能を注意して使用します。
-
管理者ユーザーの作成に使用する認証情報を使用して、Red Hat Single Sign-On サーバーの