サーバー設定ガイド
ガイド
概要
第1章 Red Hat build of Keycloak の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak を設定して起動します。
この章では、Red Hat build of Keycloak の設定方法と、設定を開始して適用する方法を説明します。これには、Red Hat build of Keycloak を最適化して起動を高速化し、メモリー使用量を減らすための設定ガイドラインが含まれています。
1.1. Red Hat build of Keycloak のソース設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、次の 4 つのソースから設定をロードします。ここでは適用順にリストされています。
- コマンドラインパラメーター
- 環境変数
-
conf/keycloak.confファイルまたはユーザーが作成した設定ファイルで定義されたオプション - ユーザーが作成した Java KeyStore ファイルで定義された機密オプション
オプションが複数のソースに設定されている場合、そのオプションの値はリストの最初にあるソースにより決定されます。たとえば、コマンドラインパラメーターにより設定されたオプションの値は、同じオプションの環境変数よりも優先されます。
1.1.1. 例: db-url-host パラメーターの設定 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、db-url 値が 4 つの設定ソースでどのように設定されるかを示しています。
| ソース | 形式 |
|---|---|
| コマンドラインパラメーター |
|
| 環境変数 |
|
| 設定ファイル |
|
| Java KeyStore ファイル |
|
アプリケーションの優先順位に基づくと、最も優先順位が高いのはコマンドラインであるため、起動時に使用される値は cliValue になります。
--db-url=cliValue が使用されていない場合、適用される値は KC_DB_URL=envVarValue になります。値がコマンドラインまたは環境変数によって適用されていない場合は、db-url=confFileValue が使用されます。前述の値がいずれも適用されていない場合は、使用可能な設定ソースの中で優先順位が最も低いため、kc.db-url=keystoreValue の値が使用されます。
1.2. 設定用の形式 リンクのコピーリンクがクリップボードにコピーされました!
この設定では、ソースごとに統一された 形式が使用されており、キー/値ペアの、ある設定ソースから別の設定ソースへの変換が簡素化されます。この形式は spi オプションにも適用されることに注意してください。
- コマンドラインパラメーターの形式
-
コマンドラインの値には、
--<key-with-dashes>=<value>の形式が使用されます。一部の値は、-<abbreviation>=<value>の省略表現もあります。 - 環境変数の形式
-
環境変数の値には、大文字の
KC_<key_with_underscores>=<value>形式が使用されます。 - 設定ファイルの形式
-
設定ファイルに格納される値には、
<key-with-dashes>=<value>形式が使用されます。 - KeyStore 設定ファイルの形式
-
KeyStore 設定ファイルに格納される値には、
kc.<key-with-dashes>形式が使用されます。<value>は、KeyStore に保存されているパスワードです。
設定の各章の最後で、該当する設定形式を定義する 関連オプション の見出しを探してください。すべての設定オプションは、すべての設定 を参照してください。ユースケースに適用できる設定ソースと形式を選択します。
1.2.1. 例 - 設定ソースに基づく代替形式 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、3 つの設定ソースにおける db-url-host の設定形式を示しています。
コマンドラインパラメーター
bin/kc.[sh|bat] start --db-url-host=mykeycloakdb
環境変数
export KC_DB_URL_HOST=mykeycloakdb
conf/keycloak.conf
db-url-host=mykeycloakdb
1.2.2. コマンドラインパラメーターの形式 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak には、設定用の多くのコマンドラインパラメーターが同梱されています。使用可能な設定形式を確認するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --help
または、すべての設定 ですべてのサーバーオプションを確認できます。
1.2.3. 環境変数を参照するための形式 リンクのコピーリンクがクリップボードにコピーされました!
${ENV_VAR} 構文を使用することで、keycloak.conf ファイル内の環境変数から環境固有の値をプレースホルダーを使用して解決できます。
db-url-host=${MY_DB_HOST}
環境変数を解決できない場合は、フォールバック値を指定できます。ここで示すとおり、mydb の前に : (コロン) を使用します。
db-url-host=${MY_DB_HOST:mydb}
1.2.4. 特定の設定ファイルを含める形式 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、サーバーは常に conf/keycloak.conf ファイルから設定オプションを取得します。新規インストールの場合、このファイルには、実稼働環境で実行する際の設定案がコメントとして格納されているだけです。
次のコマンドを入力し、[-cf|--config-file] オプションを使用して設定ファイルの場所を明示的に指定することもできます。
bin/kc.[sh|bat] --config-file=/path/to/myconfig.conf start
このオプションを設定すると、Red Hat build of Keycloak は conf/keycloak.conf ではなく指定されたファイルから設定を読み取ります。
1.2.5. Java KeyStore ファイルを使用して機密オプションを設定する リンクのコピーリンクがクリップボードにコピーされました!
Keystore 設定ソースにより、[--config-keystore] および [--config-keystore-password] オプションを使用して Java KeyStore からプロパティーを直接ロードできます。必要に応じて、[--config-keystore-type] オプションを使用して KeyStore タイプを指定できます。デフォルトの KeyStore タイプは PKCS12 です。
KeyStore 内のシークレットは、PBE (パスワードベースの暗号化) キーアルゴリズムを使用して保存する必要があります。この場合のキーは、KeyStore のパスワードから導出します。次の keytool コマンドを使用して、このような KeyStore を生成できます。
keytool -importpass -alias kc.db-password -keystore keystore.p12 -storepass keystorepass -storetype PKCS12 -v
コマンドを実行すると、Enter the password to be stored というプロンプトが表示されます。これは、上記の kc.db-password プロパティーの値を表します。
KeyStore が作成されると、次のパラメーターを使用してサーバーを起動できます。
bin/kc.[sh|bat] start --config-keystore=/path/to/keystore.p12 --config-keystore-password=keystorepass --config-keystore-type=PKCS12
1.2.6. raw Quarkus プロパティーの形式 リンクのコピーリンクがクリップボードにコピーされました!
ほとんどの場合、使用可能な設定オプションでサーバーを設定できます。ただし、Red Hat build of Keycloak 設定に欠けている特定の動作または機能は、基礎となる Quarkus フレームワークのプロパティーを使用できます。
可能であれば、Quarkus から直接プロパティーを使用することは避けてください。それらは Red Hat build of Keycloak でサポートされていません。どうしても必要な場合は、まず 機能拡張リクエスト を作成することを検討してください。このアプローチは、ニーズに合わせて Red Hat build of Keycloak の設定を改善するのに役立ちます。
拡張リクエストが不可能な場合は、raw Quarkus プロパティーを使用してサーバーを設定できます。
-
confディレクトリーに、quarkus.propertiesファイルを作成します。 そのファイルで、必要なプロパティーを定義します。
Quarkus ドキュメント で定義されている Quarkus エクステンションの サブセット のみ使用できます。以下に示す、Quarkus プロパティーの違いにも注意してください。
-
Quarkus ドキュメント に示される Quarkus プロパティーの鍵アイコンは、ビルド時のプロパティーを表しています。このプロパティーを適用するには、
buildコマンドを実行します。ビルドコマンドの詳細は、Red Hat build of Keycloak の最適化に関する後続セクションを参照してください。 - Quarkus ガイドの鍵アイコンがないプロパティーは、Quarkus および Red Hat build of Keycloak のランタイムプロパティーです。
-
Quarkus ドキュメント に示される Quarkus プロパティーの鍵アイコンは、ビルド時のプロパティーを表しています。このプロパティーを適用するには、
Quarkus プロパティーを Java KeyStore に保存することもできます。
quarkus.http.port や同様の必須プロパティーなど、一部の Quarkus プロパティーはすでに Red Hat build of Keycloak 設定にマップされていることに注意してください。プロパティーが Red Hat build of Keycloak によって使用されている場合、quarkus.properties でそのプロパティーキーを定義しても効果はありません。Red Hat build of Keycloak の設定値は、Quarkus のプロパティー値よりも優先されます。
1.2.7. 値に特殊文字を使用する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、Quarkus と MicroProfile に依存して設定値を処理します。評価式がサポートされていることに注意してください。たとえば、${some_key} は some_key の値と評価されます。
式の評価を無効にするには、\ 文字をエスケープ文字として使用します。特に、$ で式を定義する場合や $ が繰り返し現れる場合、\ によって $ の使用をエスケープする必要があります。たとえば、設定値 my$$password が必要な場合は、代わりに my\$\$password を使用します。ほとんどの Unix シェルを使用する場合、またはプロパティーファイルに現れる場合は、\ 文字を追加でエスケープするか、引用符で囲む必要があることに注意してください。たとえば、bash で一重引用符を使用すると、単一のバックスラッシュ --db-password='my\$\$password' が保持されます。また、bash で二重引用符を使用する場合は、バックスラッシュがもう 1 つ --db-password="my\\$\\$password" が必要です。同様に、プロパティーファイルでも、バックスラッシュ文字をエスケープする必要があります (kc.db-password=my\\$\\$password)。
Windows 固有の考慮事項
設定値で Windows ファイルパスを指定する場合は、バックスラッシュもエスケープする必要があります。たとえば、パス C:\path\to\file を指定する場合は、C:\\path\\to\\file と記述する必要があります。または、C:/path/to/file のように、エスケープする必要のないスラッシュを使用することもできます。
PowerShell を使用し、値にコンマなどの特殊文字が含まれている場合は、二重引用符を一重引用符で囲みます。
.\kc.bat start --log-level='"INFO,org.hibernate:debug"'
PowerShell では引用符を異なる方法で処理します。引用符で囲まれた文字列を kc.bat スクリプトに渡す前に解釈し、外側の引用符文字を削除します。したがって、値の構造を保持するには、引用符の追加レイヤーが必要です。そうでない場合、コンマは区切り文字として解釈されます。Windows CMD では、二重引用符を直接使用できます。
1.2.8. 特殊文字を含む環境変数キーの形式 リンクのコピーリンクがクリップボードにコピーされました!
設定キー内の英数字以外の文字は、対応する環境変数キーで _ に変換する必要があります。
環境変数は、名前を小文字にし、_ を - に置き換えることで、通常のオプションキーに変換されます。ロギングのワイルドカードは例外で、カテゴリー内の _ は . に置き換えられます。ロギングカテゴリーは一般にクラス/パッケージ名であり、- ではなく . が使用される可能性が高くなります。
環境変数キーをオプションキーに自動マッピングすると、意図したキーが保持されない場合があります。
たとえば、kc.log-level-package.class_name は、環境変数キー KC_LOG_LEVEL_PACKAGE_CLASS_NAME になります。これは、ロギングカテゴリーの _ が . に置き換えられるため、自動的に kc.log-level-package.class.name にマッピングされます。残念ながら、これは kc.log-level-package.class_name の意図と一致しません。
この場合、いくつかのオプションがあります。
-
選択した環境変数を参照するエントリーを
keycloak.confファイルに作成します (例:kc.log-level-package.class_name=${CLASS_NAME_LEVEL})。参照する環境変数の詳細は、「環境変数を参照するための形式」 を参照してください。 -
または、
keycloak.confの変更が容易でない状況では、環境変数KC_UNIQUEIFIER=valueとKCKEY_UNIQUEIFIER=keyのペアを使用できます (例:KC_MYKEY=debugとKCKEY_MYKEY=log-level-package.class_name、またはKC_LOG_LEVEL_PACKAGE_CLASS_NAME=debugとKCKEY_LOG_LEVEL_PACKAGE_CLASS_NAME=log-level-package.class_name)。
1.3. Red Hat build of Keycloak の起動 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、development mode または production mode で起動できます。各モードでは、対象となる環境に応じて異なるデフォルトが提供されます。
1.3.1. Red Hat build of Keycloak を開発モードで起動する リンクのコピーリンクがクリップボードにコピーされました!
開発モードは、Red Hat build of Keycloak を初めて試す場合に、すばやく起動するために使用します。このモードは、Red Hat build of Keycloak の開発など、開発者にとって便利なデフォルト設定を提供します。
開発モードで起動するには、次のコマンドを入力します。
bin/kc.[sh|bat] start-dev
デフォルト
開発モードでは、次のデフォルト設定が適用されます。
- HTTP は有効
- 厳密なホスト名解決は無効
- キャッシュはローカルに設定 (高可用性のため、分散キャッシュメカニズムは使用されません)
- テーマとテンプレートのキャッシュは無効
1.3.2. Red Hat build of Keycloak を実稼働モードで起動する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak を実稼働環境にデプロイするには、実稼働モードを使用します。このモードは、セキュアバイデフォルト (デフォルトでセキュア) の原則に従います。
実稼働モードで起動するには、次のコマンドを入力します。
bin/kc.[sh|bat] start
追加で設定を行わなければ、このコマンドを実行しても Red Hat build of Keycloak は起動せず、代わりにエラーが表示されます。Red Hat build of Keycloak は セキュアバイデフォルト の原則に従っているため、この応答は意図的なものです。実稼働モードでは、起動時にホスト名を設定し、HTTPS/TLS 設定を使用可能にすることが想定されています。
デフォルト
実稼働モードでは、次のデフォルトが設定されます。
- トランスポート層セキュリティー (HTTPS) が必須であるため、HTTP は無効になっています。
- ホスト名の設定が想定されています。
- HTTPS/TLS の設定が想定されています。
Red Hat build of Keycloak を実稼働環境にデプロイする前に、必ず 実稼働環境向けの Red Hat build of Keycloak の設定 に記載されている手順に従ってください。
デフォルトでは、実稼働モードの設定オプション例は、デフォルトの conf/keycloak.conf ファイル内でコメント化されています。これらのオプションは、実稼働環境で Red Hat build of Keycloak を実行する際に考慮すべき主要な設定についてアイデアを提供します。
1.4. 初期管理者ユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
初期管理者ユーザーは、ローカル接続 (localhost) を使用してアクセスする Web フロントエンドを使用して作成できます。代わりに、環境変数を使用してこのユーザーを作成することもできます。初期管理者ユーザー名には KC_BOOTSTRAP_ADMIN_USERNAME=<username> を設定し、初期管理者パスワードには KC_BOOTSTRAP_ADMIN_PASSWORD=<password> を設定します。
Red Hat build of Keycloak は、初回起動時にこれらの値を解析して、管理者権限を持つ最初のユーザーを作成します。管理者権限を持つ最初のユーザーが存在する場合は、管理コンソールまたはコマンドラインツール kcadm.[sh|bat] を使用して追加のユーザーを作成できます。
初期管理者がすでに存在し、起動時に環境変数がまだ存在している場合は、初期管理者の作成が失敗したことを示すエラーメッセージがログに表示されます。Red Hat build of Keycloak はこの値を無視し、正しく起動します。
1.5. Red Hat build of Keycloak の起動を最適化する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak を実稼働環境にデプロイする前に、Red Hat build of Keycloak を最適化して起動を高速化し、メモリー消費量を改善することが推奨されます。このセクションでは、最適なパフォーマンスと実行時の動作を実現するために、Red Hat build of Keycloak の最適化を適用する方法を説明します。
1.5.1. 最適化された Red Hat build of Keycloak ビルドの作成 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、start または start-dev コマンドを使用すると、Red Hat build of Keycloak は便宜上、内部で build コマンドを実行します。
この build コマンドは、起動時と実行時の動作に対して一連の最適化を実行します。ビルドプロセスには数秒かかる場合があります。特に、Kubernetes や OpenShift などのコンテナー化された環境で Red Hat build of Keycloak を実行する場合、起動時間は重要です。無駄な時間を発生させないために、起動前に build (CI/CD パイプラインの別のステップなど) を明示的に実行します。
1.5.1.1. 最初のステップ: build を明示的に実行する リンクのコピーリンクがクリップボードにコピーされました!
build を実行するには、次のコマンドを入力します。
bin/kc.[sh|bat] build <build-options>
このコマンドは、入力した build options を表示します。Red Hat build of Keycloak は、build コマンドの実行時に使用できる ビルドオプション と、サーバーの起動時に使用できる 設定オプション を区別します。
Red Hat build of Keycloak の起動が最適化されていない場合、この区別には意味がありません。ただし、起動前に build を実行する場合、build コマンドではオプションのサブセットしか使用できません。この制限は、最適化された Red Hat build of Keycloak イメージに対して build オプションが永続化されることが原因です。たとえば、db-password (設定オプション) などの認証情報の設定は、セキュリティー上の理由から永続化することは禁止されています。
すべてのビルドオプションは、プレーンテキストで保持されます。機密データは、ビルドオプションとして保存しないでください。これは、KeyStore Config Source を含む、使用可能なすべての設定ソースに適用されます。したがって、ビルドオプションを Java Keystore に保存することも推奨されません。設定オプションに関しては、主に機密データの保存に KeyStore Config Source を使用することが推奨されます。機密性のないデータの場合は、残りの設定ソースを使用できます。
ビルドオプションは、すべての設定 でツールアイコンによって示されています。利用可能なビルドオプションを見つけるには、次のコマンドを入力します。
bin/kc.[sh|bat] build --help
例: 起動前に build を実行してデータベースを PostgreSQL に設定する
bin/kc.[sh|bat] build --db=postgres
1.5.1.2. 2 番目のステップ: --optimized を使用して Red Hat build of Keycloak を起動する リンクのコピーリンクがクリップボードにコピーされました!
ビルドが成功すると、次のコマンドを入力して Red Hat build of Keycloak を起動し、デフォルトの起動動作をオフにできます。
bin/kc.[sh|bat] start --optimized <configuration-options>
--optimized パラメーターは、Red Hat build of Keycloak に対して、事前にビルドおよび最適化された Red Hat build of Keycloak の使用を前提とするように指示します。その結果、Red Hat build of Keycloak の起動時にビルドの直接確認と実行は行われず、時間が短縮されます。
起動時にすべての設定オプションを入力できます。設定オプションは、すべての設定 の中にある、ツールアイコンが 付いていない オプションです。
-
起動時に、
buildの入力時に使用した値と同じ値のビルドオプションが見つかった場合、--optimizedパラメーターを使用すると、そのオプションは暗黙的に無視されます。 -
そのオプションの値が、ビルドの入力時に使用した値と異なる場合、ログに警告が表示され、以前にビルドした値が使用されます。この値を有効にするには、起動する前に新しい
buildを実行します。
最適化されたビルドを作成する
次の例は、Red Hat build of Keycloak の起動時に、--optimized パラメーターを使用して最適化されたビルドを作成する方法を示しています。
build コマンドを使用して、PostgreSQL データベースベンダーのビルドオプションを設定します。
bin/kc.[sh|bat] build --db=postgresconf/keycloak.confファイルで、postgres の実行時設定オプションを設定します。db-url-host=keycloak-postgres db-username=keycloak db-password=change_me hostname=mykeycloak.acme.com https-certificate-file最適化されたパラメーターでサーバーを起動します。
bin/kc.[sh|bat] start --optimized
build コマンドを使用すると、起動時と実行時の動作のほとんどを最適化できます。また、keycloak.conf ファイルを設定ソースとして使用すると、CLI 自体の初期化など、コマンドラインパラメーターが必要となる起動時の一部の手順を回避できます。その結果、サーバーの起動時間がさらに短縮されます。
1.6. レルム設定でのシステム変数の使用 リンクのコピーリンクがクリップボードにコピーされました!
一部のレルム機能により、管理者はレルムとそのコンポーネントの設定時に、環境変数やシステムプロパティーなどのシステム変数を参照できます。
デフォルトでは、Red Hat build of Keycloak ではシステム変数の使用は許可されておらず、spi-admin--allowed-system-variables 設定オプションで明示的に指定された変数のみ使用できます。このオプションを使用すると、最終的に同じキーを持つシステム変数の値に解決されるキーのコンマ区切りリストを指定できます。
サーバーを起動し、一連のシステム変数をサーバーランタイムに公開します。
bin/kc.[sh|bat] start --spi-admin--allowed-system-variables=FOO,BAR
今後のリリースでは、レルム設定でのシステム変数の使用を防止するために、この機能は削除されます。
1.7. 基礎となる概念 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Red Hat build of Keycloak が使用する基礎となる概念、特に起動の最適化にかかわる概念を説明します。
Red Hat build of Keycloak は、Quarkus フレームワークと再拡張/mutable-jar アプローチを内部で使用します。このプロセスは、build コマンドが実行されると開始されます。
以下は、build コマンドにより実行される最適化の一部です。
- インストールされているプロバイダーに関する閉世界仮説が作成されます。つまり、Red Hat build of Keycloak の起動ごとに、レジストリーを再作成してファクトリーを初期化する必要がなくなります。
- 設定ファイルは、サーバー起動時の I/O を削減するために事前に解析されます。
- データベース固有のリソースは、特定のデータベースベンダーに対して実行するように設定および準備されています。
- ビルドオプションをサーバーイメージに対して永続化すると、サーバーは設定オプションを解釈して自身を (再) 設定するための追加の手順を実行しません。
詳細は、該当する Quarkus ガイド を参照してください。
第2章 実稼働環境向けの Red Hat build of Keycloak の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak を実稼働環境で使用するために準備します。
Red Hat build of Keycloak の実稼働環境は、数千人のユーザーをサポートするオンプレミスのデプロイメントから数百万のユーザーにサービスを提供するデプロイメントまで、幅広いデプロイメントに対してセキュアな認証と認可を提供します。
この章では、実稼働に対応した Red Hat build of Keycloak 環境に必要な設定に関する一般的な情報を提供します。この情報は、環境に応じて異なる実際の実装ではなく、一般的な概念に重点を置いています。この章で説明する重要な側面は、コンテナー化、オンプレミス、GitOps、Ansible のいずれかにかかわらず、すべての環境に当てはまります。
2.1. セキュアな通信のための TLS リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、継続的に機密データを交換します。つまり、Red Hat build of Keycloak との間のすべての通信には、セキュアな通信チャネルが必要です。さまざまな攻撃ベクトルを防ぐには、そのチャネルに対して HTTP over TLS (HTTPS) を有効にします。
Red Hat build of Keycloak のためにセキュアな通信チャネルを設定するには、TLS の設定 および 送信 HTTP 要求の設定 を参照してください。
Red Hat build of Keycloak のキャッシュ通信を保護するには、分散キャッシュの設定 を参照してください。
2.2. Red Hat build of Keycloak のホスト名 リンクのコピーリンクがクリップボードにコピーされました!
通常、実稼働環境では、Red Hat build of Keycloak インスタンスはプライベートネットワークで実行されます。しかし、保護すべきアプリケーションと通信するために、Red Hat build of Keycloak は特定のパブリック向けエンドポイントを公開する必要があります。
エンドポイントのカテゴリーの詳細と、それらのパブリックホスト名を設定する方法は、ホスト名 (v2) の設定 を参照してください。
2.2.1. Red Hat build of Keycloak 管理 API と UI を別のホスト名で公開する リンクのコピーリンクがクリップボードにコピーされました!
ログインフローなどで使用されるパブリックフロントエンド URL に使用されるものとは異なるホスト名またはコンテキストパスで Red Hat build of Keycloak 管理 REST API とコンソールを公開することが、ベストプラクティスと見なされます。このように分けることで、管理インターフェイスがパブリックインターネットに公開されなくなり、攻撃対象領域が縮小されます。
REST API を公開する予定がない場合は、リバースプロキシーレベルで REST API へのアクセスをブロックする必要があります。
詳細は、ホスト名 (v2) の設定 を参照してください。
2.3. 分散環境でのリバースプロキシー リンクのコピーリンクがクリップボードにコピーされました!
ホスト名 (v2) の設定 に加えて、実稼働環境には通常、リバースプロキシー/ロードバランサーのコンポーネントが含まれています。これは、会社や組織が使用するネットワークへのアクセスの分離や統合を行います。Red Hat build of Keycloak の実稼働環境では、このコンポーネントが推奨されます。
Red Hat build of Keycloak でプロキシー通信モードを設定する方法の説明は、リバースプロキシーの設定 を参照してください。Red Hat build of Keycloak がアプリケーションを保護するために、パブリックアクセスから隠すべきパスと、公開すべきパスに関する推奨も記載されています。
2.4. キューに入れる要求の数の制限 リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境では、過負荷状態から保護して、可能な限り多くの有効な要求に応答し、状況が正常に戻ったときに通常の操作を継続できるようにする必要があります。これを実現する 1 つの方法は、特定のしきい値に達したときに追加の要求を拒否することです。
負荷制限は、環境内のロードバランサーを含むすべてのレベルで実装する必要があります。さらに、Red Hat build of Keycloak には、すぐに処理できないためキューに入れる必要がある要求の数を制限する機能があります。デフォルトでは制限は設定されていません。オプション http-max-queued-requests を設定すると、キューに入れる要求の数を、環境に合わせて特定のしきい値に制限できます。この制限を超える要求には、即時に 503 Server not Available 応答が返されます。
2.5. 実稼働グレードのデータベース リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak で使用されるデータベースは、Red Hat build of Keycloak の全体的なパフォーマンス、可用性、信頼性、整合性において非常に重要です。サポートされているデータベースの設定方法の詳細は、データベースの設定 を参照してください。
2.6. クラスター内での Red Hat build of Keycloak の実行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak インスタンスがダウンした場合もユーザーのログインを継続するために、一般的な実稼働環境には Red Hat build of Keycloak インスタンスが 2 つ以上含まれています。
Red Hat build of Keycloak は、JGroups および Infinispan 上で実行されます。これらは、クラスター化されている場合に高い信頼性と可用性を提供します。デフォルトのセットアップでは、ノード間の通信は TLS を使用して暗号化されます。
複数のノード、さまざまなキャッシュ、および環境に適したスタックを使用する方法の詳細は、分散キャッシュの設定 を参照してください。
2.6.1. ファイアウォールポートの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak サーバー間の正常なネットワーク通信を可能にするには、一連のネットワークポートを開く必要があります。分散キャッシュの設定 を参照してください。開く必要があるポートとその使用方法を説明します。
2.7. Red Hat build of Keycloak サーバーで IPv4 または IPv6 を設定する リンクのコピーリンクがクリップボードにコピーされました!
システムプロパティーである java.net.preferIPv4Stack と java.net.preferIPv6Addresses を使用して、IPv4 または IPv6 アドレスを使用するように JVM を設定できます。
デフォルトでは、Red Hat build of Keycloak は、同時に IPv4 アドレスと IPv6 アドレスを介してアクセスできます。IPv4 アドレスのみで実行する場合は、プロパティー java.net.preferIPv4Stack=true を指定する必要があります。そうすることで、ホスト名から IP アドレスへの変換では必ず IPv4 アドレスのバリアントが返されるようになります。
これらのシステムプロパティーは、JAVA_OPTS_APPEND 環境変数を使用して容易に設定できます。たとえば、IP スタック設定を IPv4 に変更するには、次のように環境変数を設定します。
export JAVA_OPTS_APPEND="-Djava.net.preferIPv4Stack=true"
IPv6 専用サーバーを設定するには、分散キャッシュがクラスターを形成するように環境変数を次のように設定します。
export JAVA_OPTS_APPEND="-Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true"
詳細は、分散キャッシュの設定 を参照してください。
第3章 管理者アカウントのブートストラップと回復 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak をブートストラップし、一時的な管理者アカウントを作成してアクセスを回復します。
3.1. 一時的な管理者アカウント リンクのコピーリンクがクリップボードにコピーされました!
以下に説明するいずれかの方法を使用して作成されたユーザーまたはサービス管理者アカウントは 一時的 なものです。つまり、アカウントは、永続的でよりセキュアな管理者アクセスを取得するために必要な操作を実行するために必要な期間のみ存在する必要があります。その後、アカウントを手動で削除する必要があります。管理コンソールの警告バナー、ラベル、ログメッセージなどのさまざまな UI/UX 要素によって、アカウントが一時的であることが Red Hat build of Keycloak 管理者に通知されます。
3.2. Red Hat build of Keycloak の起動時に一時的な管理者アカウントをブートストラップする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak の start および start-dev コマンドは、一時的な管理者ユーザーと管理サービスアカウントの両方をブートストラップするためのオプションをサポートします。これらのオプションは標準の設定オプションであるため、環境変数や CLI パラメーターなどの任意の 設定ソース で指定できます。たとえば、次の例は、CLI パラメーターを指定した start コマンドと start-dev コマンドを使用して、それぞれ一時的な管理者ユーザーと管理者サービスアカウントをブートストラップする方法を示しています。
bin/kc.[sh|bat] start --bootstrap-admin-username tmpadm --bootstrap-admin-password pass
bin/kc.[sh|bat] start-dev --bootstrap-admin-client-id tmpadm --bootstrap-admin-client-secret secret
ユーザー名またはクライアント ID の値は省略できます。詳細は、以下の 「デフォルト値」 セクションを参照してください。
これらのオプションの目的は、一時的な管理者アカウントをブートストラップすることだけです。これらのアカウントは、マスターレルムがまだ存在しないときに、Red Hat build of Keycloak サーバーの初期起動時にのみ作成されます。アカウントは常にマスターレルムに作成されます。失われた管理者アクセスを回復するには、以下のセクションで説明する専用コマンドを使用します。
3.3. 専用コマンドを使用して管理者ユーザーまたはサービスアカウントをブートストラップする リンクのコピーリンクがクリップボードにコピーされました!
bootstrap-admin コマンドは、Red Hat build of Keycloak を初めて起動する前でも実行できます。このコマンドを使用する前に、すべての Red Hat build of Keycloak ノードを停止する必要があることに注意してください。これを実行すると、初期マスターレルムの作成がトリガーされ、その結果、後でサーバーが初めて起動されるときに、管理者ユーザーとサービスアカウントをブートストラップするための起動オプションは無視されます。
さらに、Red Hat build of Keycloak サーバーの起動時と同じオプション (例: db オプション) を指定して専用コマンドを使用することを強く推奨します。
Red Hat build of Keycloak の設定 で説明されているように、build コマンドを使用して Red Hat build of Keycloak の最適化バージョンをビルドした場合は、コマンドラインオプション --optimized を使用して、起動時間を短縮するために Red Hat build of Keycloak がビルドチェックをスキップするようにします。その際には、コマンドラインからビルド時オプションを削除し、実行時オプションのみを保持します。
--optimized を使用しない場合、bootstrap-admin コマンドによって暗黙的に最適化されたビルドが作成または更新される可能性があることに注意してください。サーバーインスタンスと同じマシンからコマンドを実行している場合、サーバーの次回の起動に影響する可能性があります。
3.3.1. 管理者ユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
一時的な管理者ユーザーを作成するには、次のコマンドを実行します。
bin/kc.[sh|bat] bootstrap-admin user
他のパラメーターが指定されていない場合、または対応する環境変数が設定されていない場合は、ユーザーは必要な情報を入力するよう求められます。ユーザー名の値を省略してデフォルト値を使用できます。詳細は、以下の 「デフォルト値」 セクションと 「環境変数」 セクションを参照してください。
または、コマンド内でパラメーターを直接指定することもできます。
bin/kc.[sh|bat] bootstrap-admin user --username tmpadm --password:env PASS_VAR
このコマンドは、ユーザー名 tmpadm と環境変数から取得したパスワードを持つ一時的な管理者ユーザーを作成します。
3.3.2. サービスアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
自動化されたシナリオでは、一時的な管理者ユーザーの代わりに、一時的な管理者サービスアカウントを使用する方が適している場合があります。
一時的な管理者サービスアカウントを作成するには、次のコマンドを実行します。
bin/kc.[sh|bat] bootstrap-admin service
同様に、対応する環境変数または追加のパラメーターが設定されていない場合、ユーザーは必要な情報を入力するよう求められます。デフォルト値を使用する場合は、クライアント ID 値を省略できます。詳細は、以下の 「デフォルト値」 セクションと 「環境変数」 セクションを参照してください。
または、コマンド内でパラメーターを直接指定することもできます。
bin/kc.[sh|bat] bootstrap-admin service --client-id tmpclient --client-secret:env=SECRET_VAR
このコマンドは、クライアント ID tmpclient と環境変数から取得したシークレットを使用して、一時的な管理サービスアカウントを作成します。
3.4. セキュリティーを強化してレルムへのアクセスを取り戻す リンクのコピーリンクがクリップボードにコピーされました!
管理者アクセスが失われたレルムに対して、パスワードレス、OTP、またはその他の高度な認証方法を適用できます。このような場合、レルムへの失われた管理者アクセスを回復するには、管理者サービスアカウントを作成する必要があります。サービスアカウントが作成された後、必要なすべての操作を実行するには、Red Hat build of Keycloak インスタンスに対する認証が必要です。
bin/kcadm.[sh|bat] config credentials --server http://localhost:8080 --realm master --client <service_account_client_name> --secret <service_account_secret>
次に、credentialId を取得します。この例では、OTP 認証情報が関連する認証情報です。次のコマンドを使用して、CredentialRepresentation オブジェクトの配列を取得し、type が otp に設定されているオブジェクトを見つけます。
bin/kcadm.[sh|bat] get users/{userId}/credentials -r {realm-name}
最後に、取得した ID を使用して、高度な認証方法 (この場合は OTP) を削除できます。
bin/kcadm.[sh|bat] delete users/{userId}/credentials/{credentialId} -r {realm-name}
3.5. デフォルト値 リンクのコピーリンクがクリップボードにコピーされました!
起動および専用コマンドの両方のシナリオでは、ユーザー名とクライアント ID はオプションであり、ユーザーアカウントとサービスアカウントの両方でそれぞれ temp-admin がデフォルトになります。
3.6. パラメータープロンプトを無効にする リンクのコピーリンクがクリップボードにコピーされました!
--no-prompt パラメーターを使用して、パラメーターのプロンプトを無効化できます。以下に例を示します。
bin/kc.[sh|bat] bootstrap-admin user --username tmpadm --no-prompt
対応する環境変数が設定されていない場合、コマンドは失敗し、必要なパスワードパラメーターがないことを示すエラーメッセージが表示されます。
--no-prompt パラメーターは、ユーザー名またはクライアント ID を省略する必要がある場合に役立ちます。以下に例を示します。
bin/kc.[sh|bat] bootstrap-admin user --password:env PASS_VAR --no-prompt
これにより、確認を求めることなく、デフォルトのユーザー名を持つ一時的な管理者ユーザーが作成されます。詳細は、上記の 「デフォルト値」 セクションを参照してください。
3.7. 環境変数 リンクのコピーリンクがクリップボードにコピーされました!
bootstrap-admin user コマンドでは、ユーザー名とパスワードの両方をオプションで環境変数として設定できます。
bin/kc.[sh|bat] bootstrap-admin user --username:env <YourUsernameEnv> --password:env <YourPassEnv>
bootstrap-admin service コマンドの場合、クライアント ID はオプションで、デフォルトは temp-admin ですが、クライアントシークレットは環境変数として設定する必要があります。
bin/kc.[sh|bat] bootstrap-admin service --client-id:env <YourClientIdEnv> --client-secret:env <YourSecretEnv>
第4章 ディレクトリー構造 リンクのコピーリンクがクリップボードにコピーされました!
インストールルートの下のディレクトリーの目的を説明します。
4.1. インストールの場所 リンクのコピーリンクがクリップボードにコピーされました!
zip ファイルからインストールする場合、デフォルトでは rhbk-26.4.11 のインストールルートディレクトリーが作成されます。このディレクトリーは、ファイルシステム上の任意の場所に作成できます。
/opt/keycloak は、Red Hat build of Keycloak で示されるすべてのコンテナー化された使用法におけるサーバーのルートインストールロケーションです。
ドキュメントの残りの部分では、相対パスはインストールルートからの相対パスとして理解されます。たとえば、conf/file.xml は <install root>/conf/file.xml を意味します。
4.2. ディレクトリー構造 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak のインストールルートの下には、いくつかのフォルダーが存在します。
bin/ -
kc.sh|bat、kcadm.sh|bat、kcreg.sh|batなど、サーバーのすべてのシェルスクリプトが含まれます。- client/ - 内部的に使用される
conf/ -
keycloak.confを含む設定ファイルに使用されるディレクトリー - Red Hat build of Keycloak の設定 を参照してください。設定ファイルを指定するための多くのオプションでは、このディレクトリーに対する相対パスが想定されています。-
truststores/ -
truststore-pathsオプションで使用されるデフォルトのパス - 信頼できる証明書の設定 を参照してください。
-
truststores/ -
data/ - トランザクションログなどのランタイム情報を保存するサーバーのディレクトリー
- logs/ - ファイルロギングのデフォルトディレクトリー - ロギングの設定 を参照してください。
- lib/ - 内部的に使用される
- providers/ - ユーザーが提供する依存関係のディレクトリー - サーバーを拡張する場合は プロバイダーの設定 を、JDBC ドライバーの追加例の場合は データベースの設定 を参照してください。
- themes/ - 管理コンソールのカスタマイズ用のディレクトリー - テーマの開発 を参照してください。
第5章 コンテナー内での Red Hat build of Keycloak の実行 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーイメージから Red Hat build of Keycloak を実行します。
この章では、コンテナーを実行する際に最適なエクスペリエンスを実現するために、Red Hat build of Keycloak コンテナーイメージを最適化して実行する方法を説明します。
この章は、OpenShift 環境で実行するイメージのビルドにのみ適用されます。このイメージは OpenShift 環境のみをサポートします。他の Kubernetes ディストリビューションで実行する場合はサポートされません。
5.1. カスタマイズおよび最適化されたコンテナーイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの Red Hat build of Keycloak コンテナーイメージは、すぐに設定および最適化できる状態で出荷されます。
Red Hat build of Keycloak コンテナーを最適に起動するには、コンテナーのビルド中に build ステップを実行してイメージをビルドします。この手順を実行することで、後に続くコンテナーイメージの各起動フェーズで時間を節約できます。
5.1.1. 最適化された Red Hat build of Keycloak Containerfile の記述 リンクのコピーリンクがクリップボードにコピーされました!
次の Containerfile は、ヘルスおよびメトリクスのエンドポイントとトークン交換機能を有効にし、PostgreSQL データベースを使用する、事前設定済みの Red Hat build of Keycloak イメージを作成します。
Containerfile:
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4 AS builder
# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true
# Configure a database vendor
ENV KC_DB=postgres
WORKDIR /opt/keycloak
# for demonstration purposes only, please make sure to use proper certificates in production instead
RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore
RUN /opt/keycloak/bin/kc.sh build
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4
COPY --from=builder /opt/keycloak/ /opt/keycloak/
# change these values to point to a running postgres instance
ENV KC_DB=postgres
ENV KC_DB_URL=<DBURL>
ENV KC_DB_USERNAME=<DBUSERNAME>
ENV KC_DB_PASSWORD=<DBPASSWORD>
ENV KC_HOSTNAME=localhost
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
ビルドプロセスには複数の段階が含まれます。
-
buildコマンドを実行してサーバーのビルドオプションを設定し、最適化されたイメージを作成します。 -
build段階で生成されたファイルが、新しいイメージにコピーされます。 - 最後のイメージで、ホスト名とデータベースの追加の設定オプションが設定されているため、コンテナーの実行時にそれらを再度設定する必要はありません。
-
エントリーポイントで、
kc.shにより、すべてのディストリビューションのサブコマンドがアクセス可能になります。
カスタムプロバイダーは、JAR ファイルを /opt/keycloak/providers ディレクトリーに含めるステップを定義するだけでインストールできます。このステップは、以下のように、build コマンドを RUNs 行の前に配置する必要があります。
# A example build step that downloads a JAR file from a URL and adds it to the providers directory
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4 as builder
...
# Add the provider JAR file to the providers directory
ADD --chown=keycloak:keycloak --chmod=644 <MY_PROVIDER_JAR_URL> /opt/keycloak/providers/myprovider.jar
...
# Context: RUN the build command
RUN /opt/keycloak/bin/kc.sh build
5.1.2. 追加の RPM パッケージをインストールする リンクのコピーリンクがクリップボードにコピーされました!
FROM registry.redhat.io/rhbk/keycloak-rhel9 段階で新しいソフトウェアをインストールしようとすると、microdnf、dnf、さらには rpm がインストールされていないことがわかります。また、利用できるパッケージは非常に少なく、bash シェルと Red Hat build of Keycloak 自体の実行に必要なものしかありません。これは、Red Hat build of Keycloak の攻撃対象領域を減らすセキュリティー強化対策によるものです。
まず、ユースケースを別の方法で実装できるかどうかを検討し、なるべく最終的なコンテナーへの新規 RPM のインストールを回避します。
-
Containerfile 内の
RUN curl命令は、リモート URL をネイティブにサポートしているため、ADDに置き換えることができます。 -
一部の一般的な CLI ツールは、Linux ファイルシステムを創造的に使用することで置き換えることができます。たとえば、
ip addr show tap0はcat /sys/class/net/tap0/addressにすることができます。 - RPM を必要とするタスクはイメージビルドの前の段階に移動し、代わりに結果をコピーできます。
以下は例です。前のビルド段階で update-ca-trust を実行し、後の段階に結果をコピーします。
FROM registry.access.redhat.com/ubi9 AS ubi-micro-build
COPY mycertificate.crt /etc/pki/ca-trust/source/anchors/mycertificate.crt
RUN update-ca-trust
FROM registry.redhat.io/rhbk/keycloak-rhel9
COPY --from=ubi-micro-build /etc/pki /etc/pki
絶対に必要な場合は、ubi-micro で確立された次の 2 段階のパターンに従い、新しい RPM をインストールできます。
FROM registry.access.redhat.com/ubi9 AS ubi-micro-build
RUN mkdir -p /mnt/rootfs
RUN dnf install --installroot /mnt/rootfs <package names go here> --releasever 9 --setopt install_weak_deps=false --nodocs -y && \
dnf --installroot /mnt/rootfs clean all && \
rpm --root /mnt/rootfs -e --nodeps setup
FROM registry.redhat.io/rhbk/keycloak-rhel9
COPY --from=ubi-micro-build /mnt/rootfs /
このアプローチでは chroot (/mnt/rootfs) を使用します。これにより、指定したパッケージとその依存関係のみがインストールされるため、当て推量で作業することなく、それらを第 2 段階に簡単にコピーできます。
一部のパッケージには、依存関係の大きなツリーがあります。新しい RPM をインストールすると、コンテナーの攻撃対象領域が意図せず増大する可能性があります。インストールされているパッケージのリストを慎重に確認してください。
5.1.3. カスタム ENTRYPOINT シェルスクリプト リンクのコピーリンクがクリップボードにコピーされました!
カスタムエントリーポイントスクリプトを使用する場合は、グレースフルなシャットダウンに不可欠な終了シグナルを受信するために、Red Hat build of Keycloak を exec で起動します。
ENTRYPOINT シェルスクリプトの正しいアプローチ
#!/bin/bash
# (add your custom logic here)
# Run the 'exec' command as the last step of the script.
# As it replaces the current shell process, no additional shell commands will run after the 'exec' command.
exec /opt/keycloak/bin/kc.sh start "$@"
exec を使用しない場合、シェルスクリプトはコンテナー内で PID 1 のままとなり、SIGTERM などのシグナルが Red Hat build of Keycloak に到達するのをブロックします。これにより、グレースフルなシャットダウンが妨げられ、キャッシュの不整合やデータの損失が発生する可能性があります。
5.1.4. コンテナーイメージのビルド リンクのコピーリンクがクリップボードにコピーされました!
実際のコンテナーイメージをビルドするには、Containerfile を含むディレクトリーから次のコマンドを実行します。
podman build . -t mykeycloak -f Containerfile
Podman はイメージの作成またはカスタマイズにのみ使用できます。実稼働環境での Red Hat build of Keycloak の実行に Podman はサポートされていません。
5.1.5. 最適化された Red Hat build of Keycloak コンテナーイメージの起動 リンクのコピーリンクがクリップボードにコピーされました!
イメージを起動するには、以下を実行します。
podman run --name mykeycloak -p 8443:8443 -p 9000:9000 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \
mykeycloak \
start --optimized --hostname=localhost
Red Hat build of Keycloak は、セキュアな HTTPS 通信のみを使用して実稼働モードで開始され、https://localhost:8443 で使用できます。
ヘルスチェックエンドポイントは、https://localhost:9000/health、https://localhost:9000/health/ready、https://localhost:9000/health/live で使用できます。
https://localhost:9000/metrics を開くと、モニタリングソリューションで使用できる運用メトリクスを含むページが表示されます。
5.1.6. Docker の既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
-
RUN dnf installコマンドに時間がかかり過ぎていると思われる場合は、Docker systemd サービスのファイル制限LimitNOFILEが正しく設定されていない可能性があります。適切な値 (1024000 など) を使用するようにサービス設定を更新するか、RUN コマンドでulimitを直接使用してください。
...
RUN ulimit -n 1024000 && dnf install --installroot ...
...
-
プロバイダー JAR が含まれており、プロバイダー JAR が変更されたという通知が表示されてコンテナーが
start --optimizedに失敗する場合、Docker がファイル変更タイムスタンプを切り捨てたか、buildコマンドで記録された内容から実行時に表示される内容に変更したことが失敗の原因です。その場合は、buildを実行する前に、touchコマンドを使用して選択した既知のタイムスタンプをイメージが使用するように強制する必要があります。
...
# ADD or copy one or more provider jars
ADD --chown=keycloak:keycloak --chmod=644 some-jar.jar /opt/keycloak/providers/
...
RUN touch -m --date=@1743465600 /opt/keycloak/providers/*
RUN /opt/keycloak/bin/kc.sh build
...
5.2. コンテナーを別のポートに公開する リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、サーバーはポート 8080 と 8443 を使用して、それぞれ http 要求と https 要求をリッスンします。
別のポートを使用してコンテナーを公開する場合は、それに応じて hostname を設定する必要があります。
- デフォルトポート以外のポートを使用してコンテナーを公開する
podman run --name mykeycloak -p 3000:8443 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \
mykeycloak \
start --optimized --hostname=https://localhost:3000
hostname オプションを完全な URL に設定すると、https://localhost:3000 でサーバーにアクセスできるようになります。
5.3. 開発モードで Red Hat build of Keycloak を試用する リンクのコピーリンクがクリップボードにコピーされました!
開発またはテスト目的でコンテナーから Red Hat build of Keycloak を試用する場合、開発モードが最適です。start-dev コマンドを使用します。
podman run --name mykeycloak -p 127.0.0.1:8080:8080 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \
registry.redhat.io/rhbk/keycloak-rhel9:26.4 \
start-dev
このコマンドを呼び出すと、Red Hat build of Keycloak サーバーが開発モードで起動します。
このモードはデフォルトがセキュアではないため、実稼働環境では絶対に使用しないでください。Red Hat build of Keycloak を実稼働環境で実行する方法の詳細は、実稼働環境向けの Red Hat build of Keycloak の設定 を参照してください。
5.4. 標準の Red Hat build of Keycloak コンテナーを実行する リンクのコピーリンクがクリップボードにコピーされました!
イミュータブルインフラストラクチャーなどの概念に従い、コンテナーは定期的に再プロビジョニングする必要があります。これらの環境では、素早く起動するコンテナーが必要なため、前のセクションで説明したように、最適化されたイメージを作成する必要があります。ただし、環境に異なる要件がある場合は、start コマンドを実行するだけで標準の Red Hat build of Keycloak イメージを実行できます。以下に例を示します。
podman run --name mykeycloak -p 127.0.0.1:8080:8080 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \
registry.redhat.io/rhbk/keycloak-rhel9:26.4 \
start \
--hostname=localhost --http-enabled=true
--db=postgres --features=token-exchange \
--db-url=<JDBC-URL> --db-username=<DB-USER> --db-password=<DB-PASSWORD> \
--https-key-store-file=<file> --https-key-store-password=<password>
このコマンドを実行すると、最初にビルドオプションを検出して適用する Red Hat build of Keycloak サーバーが起動します。この例では、--db=postgres --features=token-exchange の行でデータベースベンダーが PostgreSQL に設定され、トークン交換機能が有効になります。
その後、Red Hat build of Keycloak が起動し、設定が環境に適用されます。このアプローチでは起動時間が大幅に増加し、ミュータブルなイメージが作成されますが、これはベストプラクティスではありません。
5.5. コンテナー内での実行時に初期の管理者認証情報を入力する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、ローカルネットワーク接続からのみ初期管理者ユーザーを作成できます。コンテナー内で実行する場合、これは当てはまりません。そのため、イメージ実行時に次の環境変数を指定する必要があります。
# setting the admin username
-e KC_BOOTSTRAP_ADMIN_USERNAME=<admin-user-name>
# setting the initial password
-e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me
5.6. 起動時にレルムをインポートする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak コンテナーには、ディレクトリー /opt/keycloak/data/import があります。ボリュームマウントまたはその他の手段でこのディレクトリーに 1 つ以上のインポートファイルを配置し、起動引数 --import-realm を追加すると、Red Hat build of Keycloak コンテナーが起動時にそのデータをインポートします。これは、開発モードでのみの使用が合理的です。
podman run --name keycloak_unoptimized -p 127.0.0.1:8080:8080 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \
-v /path/to/realm/data:/opt/keycloak/data/import \
registry.redhat.io/rhbk/keycloak-rhel9:26.4 \
start-dev --import-realm
管理者ブートストラッププロセスの機能強化は、誰でも参加できる GitHub ディスカッション があります。お気軽にご参加ください。
5.7. 異なるメモリー設定を指定する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak コンテナーでは、初期ヒープサイズと最大ヒープサイズにハードコード値を指定せずに、コンテナーの合計メモリーに対する相対値を使用します。この動作は、JVM オプション -XX:MaxRAMPercentage=70 および -XX:InitialRAMPercentage=50 によって実現されます。
-XX:MaxRAMPercentage オプションは、最大ヒープサイズをコンテナーメモリーの合計の 70% として表します。-XX:InitialRAMPercentage オプションは、初期ヒープサイズをコンテナーメモリー全体の 50% として表します。これらの値は、Red Hat build of Keycloak メモリー管理の詳細な分析に基づいて選択されています。
ヒープサイズはコンテナーの合計メモリーに基づいて動的に計算されるため、コンテナーの メモリー制限を必ず設定 してください。以前は、最大ヒープサイズは 512 MB に設定されていましたが、同じ値に近づけるには、メモリー制限を少なくとも 750 MB に設定する必要があります。小規模な実稼働環境対応のデプロイメントの場合、推奨されるメモリー制限は 2 GB です。
ヒープに関連する JVM オプションは、環境変数 JAVA_OPTS_KC_HEAP を設定することによってオーバーライドされる可能性があります。JAVA_OPTS_KC_HEAP のデフォルト値は、kc.sh または kc.bat スクリプトのソースコードにあります。
たとえば、環境変数とメモリー制限を次のように指定できます。
podman run --name mykeycloak -p 127.0.0.1:8080:8080 -m 1g \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \
-e JAVA_OPTS_KC_HEAP="-XX:MaxHeapFreeRatio=30 -XX:MaxRAMPercentage=65" \
registry.redhat.io/rhbk/keycloak-rhel9:26.4 \
start-dev
メモリー制限が設定されていない場合、ヒープサイズがコンテナーの合計メモリーの最大 70% まで増加する可能性があるため、メモリー消費量が急激に増加します。JVM がメモリーを割り当てると、現在の Red Hat build of Keycloak の GC 設定により、そのメモリーが消極的に OS に返されます。
5.8. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
|
|
|
| |
|
| |
|
| |
| 🛠
|
|
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 | |
|
| |
|
| (デフォルト) |
| 🛠
|
|
| 🛠
|
|
第6章 TLS の設定 リンクのコピーリンクがクリップボードにコピーされました!
受信リクエストと送信リクエストに対して Red Hat build of Keycloak の https 証明書を設定します。
Transport Layer Security (略称: TLS) は、保護されたチャネル上でデータを交換するために重要です。実稼働環境では、Red Hat build of Keycloak が他のアプリケーションと交換する内容の中核に機密データが含まれるため、HTTP 経由で Red Hat build of Keycloak エンドポイントを公開しないでください。この章では、HTTPS/TLS を使用するように Red Hat build of Keycloak を設定する方法を説明します。
Red Hat build of Keycloak は、PEM 形式のファイルを使用するか、Java Keystore から、必要な証明書インフラストラクチャーをロードするように設定できます。両方の手段が設定されている場合、PEM ファイルが Java Keystore よりも優先されます。
6.1. PEM 形式の証明書を指定する リンクのコピーリンクがクリップボードにコピーされました!
PEM 形式の証明書ファイルと秘密鍵ファイルのペアを使用する場合は、次のコマンドを実行して、それらを使用するように Red Hat build of Keycloak を設定します。
bin/kc.[sh|bat] start --https-certificate-file=/path/to/certfile.pem --https-certificate-key-file=/path/to/keyfile.pem
Red Hat build of Keycloak は、メモリー内のこれらのファイルからキーストアを作成し、以降はこのキーストアを使用します。
6.2. キーストアの提供 リンクのコピーリンクがクリップボードにコピーされました!
キーストアファイルが明示的に設定されておらず、http-enabled が false に設定されている場合、Red Hat build of Keycloak は conf/server.keystore ファイルを探します。
代わりに、次のコマンドを実行して既存のキーストアを使用することもできます。
bin/kc.[sh|bat] start --https-key-store-file=/path/to/existing-keystore-file
キーストアで認識されるファイル拡張子:
-
pkcs12 ファイルの場合は
.p12、.pkcs12、.pfx -
jks ファイルの場合は
.jks、および.keystore -
pem ファイルの場合は
.key、.crt、.pem
ファイルタイプに一致する拡張子がキーストアにない場合は、https-key-store-type オプションも設定する必要があります。
6.2.1. Keystore のパスワードを設定する リンクのコピーリンクがクリップボードにコピーされました!
https-key-store-password オプションを使用して、キーストアにセキュアなパスワードを設定できます。
bin/kc.[sh|bat] start --https-key-store-password=<value>
パスワードが設定されていない場合は、デフォルトのパスワードである password が使用されます。
6.2.1.1. 認証情報の保護 リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用するか、conf/keycloak.conf ファイルにパスワードを追加するなどして、プレーンテキストでのパスワード設定を回避してください。代わりに、vault/マウントされたシークレットを使用するなどの適切な方法を使用してください。詳細は、vault の使用 および 実稼働環境向けの Red Hat build of Keycloak の設定 を参照してください。
6.3. TLS プロトコルの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Red Hat build of Keycloak は非推奨の TLS プロトコルを有効にしません。クライアントが非推奨のプロトコルのみをサポートしている場合は、クライアントのアップグレードを検討してください。一時的な回避策として、次のコマンドを実行し、非推奨のプロトコルを有効にできます。
bin/kc.[sh|bat] start --https-protocols=<protocol>[,<protocol>]
たとえば、TLSv1.3 のみを有効にするには、kc.sh start --https-protocols=TLSv1.3 のコマンドを使用します。
6.4. HTTPS ポートの切り替え リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、ポート 8443 で HTTPS トラフィックをリッスンします。このポートを変更するには、次のコマンドを使用します。
bin/kc.[sh|bat] start --https-port=<port>
6.5. 証明書とキーの再ロード リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Red Hat build of Keycloak は、https-* オプションで指定された証明書、キー、およびキーストアを 1 時間ごとに再ロードします。サーバーキーを頻繁にローテーションする必要がある環境では、サーバーを再起動せずにローテーションを実行できます。https-certificates-reload-period オプションを使用してデフォルトをオーバーライドできます。https-* オプションによって参照されるキーストア、トラストストア、および証明書ファイルを再ロードする間隔。値は、java.time.Duration 値、秒数を表す整数、または整数の後に時間単位 [ms、h、m、s、d] のいずれかが続く値になります。30 秒より長くする必要があります。無効にするには -1 を使用します。
6.6. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
| |
|
| |
|
| (デフォルト) |
|
| |
|
| |
|
| (デフォルト) |
|
| |
|
| (デフォルト) |
|
|
|
6.6.1. 管理サーバー リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
http-management-scheme が継承されている場合にのみ使用可能です。 | (デフォルト) |
|
http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
http-management-scheme が継承されている場合にのみ使用可能です。 | (デフォルト) |
第7章 ホスト名 (v2) の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak によって公開されるフロントエンドおよびバックチャネルのエンドポイントを設定します。
7.1. ホスト名オプションの設定の重要性 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Red Hat build of Keycloak では hostname オプションの設定が必須であり、URL は動的に解決されません。これはセキュリティー対策です。
Red Hat build of Keycloak は、OIDC Discovery エンドポイントを通じて、またはメール内のパスワードリセットリンクの一部として、独自の URL を自由に公開します。ホスト名がホスト名ヘッダーから動的に解釈されると、潜在的な攻撃者にメール内の URL を操作し、ユーザーを攻撃者の偽のドメインにリダイレクトし、アクショントークンやパスワードなどの機密データを盗む機会を与える可能性があります。
hostname オプションを明示的に設定することで、不正な発行者によってトークンが発行される状況を回避します。次のコマンドを使用して、明示的なホスト名でサーバーを起動できます。
bin/kc.[sh|bat] start --hostname my.keycloak.org
この例では、Red Hat build of Keycloak インスタンスを実稼働モードで起動します。通信を保護するには、公開証明書と秘密鍵が必要です。詳細は、実稼働環境向けの Red Hat build of Keycloak の設定 を参照してください。
7.2. ホスト名オプションの特定の部分の定義 リンクのコピーリンクがクリップボードにコピーされました!
前の例で示したように、スキームとポートは明示的には必要ありません。このような場合、Red Hat build of Keycloak はこれらの側面を自動的に処理します。たとえば、上記の例では、サーバーは https://my.keycloak.org:8443 でアクセスできます。ただし、リバースプロキシーは通常、デフォルトのポート (例: 443) で Red Hat build of Keycloak を公開します。その場合、URL の一部を動的に保つのではなく、hostname オプションで完全な URL を指定することが望ましいです。その後、次のコマンドでサーバーを起動できます。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org
同様に、リバースプロキシーは、異なるコンテキストパスで Red Hat build of Keycloak を公開する場合があります。hostname および hostname-admin オプションを使用して、それを反映するように Red Hat build of Keycloak を設定できます。以下の例を参照してください。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org:123/auth
7.3. クライアント間の通信に内部 URL を利用する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak には、バックチャネルリクエスト用に別の URL を提供できる機能があり、フロントチャネルリクエスト用のパブリック URL の使用を維持しながら内部通信を可能にします。さらに、バックチャネルは受信ヘッダーに基づいて動的に解決されます。以下の例を考慮してください。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org --hostname-backchannel-dynamic true
この方法では、クライアントと呼ばれるアプリケーションは、ローカルネットワークを介して Red Hat build of Keycloak に接続できますが、サーバーは https://my.keycloak.org でパブリックにアクセス可能なままになります。
7.4. エッジ TLS Termination の使用 リンクのコピーリンクがクリップボードにコピーされました!
ご覧のとおり、HTTPS プロトコルは、Red Hat build of Keycloak のセキュリティーのベストプラクティスへの取り組みに準拠したデフォルトの選択です。ただし、Red Hat build of Keycloak では、必要に応じてユーザーが HTTP を選択できる柔軟性も提供されます。これは、HTTP リスナーを指定するだけで実現できます。詳細は、TLS の設定 を参照してください。エッジ TLS-termination プロキシーを使用すると、次のようにサーバーを起動できます。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org --http-enabled true
この設定の結果、プロキシーが HTTP とポート 8080 を使用してインスタンスと対話する一方で、HTTPS 経由で https://my.keycloak.org にある Red Hat build of Keycloak に引き続きアクセスできます。
7.5. リバースプロキシーの使用 リンクのコピーリンクがクリップボードにコピーされました!
プロキシーが http または再暗号化された TLS 要求を転送する場合は、proxy-headers オプションを設定する必要があります。ホスト名の設定に応じて、URL の一部またはすべてが動的に決定される場合があります。
forwarded または xforwarded のいずれかを選択した場合は、リバースプロキシーによって Forwarded または X-Forwarded-* ヘッダーが適切に設定して上書きされることを確認してください。これらのヘッダーを設定するには、リバースプロキシーのドキュメントを参照してください。設定を誤ると、Red Hat build of Keycloak がセキュリティー上の脆弱性にさらされることになります。
7.5.1. 完全に動的な URL。 リンクのコピーリンクがクリップボードにコピーされました!
たとえば、リバースプロキシーが Forwarded ヘッダーを正しく設定し、ホスト名をハードコードしたくない場合は、Red Hat build of Keycloak でこれに対応できます。次のようにサーバーを単に起動する必要があります。
bin/kc.[sh|bat] start --hostname-strict false --proxy-headers forwarded
この設定では、サーバーは Forwarded ヘッダーによって設定された値を考慮します。これは、すべてのエンドポイントが動的に解決されることも意味します。
7.5.2. 部分的に動的な URL リンクのコピーリンクがクリップボードにコピーされました!
hostname オプションが完全な URL として指定されていない場合、proxy-headers オプションを使用して URL を部分的に動的に解決することもできます。以下に例を示します。
bin/kc.[sh|bat] start --hostname my.keycloak.org --proxy-headers xforwarded
この場合、スキームおよびポートは X-Forwarded-* ヘッダーから動的に解決されますが、ホスト名は my.keycloak.org として静的に定義されます。
7.5.3. 固定 URL リンクのコピーリンクがクリップボードにコピーされました!
proxy-headers は、ヘッダーがリクエストの発信元を判断するために使用されるため、hostname を完全な URL に設定しても引き続き有効です。以下に例を示します。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org --proxy-headers xforwarded
この場合、X-Forwarded-* ヘッダーからは何も動的に解決されませんが、X-Forwarded-* ヘッダーはリクエストの正しい送信元を判別するために使用されます。
7.6. 管理コンソールを別のホスト名で公開する リンクのコピーリンクがクリップボードにコピーされました!
別のホストで管理コンソールを公開する場合は、次のコマンドを使用します。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org --hostname-admin https://admin.my.keycloak.org:8443
これにより、バックエンドは引き続き https://my.keycloak.org を使用しながら、https://my.keycloak.org にある Red Hat build of Keycloak と https://admin.my.keycloak.org:8443 にある管理コンソールにアクセスできるようになります。
ホスト名とプロキシーオプションによって、サーバーがリッスンするポートが変更されないことに注意してください。代わりに、プロキシーの前で使用される JavaScript および CSS リンク、OIDC の既知のエンドポイント、リダイレクト URI などの静的リソースのポートのみ変更します。サーバーがリッスンしている実際のポートを変更するには、HTTP 設定オプションを使用する必要があります。詳細は、すべての設定 を参照してください。
hostname-admin オプションを使用しても、hostname オプションで指定されたフロントエンド URL を通じて管理 REST API エンドポイントへのアクセスを防ぐことはできません。管理 REST API へのアクセスを制限する場合は、リバースプロキシーレベルで実行する必要があります。管理コンソールは、hostname-admin オプションで指定された URL を使用して暗黙的に API にアクセスします。
7.7. 背景 - サーバーエンドポイント リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、それぞれ目的が異なる複数のエンドポイントを公開します。これらは通常、アプリケーション間の通信やサーバーの管理に使用されます。3 つの主要なエンドポイントグループを認識しています。
- フロントエンド
- バックエンド
- 管理
これらのエンドポイントのいずれかを使用する場合は、ベース URL を設定する必要があります。ベース URL は複数の部分で構成されます。
- スキーム (例: https プロトコル)
- ホスト名 (例: example.keycloak.org)
- ポート (例: 8443)
- パス (例: /auth)
各グループのベース URL は、トークンの発行方法と検証方法、ユーザーを Red Hat build of Keycloak にリダイレクトする必要があるアクション (メールリンクを通じてパスワードをリセットする場合など) のリンクの作成方法、さらにはアプリケーションが realms/{realm-name}/.well-known/openid-configuration から OpenID Connect Discovery Document を取得する際にこれらのエンドポイントを検出する方法に重要な影響を与えます。
7.7.1. フロントエンド リンクのコピーリンクがクリップボードにコピーされました!
ユーザーとアプリケーションは、フロントエンド URL を使用して、フロントチャネル経由で Red Hat build of Keycloak にアクセスします。フロントチャネルは、公開されているアクセス可能な通信チャネルです。たとえば、ブラウザーベースのフロー (ログインページへのアクセス、パスワードをリセットするためのリンクのクリック、トークンのバインド) は、フロントチャネルリクエストと見なすことができます。
フロントエンド URL 経由で Red Hat build of Keycloak にアクセスできるようにするには、hostname オプションを設定する必要があります。
bin/kc.[sh|bat] start --hostname my.keycloak.org
7.7.2. バックエンド リンクのコピーリンクがクリップボードにコピーされました!
バックエンドエンドポイントは、パブリックドメインまたはプライベートネットワークを通じてアクセスできるエンドポイントです。これらは、Red Hat build of Keycloak とクライアント (Red Hat build of Keycloak によって保護されたアプリケーション) 間の直接的なバックエンド通信に関連しています。このような通信は、リバースプロキシーを回避してローカルネットワーク経由で行われる可能性があります。このグループに属するエンドポイントの例としては、認可エンドポイント、トークンおよびトークンイントロスペクションエンドポイント、ユーザー情報エンドポイント、JWKS URI エンドポイントなどがあります。
hostname-backchannel-dynamic オプションのデフォルト値は false です。これは、バックチャネル URL がフロントチャネル URL と同じであることを意味します。次のオプションを設定することで、受信リクエストヘッダーからのバックチャネル URL の動的な解決を有効にできます。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org --hostname-backchannel-dynamic true
hostname オプションは URL に設定する必要があることに注意してください。詳細は、以下の 「検証」 セクションを参照してください。
7.7.3. 管理 リンクのコピーリンクがクリップボードにコピーされました!
ベースフロントエンド URL と同様に、管理コンソールのリソースとエンドポイントのベース URL も設定できます。サーバーは、特定の URL を使用して管理コンソールと静的リソースを公開します。この URL は、リダイレクト URL、リソース (CSS、JS) のロード、管理 REST API などに使用されます。これは、hostname-admin オプションを設定することで実行できます。
bin/kc.[sh|bat] start --hostname https://my.keycloak.org --hostname-admin https://admin.my.keycloak.org:8443
繰り返しますが、hostname オプションは URL に設定する必要があります。詳細は、以下の 「検証」 セクションを参照してください。
7.8. URL を解決するためのソース リンクのコピーリンクがクリップボードにコピーされました!
前のセクションで示したように、URL はいくつかの方法で解決できます。動的に生成することも、ハードコードすることも、あるいはその両方の組み合わせで解決することもできます。
受信リクエストからの動的:
- ホストヘッダー、スキーム、サーバーポート、コンテキストパス
-
プロキシー設定ヘッダー:
ForwardedおよびX-Forwarded-*
ハードコード:
-
サーバー全体の設定 (例:
hostname、hostname-adminなど) - フロントエンド URL のレルム設定
-
サーバー全体の設定 (例:
7.9. 検証 リンクのコピーリンクがクリップボードにコピーされました!
-
hostnameURL とhostname-adminURL では、スキームとホスト名を含む完全な URL が使用されていることが検証されます。ポートは存在する場合にのみ検証され、存在しない場合は指定されたプロトコルのデフォルトポート (80 または 443) が想定されます。 プロダクションプロファイル (
kc.sh|bat start) では、--hostnameまたは--hostname-strict falseのいずれかを明示的に設定する必要があります。-
これは、
--hostname-strict falseがデフォルト値である dev プロファイル (kc.sh|bat start-dev) には適用されません。
-
これは、
--hostnameが設定されていない場合:-
hostname-backchannel-dynamicは、false に設定する必要があります。 -
hostname-strictは false に設定する必要があります。
-
-
hostname-adminが設定されている場合、hostnameは (ホスト名だけではなく) URL に設定する必要があります。そうしないと、Red Hat build of Keycloak は、管理コンソールにアクセスするときに正しいフロントエンド URL (ポートなどを含む) が何であるかを認識できません。 -
hostname-backchannel-dynamicが true に設定されている場合、hostnameは (ホスト名だけでなく) URL に設定する必要があります。そうしないと、Red Hat build of Keycloak は、動的に解決されるバックチャネル経由でアクセスされた際に、正しいフロントエンド URL (ポートなどを含む) が何であるかを認識できません。
さらに、ホスト名が設定されている場合、hostname-strict は無視されます。
7.10. トラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
ホスト名の設定に対してトラブルシューティングを行うには、次のように有効にできる専用のデバッグツールを使用します。
Red Hat build of Keycloak の設定:
bin/kc.[sh|bat] start --hostname=mykeycloak --hostname-debug=true
Red Hat build of Keycloak が正常に起動したら、ブラウザーを開いて http://mykeycloak:8080/realms/<your-realm>/hostname-debug にアクセスします。
7.11. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 | |
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 | |
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 |
|
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 |
|
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 |
|
第8章 リバースプロキシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
リバースプロキシー、API ゲートウェイ、またはロードバランサーを使用して Red Hat build of Keycloak を設定します。
分散環境では、頻繁にリバースプロキシーの使用が必要になります。Red Hat build of Keycloak は、このような環境とのセキュアな統合を実現するためのオプションをいくつか備えています。
8.1. プロキシーするポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak はデフォルトで次のポートで実行されます。
-
8443(--http-enabled=trueで明示的に HTTP を有効にした場合は8080) -
9000
ポート 8443 (HTTP が有効な場合は 8080) は、ホスト名 (v2) の設定 の章で説明されているように、管理 UI、アカウントコンソール、SAML および OIDC エンドポイント、および管理 REST API に使用されます。
ポート 9000 は管理に使用されます。これには、管理インターフェイスの設定 の章で説明されているように、ヘルスチェックとメトリクスのエンドポイントが含まれます。
実稼働環境向けの Red Hat build of Keycloak の設定 で説明されているように、フロントエンド/バックエンド用と管理用に異なるホスト名を使用する場合でも、プロキシ経由で通信させる必要があるのはポート 8443 (または 8080) だけです。ポート 9000 はプロキシー経由にしないでください。このポートはヘルスチェックとメトリクスが直接使用し、このような情報を外部の呼び出し元に公開するべきではないためです。
8.2. リバースプロキシーヘッダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、proxy-headers オプションに基づいてリバースプロキシーヘッダーを解析します。このオプションは、次のいくつかの値を受け入れます。
- デフォルトでは、オプションが指定されていない場合、リバースプロキシーヘッダーは解析されません。これは、プロキシーが使用されていない場合、または https パススルーを使用している場合に使用する必要があります。
-
forwardedは、RFC7239 に従ってForwardedヘッダーの解析を有効にします。 -
xforwardedは、X-Forwarded-For、X-Forwarded-Proto、X-Forwarded-Host、X-Forwarded-Portなどの非標準のX-Forwarded-*ヘッダーの解析を有効にします。
https パススルー以外の目的でリバースプロキシーを使用しており、proxy-headers オプションを設定していない場合は、デフォルトでは、オリジンチェックを実行するプロキシー経由の要求に対して 403 Forbidden 応答が表示されます。
以下に例を示します。
bin/kc.[sh|bat] start --proxy-headers forwarded
forwarded または xforwarded のいずれかを選択した場合は、リバースプロキシーによって Forwarded または X-Forwarded-* ヘッダーが適切に設定して上書きされることを確認してください。これらのヘッダーを設定するには、リバースプロキシーのドキュメントを参照してください。https パススルーでは forwarded または xforwarded を使用しないでください。設定を誤ると、Red Hat build of Keycloak がセキュリティー上の脆弱性にさらされることになります。
クライアントアドレスが、リバースプロキシーにより Forwarded ヘッダーまたは X-Forwarded-For ヘッダーを介して適切に設定されていることを、特に注意して確認してください。このヘッダーが正しく設定されていない場合、不正なクライアントがこのヘッダーを設定し、クライアントが実際のアドレスとは異なる IP アドレスから接続しているという誤った認識を Red Hat build of Keycloak が持つ可能性があります。IP アドレスの拒否リストまたは許可リストを作成する場合、このような注意はさらに重要です。
xforwarded 設定を使用する場合、X-Forwarded-Port は X-Forwarded-Host に含まれるポートよりも優先されます。
TLS 接続がリバースプロキシー (Edge Termination) で終了する場合は、http-enabled 設定で HTTP を有効にする必要があります。
8.3. リバースプロキシー上のさまざまなコンテキストパス リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、Red Hat build of Keycloak が設定されているのと同じコンテキストパスで、リバースプロキシーを通じて公開されることが想定されています。デフォルトでは、Red Hat build of Keycloak はルート (/) を通じて公開されます。これは、/ 上のリバースプロキシーを通じての公開が想定されていることを意味します。このような場合には、hostname オプションに完全な URL を使用できます。たとえば、Red Hat build of Keycloak が /auth のリバースプロキシーを通じて公開されている場合は、--hostname=https://my.keycloak.org/auth を使用します。
管理 REST API およびコンソールを含む異なるホスト名またはコンテキストパスで Red Hat build of Keycloak を公開する方法の詳細は、ホスト名 (v2) の設定 を参照してください。
あるいは、http-relative-path オプションを使用して、Red Hat build of Keycloak 自体のコンテキストパスをリバースプロキシーのコンテキストパスに一致するように変更することもできます。これにより、リバースプロキシーが使用するコンテキストパスと一致するように、Red Hat build of Keycloak 自体のコンテキストパスが変更されます。
8.4. スティッキーセッションの有効化 リンクのコピーリンクがクリップボードにコピーされました!
通常のクラスターデプロイメントは、プライベートネットワークにあるロードバランサー (リバースプロキシー) および 2 つ以上の Red Hat build of Keycloak サーバーで構成されます。パフォーマンスの観点からは、ロードバランサーが特定のブラウザーセッションに関連するすべての要求を同じ Red Hat build of Keycloak バックエンドノードに転送すると便利です。
なぜなら、Red Hat build of Keycloak は、現在の認証セッションとユーザーセッションに関連するデータを保存する裏で、Infinispan の分散キャッシュを使用しているためです。Infinispan 分散キャッシュは、所有者の数が制限されて設定されています。つまり、セッション関連のデータは一部のクラスターノードにのみ保存され、他のノードがそのデータにアクセスするにはリモートでデータを検索する必要があります。
たとえば、ID 123 の認証セッションが node1 の Infinispan キャッシュに保存され、node2 がこのセッションを検索する必要がある場合は、特定のセッションエンティティーを返すために、ネットワーク経由で要求を node1 に送信する必要があります。
特定のセッションエンティティーが常にローカルで利用可能な場合に利点があります。これは、スティッキーセッションを使用して実行できます。パブリックフロントエンドロードバランサーと 2 つのバックエンド Red Hat build of Keycloak ノードを持つクラスター環境のワークフローは次のようになります。
- ユーザーは、Red Hat build of Keycloak のログイン画面を表示するために、最初の要求を送信します。
- この要求はフロントエンドロードバランサーにより提供されます。このロードバランサーは、これをランダムなノード (例: node1) に転送します。厳密に言えば、ノードはランダムである必要はなく、他の基準 (クライアント IP アドレスなど) に従って選択できます。これらはすべて、基盤のロードバランサーの実装および設定 (逆引きプロキシー) によって異なります。
- Red Hat build of Keycloak は、ランダム ID (例: 123) で認証セッションを作成し、Infinispan キャッシュに保存します。
- Infinispan の分散キャッシュは、セッション ID のハッシュに基づいてセッションのプライマリー所有者を割り当てます。詳細は、Infinispan のドキュメントを参照してください。Infinispan が、このセッションの所有者として node2 を割り当てたとします。
- Red Hat build of Keycloak は、<session-id>.<owner-node-id> のような形式で cookie AUTH_SESSION_ID を作成します。この例では、123.node2 になります。
- ブラウザーで、Red Hat build of Keycloak ログイン画面と cookie (AUTH_SESSION_ID) を持つユーザーに応答が返されます。
この観点から、ロードバランサーが次の要求をすべて node2 に転送することは有用です。なぜなら、これは ID 123 の認証セッションの所有者であるノードであり、Infinispan がこのセッションをローカルで検索できるからです。認証が終了すると、認証セッションはユーザーセッションに変換されます。その場合も ID 123 と同じになるため、node2 に保存されます。
クラスターの設定にスティッキーセッションは必須ではありませんが、上記の理由でパフォーマンスの観点から推奨されます。ロードバランサーを設定して、AUTH_SESSION_ID cookie でスティッキーセッションを有効にする必要があります。この変更を行うための適切な手順は、ロードバランサーによって異なります。
プロキシーがバックエンドノードからの cookie を処理せずにセッションアフィニティーをサポートする場合は、ノードを cookie にアタッチせず、リバースプロキシー機能に依存するのみにするために、spi-sticky-session-encoder--infinispan--should-attach-route オプションを false に設定する必要があります。
bin/kc.[sh|bat] start --spi-sticky-session-encoder--infinispan--should-attach-route=false
デフォルトでは、spi-sticky-session-encoder--infinispan--should-attach-route オプションの値は true であるため、ノード名は cookie にアタッチされ、リバースプロキシーには後続の要求の送信先であるノードが示されます。
8.5. 公開されたパスに関する推奨事項 リンクのコピーリンクがクリップボードにコピーされました!
リバースプロキシーを使用する場合、Red Hat build of Keycloak では特定のパスのみを公開する必要があります。次の表は、公開が推奨されるパスを示しています。
| Red Hat build of Keycloak のパス | リバースプロキシーパス | 公開 | 理由 |
|---|---|---|---|
| / | - | いいえ | すべてのパスを公開すると、管理パスが不必要に公開されます。 |
| /admin/ | - | いいえ | 管理パスが公開されると、不要な攻撃ベクトルが発生します。 |
| /realms/ | /realms/ | はい | このパスは、たとえば OIDC エンドポイントなどで正しく機能するために必要です。 |
| /resources/ | /resources/ | はい | このパスは、アセットを正しく提供するために必要です。Red Hat build of Keycloak のパスではなく、CDN から提供される場合があります。 |
| /.well-known/ | /.well-known/ | はい | このパスは、RFC8414 を介して Authorization Server Metadata およびその他の情報を解決するために必要です。 |
| /metrics | - | いいえ | メトリクスが公開されると、不要な攻撃ベクトルが発生します。 |
| /health | - | いいえ | ヘルスチェックが公開されると、不要な攻撃ベクトルが発生します。 |
Red Hat build of Keycloak をリバースプロキシー/ゲートウェイのパブリック API のルートパス / で実行していることを前提としています。そうでない場合は、パスの前に任意の接頭辞を追加します。
サーバー上で http-relative-path を設定した場合、RFC8414 による検出を使用するには、次の手順に従います。接頭辞のない /.well-known/ パスを、サーバー上の接頭辞のあるパスにマッピングするようにリバースプロキシーを設定します。
8.6. 信頼できるプロキシー リンクのコピーリンクがクリップボードにコピーされました!
プロキシーヘッダーが信頼できるプロキシーからのみ使用されるようにするには、proxy-trusted-addresses オプションを、IP アドレス (IPv4 または IPv6) または Classless Inter-Domain Routing (CIDR) 表記のコンマ区切りリストに設定します。
以下に例を示します。
bin/kc.[sh|bat] start --proxy-headers forwarded --proxy-trusted-addresses=192.168.0.32,127.0.0.0/8
8.7. PROXY プロトコル リンクのコピーリンクがクリップボードにコピーされました!
proxy-protocol-enabled オプションは、プロキシーの背後からの要求を処理するときにサーバーが HA PROXY プロトコルを使用するかどうかを制御します。true に設定すると、返されるリモートアドレスは実際の接続クライアントからのアドレスになります。proxy-headers オプションを使用する場合、値を true にすることはできません。
これは、リクエストヘッダーを操作できないため、互換性のある https パススループロキシーの背後で実行する場合に役立ちます。
以下に例を示します。
bin/kc.[sh|bat] start --proxy-protocol-enabled true
8.8. クライアント証明書ルックアップを有効にする リンクのコピーリンクがクリップボードにコピーされました!
プロキシーが TLS Termination プロキシーとして設定されている場合、クライアント証明書情報は特定の HTTP 要求ヘッダーを通じてサーバーに転送され、クライアントの認証に使用されます。使用しているプロキシーに応じて、サーバーがクライアント証明書情報を取得する方法を設定できます。
X.509 認証のプロキシーヘッダーを介したクライアント証明書の検索は、セキュリティー上重要であると考えられます。誤って設定された場合、偽造されたクライアント証明書ヘッダーが認証に使用される可能性があります。プロキシーヘッダー経由で渡されるクライアント証明書情報が信頼できることを確認するために、特別な予防措置を講じる必要があります。
- ユースケースで再暗号化またはエッジ TLS Termination が必要かどうかを再確認してください。これは、クライアント証明書の検索にプロキシーヘッダーを使用することを意味します。X.509 認証が必要な場合は、プロキシーヘッダー経由で証明書を渡す必要がない TLS パススルーが、よりセキュアなオプションとして推奨されます。プロキシーヘッダーからのクライアント証明書の検索は、再暗号化とエッジ TLS Termination にのみ適用されます。
パススルーが選択できない場合は、次のセキュリティー対策を実装してください。
- Red Hat build of Keycloak が分離され、プロキシーからの接続のみを受け入れるようにネットワークを設定します。
-
プロキシーが、
spi-x509cert-lookup--<provider>--ssl-client-certオプションで設定されているヘッダーを必ず上書きするようにします。 -
spi-x509cert-lookup--<provider>--trust-proxy-verificationの設定には、特に注意してください。プロキシーが必ずクライアント証明書を検証すると信頼できる場合にのみ、これを有効にしてください。プロキシーがクライアント証明書チェーンを検証せずにspi-x509cert-lookup--<provider>--trust-proxy-verification=trueを設定すると、Red Hat build of Keycloak が偽造されたクライアント証明書が認証に使用できるという脆弱性に Red Hat build of Keycloak がさらされることになります。
サーバーは、次のような最も一般的な TLS Termination プロキシーのいくつかをサポートしています。
| Proxy | Provider |
|---|---|
| Apache HTTP サーバー | apache |
| HAProxy | haproxy |
| NGINX | nginx |
要求からクライアント証明書を取得する方法を設定するには、以下を実行する必要があります。
対応するプロキシープロバイダーを有効にする
bin/kc.[sh|bat] build --spi-x509cert-lookup--provider=<provider>
HTTP ヘッダーを設定する
bin/kc.[sh|bat] start --spi-x509cert-lookup--<provider>--ssl-client-cert=SSL_CLIENT_CERT --spi-x509cert-lookup--<provider>--ssl-cert-chain-prefix=CERT_CHAIN --spi-x509cert-lookup--<provider>-certificate-chain-length=10
HTTP ヘッダーを設定する際には、使用している値が、プロキシーによってクライアント証明書情報とともに転送されるヘッダーの名前に対応していることを確認する必要があります。
プロバイダーの設定に使用できるオプションは次のとおりです。
| オプション | 説明 |
|---|---|
| ssl-client-cert | クライアント証明書を保持するヘッダーの名前 |
| ssl-cert-chain-prefix |
チェーン内の追加の証明書を保持するヘッダーの接頭辞。チェーンの長さに応じて個々の証明書を取得するために使用されます。たとえば |
| certificate-chain-length | 証明書チェーンの最大長。 |
| trust-proxy-verification | 証明書を Red Hat build of Keycloak に転送して Red Hat build of Keycloak で検証するのではなく、信頼している NGINX プロキシー証明書の検証を有効にします。 |
| cert-is-url-encoded |
転送された証明書が URL エンコードされているかどうか。NGINX では、これは |
8.8.1. NGINX プロバイダーを設定する リンクのコピーリンクがクリップボードにコピーされました!
NGINX SSL/TLS モジュールは、クライアント証明書チェーンを公開しません。Red Hat build of Keycloak の NGINX 証明書ルックアッププロバイダーは、Red Hat build of Keycloak トラストストアを使用してそれを再構築します。
このプロバイダーを使用している場合は、Red Hat build of Keycloak トラストストアを設定する方法について、信頼済み証明書の設定 を参照してください。
8.9. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 | |
|
ホスト名:v2 機能が有効な場合にのみ使用可能です。 | |
| 🛠
| (デフォルト) |
|
|
|
|
|
|
|
|
第9章 データベースの設定 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー、クライアント、およびレルムデータを保存するために、Red Hat build of Keycloak のリレーショナルデータベースを設定します。
この章では、データをリレーショナルデータベースに保存するために、Red Hat build of Keycloak サーバーを設定する方法を説明します。
9.1. サポートされているデータベース リンクのコピーリンクがクリップボードにコピーされました!
サーバーには、各種データベースのサポートが組み込まれています。db 設定オプションの期待値を表示することで、使用可能なデータベースをクエリーできます。次の表は、サポート対象のデータベースとそのテスト済みバージョンを示しています。
| データベース | オプションの値 | テスト済みバージョン | サポート対象バージョン |
|---|---|---|---|
| MariaDB Server |
| 11.8 | 11.8 (LTS)、11.4 (LTS)、10.11 (LTS)、10.6 (LTS) |
| Microsoft SQL Server |
| 2022 | 2022、2019 |
| MySQL |
| 8.4 | 8.4 (LTS)、8.0 (LTS) |
| Oracle データベース |
| 23.5 | 23.x (つまり 23.5+)、19c (19.3+) (注記: 同じデータベースエンジンバージョン (例: 23.5+、19.3+) を使用している場合は、Oracle RAC もサポートされます) |
| PostgreSQL |
| 17 | 17.x、16.x、15.x、14.x |
| EnterpriseDB Advanced |
| 17 | 17 |
| Amazon Aurora PostgreSQL |
| 17.5 | 17.x、16.x、15.x |
| Azure SQL Database |
| latest | latest |
| Azure SQL Managed Instance |
| latest | latest |
基礎となるデータベース固有の Hibernate 方言が、記載されているバージョンと異なるバージョンの使用を許可していたとしても、それはサポートされる構成にはなりません。
デフォルトでは、サーバーは dev-file データベースを使用します。これはサーバーがデータを保持するために使用するデフォルトのデータベースであり、開発ユースケースに限定されています。dev-file データベースは実稼働環境のユースケースには適していないため、実稼働環境にデプロイする前に置き換える必要があります。
9.2. データベースドライバーのインストール リンクのコピーリンクがクリップボードにコピーされました!
データベースドライバーは、Oracle Database および Microsoft SQL Server ドライバーを除き、Red Hat build of Keycloak の一部として出荷されます。
これらのデータベースのいずれかに接続する場合は、不足している必要なドライバーを手動でインストールしてください。データベースドライバーがすでに含まれている別のデータベースに接続する場合は、このセクションをスキップしてください。
組み込みデータベースドライバーをオーバーライドしたり、独自のドライバーを提供したりすることは、サポート対象外と見なされます。サポートされている唯一の例外は、Oracle Database ドライバーのように、このガイドに明示的に文書化されているものです。
9.2.1. Oracle データベースドライバーをインストールする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak 用の Oracle Database ドライバーをインストールするには、以下を実行します。
次のいずれかのソースから
ojdbc17およびorai18nJAR ファイルをダウンロードします。- Oracle ドライバーダウンロードページ の 圧縮された JDBC driver and Companion Jars バージョン 23.6.0.24.10。
-
ojdbc17およびorai18n経由の Maven Central。 - 使用しているデータベースのデータベースベンダーが推奨するインストールメディア。
-
展開した配布物を実行する場合:
ojdbc17およびorai18nJAR ファイルを Red Hat build of Keycloak のprovidersフォルダーに配置します。 コンテナーを実行する場合: カスタムの Red Hat build of Keycloak イメージをビルドし、
providersフォルダーに JAR を追加します。Operator 用のカスタムイメージをビルドする場合、そのイメージは Red Hat build of Keycloak セットのすべてのビルド時オプションを使用して最適化されたイメージである必要があります。Red Hat build of Keycloak Operator で使用でき、Maven Central からダウンロードした Oracle Database JDBC ドライバーを含むイメージをビルドするための最小限の Containerfile は、次のようになります。
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4 ADD --chown=keycloak:keycloak --chmod=644 https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc17/23.6.0.24.10/ojdbc17-23.6.0.24.10.jar /opt/keycloak/providers/ojdbc17.jar ADD --chown=keycloak:keycloak --chmod=644 https://repo1.maven.org/maven2/com/oracle/database/nls/orai18n/23.6.0.24.10/orai18n-23.6.0.24.10.jar /opt/keycloak/providers/orai18n.jar # Setting the build parameter for the database: ENV KC_DB=oracle # Add all other build parameters needed, for example enable health and metrics: ENV KC_HEALTH_ENABLED=true ENV KC_METRICS_ENABLED=true # To be able to use the image with the Red Hat build of Keycloak Operator, it needs to be optimized, which requires Red Hat build of Keycloak's build step: RUN /opt/keycloak/bin/kc.sh build最適化されたイメージをビルドする方法の詳細は、コンテナー内での Red Hat build of Keycloak の実行 の章を参照してください。
次のセクションの説明に従い、引き続きデータベースを設定します。
9.2.2. Microsoft SQL Server ドライバーをインストールする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak 用の Microsoft SQL Server ドライバーをインストールするには、以下を実行します。
次のいずれかのソースから、
mssql-jdbcJAR ファイルをダウンロードします。- Microsoft JDBC Driver for SQL Server ページから、バージョンをダウンロードする。
-
mssql-jdbc経由の Maven Central。 - 使用しているデータベースのデータベースベンダーが推奨するインストールメディア。
-
展開済みのディストリビューションを実行している場合:
mssql-jdbcを、Red Hat build of Keycloak のprovidersフォルダーに配置します。 コンテナーを実行する場合: カスタムの Red Hat build of Keycloak イメージをビルドし、
providersフォルダーに JAR を追加します。Red Hat build of Keycloak Operator のカスタムイメージをビルドする場合、それらのイメージは Red Hat build of Keycloak セットのすべてのビルド時オプションを使用して最適化されたイメージである必要があります。Red Hat build of Keycloak Operator で使用でき、Maven Central からダウンロードした Microsoft SQL Server JDBC ドライバーを含むイメージをビルドするための最小限の Containerfile は、次のようになります。
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4 ADD --chown=keycloak:keycloak --chmod=644 https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/13.2.1.jre11/mssql-jdbc-13.2.1.jre11.jar /opt/keycloak/providers/mssql-jdbc.jar # Setting the build parameter for the database: ENV KC_DB=mssql # Add all other build parameters needed, for example enable health and metrics: ENV KC_HEALTH_ENABLED=true ENV KC_METRICS_ENABLED=true # To be able to use the image with the Red Hat build of Keycloak Operator, it needs to be optimized, which requires Red Hat build of Keycloak's build step: RUN /opt/keycloak/bin/kc.sh build最適化されたイメージをビルドする方法の詳細は、コンテナー内での Red Hat build of Keycloak の実行 の章を参照してください。
次のセクションの説明に従い、引き続きデータベースを設定します。
9.3. データベースを設定する リンクのコピーリンクがクリップボードにコピーされました!
サーバーでは、各サポート対象データベース用に、データベース設定を簡略化するための独自のデフォルトがいくつか提供されています。データベースホストや認証情報などの重要な設定を指定すると、設定が完了します。
設定は、build コマンドまたは start コマンドの実行中に設定できます。
buildコマンドの後に最適化されたstartコマンドを使用する (推奨)まず、データベースに接続するために必要な最小限の設定を
conf/keycloak.confで指定できます。# The database vendor. db=postgres # The username of the database user. db-username=keycloak # The password of the database user. db-password=change_me # Sets the hostname of the default JDBC URL of the chosen vendor db-url-host=keycloak-postgres次に、次のコマンドは、設定オプションに基づいて新しい最適化されたサーバーイメージを作成し、サーバーを起動します。
bin/kc.[sh|bat] build bin/kc.[sh|bat] start --optimizedstartコマンドのみ を使用する (--optimizedなし)bin/kc.[sh|bat] start --db postgres --db-url-host keycloak-postgres --db-username keycloak --db-password change_me
上記の例には、データベースへの接続に必要な最小限の設定が含まれていますが、データベースのパスワードが公開されるため、推奨されません。少なくともパスワードは、上記の conf/keycloak.conf、環境変数、またはキーストアを使用します。
デフォルトのスキーマは keycloak ですが、db-schema 設定オプションを使用して変更できます。
レルムのインポートとエクスポート、または 管理者アカウントのブートストラップと回復 を実行する際にデータベースを設定することもできます。
bin/kc.[sh|bat] import --help
bin/kc.[sh|bat] export --help
bin/kc.[sh|bat] bootstrap-admin --help
詳細は、Red Hat build of Keycloak の設定 を参照してください。
9.4. デフォルトの接続設定をオーバーライドする リンクのコピーリンクがクリップボードにコピーされました!
サーバーは、データベースとの通信の基盤となるテクノロジーとして JDBC を使用します。デフォルトの接続設定が不十分な場合は、db-url 設定オプションを使用して JDBC URL を指定できます。
以下は、PostgreSQL データベースのサンプルコマンドです。
bin/kc.[sh|bat] start --db postgres --db-url jdbc:postgresql://mypostgres/mydatabase
; などの特殊なシェル文字を含むコマンドを呼び出す場合は、CLI を使用して文字をエスケープする必要があることに注意してください。代わりに設定ファイルにそれを設定することが推奨されます。
9.5. データベースの Unicode サポートを設定する リンクのコピーリンクがクリップボードにコピーされました!
すべてのフィールドの Unicode サポートは、データベースが VARCHAR および CHAR フィールドで Unicode 文字セットの使用を許可するかどうかによって異なります。
- これらのフィールドが設定可能な場合、通常、Unicode はフィールド長を犠牲にして機能します。
- データベースが NVARCHAR フィールドと NCHAR フィールドでのみ Unicode をサポートしている場合、サーバースキーマは VARCHAR フィールドと CHAR フィールドを広範囲に使用するため、すべてのテキストフィールドの Unicode サポートは機能しない可能性があります。
データベーススキーマは、次の特殊フィールドでのみ Unicode 文字列のサポートを提供します。
- Realms: 表示名、HTML 表示名、ローカリゼーションテキスト (キーと値)
- Federation プロバイダー: 表示名
- Users: ユーザー名、名、姓、属性名、値
- Groups: 名前、属性名、値
- Roles: 名前
- オブジェクトの説明
それ以外の場合、データベースエンコーディングに含まれる文字に制限され、多くの場合それは 8 ビットです。ただし、データベースシステムによっては、Unicode 文字の UTF-8 エンコーディングを有効にし、すべてのテキストフィールドで完全な Unicode 文字セットを使用できます。特定のデータベースでは、この選択により、最大文字列長が 8 ビットエンコーディングでサポートされる最大文字列長よりも短くなる可能性があります。
9.5.1. Oracle データベースの Unicode サポートを設定する リンクのコピーリンクがクリップボードにコピーされました!
Oracle データベースが VARCHAR フィールドおよび CHAR フィールドで Unicode をサポートするように作成されている場合、そのデータベースでは Unicode 文字がサポートされます。たとえば、AL32UTF8 をデータベース文字セットとして設定したとします。この場合、JDBC ドライバーに特別な設定は必要ありません。
データベースが Unicode をサポートするように作成されていない場合、特殊フィールドで Unicode 文字をサポートするように JDBC ドライバーを設定する必要があります。2 つのプロパティーを設定します。これらのプロパティーは、システムプロパティーまたは接続プロパティーとして設定できることに注意してください。
-
oracle.jdbc.defaultNCharをtrueに設定します。 必要に応じて、
oracle.jdbc.convertNcharLiteralsをtrueに設定します。注記これらのプロパティーとパフォーマンスへの影響の詳細は、Oracle JDBC ドライバーの設定ドキュメントを参照してください。
9.5.2. Microsoft SQL Server データベースの Unicode サポート リンクのコピーリンクがクリップボードにコピーされました!
Unicode 文字は、Microsoft SQL Server データベースの特殊フィールドでのみサポートされます。データベースには特別な設定は必要ありません。
パフォーマンスを大幅に向上させるには、JDBC ドライバーの sendStringParametersAsUnicode プロパティーを false に設定する必要があります。このパラメーターがないと、Microsoft SQL Server はインデックスを使用できない可能性があります。
9.5.3. MySQL データベースの Unicode サポートを設定する リンクのコピーリンクがクリップボードにコピーされました!
CREATE DATABASE コマンドの使用時に VARCHAR フィールドと CHAR フィールドで Unicode サポートを指定してデータベースが作成されている場合、MySQL データベースで Unicode 文字がサポートされます。
utf8 文字セットとはストレージ要件が異なるため、utf8mb4 文字セットはサポートされていないことに注意してください。詳細は、MySQL のドキュメントを参照してください。この状況では、バイト数ではなく文字数を収容するように列が作成されるため、非特殊フィールド以外の長さ制限は適用されません。データベースのデフォルト文字セットで Unicode を保存できない場合、特殊フィールドのみが Unicode 値を保存できます。
- Start MySQL Server.
- JDBC ドライバー設定で、JDBC 接続設定 を見つけます。
-
接続プロパティー
characterEncoding=UTF-8を追加します。
9.5.4. PostgreSQL データベースの Unicode サポートを設定する リンクのコピーリンクがクリップボードにコピーされました!
データベースの文字セットが UTF8 の場合、Unicode は PostgreSQL データベースでサポートされます。任意のフィールドで Unicode 文字を使用でき、非特殊フィールドでフィールド長の削減はありません。JDBC ドライバーに特別な設定は必要ありません。文字セットは、PostgreSQL データベースの作成時に決定されます。
次の SQL コマンドを入力して、PostgreSQL クラスターのデフォルトの文字セットを確認します。
show server_encoding;デフォルトの文字セットが UTF 8 ではない場合は、次のようなコマンドを使用して、デフォルトの文字セットが UTF8 のデータベースを作成します。
create database keycloak with encoding 'UTF8';
9.6. PostgreSQL の準備 リンクのコピーリンクがクリップボードにコピーされました!
9.6.1. ライターおよびリーダーインスタンス リンクのコピーリンクがクリップボードにコピーされました!
PostgreSQL のリーダーインスタンスとライターインスタンスを実行する場合、Red Hat build of Keycloak は作業を実行するために常にライターインスタンスに接続する必要があります。オリジナルの PostgreSQL ドライバーを使用する場合、Red Hat build of Keycloak は PostgreSQL JDBC ドライバーの targetServerType プロパティーを primary に設定し、常に書き込み可能なプライマリーインスタンスに接続し、フェイルオーバーやスイッチオーバーのシナリオでセカンダリーリーダーインスタンスに接続しないようにします。
DB URL または追加のプロパティーで targetServerType に独自の値を設定することで、この動作をオーバーライドできます。
追加のデータソースの場合は要件が異なる可能性があるため、targetServerType はプライマリーデータソースにのみ自動的に適用されます。
9.6.2. データベースユーザーの権限 リンクのコピーリンクがクリップボードにコピーされました!
効率的なアップグレードを実現するために、データベースユーザーが pg_class、pg_namespace テーブルに対する SELECT 権限を持っていることを確認してください。
これは、Red Hat build of Keycloak のアップグレード時に、テーブル内の行数を推定するために使用されます。Red Hat build of Keycloak は、これらのテーブルにアクセスする権限を持っていない場合、ログに警告を記録したうえで、スキーマ変更の影響を受けるテーブルの行数を特定するために、アップグレード中に効率の低い SELECT COUNT(*) ... 操作を実行します。
9.7. Amazon Aurora PostgreSQL の準備 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Aurora PostgreSQL を使用する場合は、Amazon Web Services JDBC ドライバー で、マルチ AZ セットアップでライターインスタンスが変更されたときのデータベース接続の転送など、追加機能を利用できます。このドライバーはディストリビューションの一部ではないため、使用する前にインストールする必要があります。
このドライバーをインストールするには、次の手順に従います。
-
展開したディストリビューションを実行する場合: Amazon Web Services JDBC ドライバーリリースページ から JAR ファイルをダウンロードし、Red Hat build of Keycloak の
providersフォルダーに配置します。 コンテナーを実行する場合: カスタムの Red Hat build of Keycloak イメージをビルドし、
providersフォルダーに JAR を追加します。Red Hat build of Keycloak Operator で使用できるイメージをビルドするための最小限の Containerfile は、次のようになります。
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4 ADD --chmod=0666 https://github.com/awslabs/aws-advanced-jdbc-wrapper/releases/download/2.5.6/aws-advanced-jdbc-wrapper-2.5.6.jar /opt/keycloak/providers/aws-advanced-jdbc-wrapper.jar最適化されたイメージをビルドする方法の詳細は、コンテナー内での Red Hat build of Keycloak の実行 の章を参照してください。また、Red Hat build of Keycloak Operator を使用して最適化されたイメージと最適化されていないイメージを実行する方法の詳細は、カスタム Red Hat build of Keycloak イメージの使用 の章を参照してください。
次のパラメーターを使用して Red Hat build of Keycloak を実行するように設定します。
db-url-
通常の PostgreSQL JDBC URL に
aws-wrapperを挿入すると、jdbc:aws-wrapper:postgresql://...のような URL になります。 db-driver-
AWS JDBC ラッパーを使用するには、
software.amazon.jdbc.Driverに設定します。
AWS JDBC ドライバーの wrapperPlugins オプションをオーバーライドする場合は、フェイルオーバーまたはスイッチオーバーのシナリオでも Red Hat build of Keycloak が常にライターインスタンスに接続するように、failover または failover2 プラグインを常に含めます。
9.8. MySQL サーバーの準備 リンクのコピーリンクがクリップボードにコピーされました!
MySQL 8.0.30 以降、MySQL は、明示的なプライマリーキーなしで作成されたすべての InnoDB テーブルに対して生成された非表示のプライマリーキーをサポートしています (詳細は、こちら を参照してください)。この機能を有効にすると、データベーススキーマの初期化と移行が失敗し、エラーメッセージ Multiple primary key defined (1068) が表示されます。その場合、Red Hat build of Keycloak をインストールまたはアップグレードする前に、MySQL サーバー設定でパラメーター sql_generate_invisible_primary_key を OFF に設定して無効にする必要があります。
9.9. クラスター設定でデータベースロックタイムアウトを変更する リンクのコピーリンクがクリップボードにコピーされました!
クラスターノードは同時に起動できるため、データベースのアクションに余分な時間がかかります。たとえば、起動中のサーバーインスタンスは、データベースの移行、インポート、または初回の初期化を実行する場合があります。データベースロックは、クラスターノードが同時に起動する際に起動アクションが相互に競合するのを防ぎます。
このロックの最大タイムアウトは 900 秒です。ノードがタイムアウトを超えてロックを待機すると、起動は失敗します。デフォルト値を変更する必要はほぼありませんが、変更する場合は次のコマンドを入力します。
bin/kc.[sh|bat] start --spi-dblock--jpa--lock-wait-timeout 900
9.10. XA トランザクションをサポートするデータベースベンダーの使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、デフォルトで XA 以外のトランザクションと適切なデータベースドライバーを使用します。
ドライバーが提供する XA トランザクションサポートを使用する場合は、次のコマンドを入力します。
bin/kc.[sh|bat] build --db=<vendor> --transaction-xa-enabled=true
Red Hat build of Keycloak は、ベンダーに適した JDBC ドライバーを自動的に選択します。
Azure SQL や MariaDB Galera などの特定のベンダーは、XA トランザクションメカニズムをサポートしていないか、それらに依存していません。
XA リカバリーはデフォルトで有効になっており、ファイルシステムロケーション KEYCLOAK_HOME/data/transaction-logs を使用してトランザクションログを保存します。
コンテナー化された環境で XA トランザクションを有効にしても、そのパスで安定したストレージが利用できない限り、XA リカバリーは完全にはサポートされません。
9.11. migrationStrategy の JPA プロバイダー設定オプションを設定する リンクのコピーリンクがクリップボードにコピーされました!
JPA migrationStrategy (手動/更新/検証) を設定するには、次のように JPA プロバイダーを設定する必要があります。
connections-jpa SPI の quarkus プロバイダーの migration-strategy を設定する
bin/kc.[sh|bat] start --spi-connections-jpa--quarkus--migration-strategy=manual
DB 初期化用の SQL ファイルも取得する場合は、次の SPI initializeEmpty (true/false) を追加する必要があります。
connections-jpa SPI の quarkus プロバイダーの initialize-empty を設定する
bin/kc.[sh|bat] start --spi-connections-jpa--quarkus--initialize-empty=false
同様に、migrationExport が特定のファイルと場所を指すようにします。
connections-jpa SPI の quarkus プロバイダーの migration-export を設定する
bin/kc.[sh|bat] start --spi-connections-jpa--quarkus--migration-export=<path>/<file.sql>
詳細は、データベースの移行 に関するドキュメントを参照してください。
9.12. 接続プールの設定 リンクのコピーリンクがクリップボードにコピーされました!
9.12.1. MySQL および MariaDB リンクのコピーリンクがクリップボードにコピーされました!
'No operations allowed after connection closed' (接続が閉じられた後は操作は許可されません) という例外がスローされるのを防ぐために、Red Hat build of Keycloak の接続プールの接続最大有効期間が、サーバーの設定された wait_timeout よりも短くなるようにする必要があります。MySQL および MariaDB データベースを使用する場合、Red Hat build of Keycloak はデフォルトの最大有効期間を 7 時間 50 分に設定します。これは、デフォルトのサーバー値の 8 時間よりも短いためです。
データベースで wait_timeout を明示的に設定している場合は、db-pool-max-lifetime の値をその wait_timeout よりも小さく設定することが必要です。推奨されるベストプラクティスは、この値を wait_timeout から数分引いた値に定義することです。db-pool-max-lifetime を正しく設定しないと、Red Hat build of Keycloak の起動時に警告が記録されます。
9.13. 複数のデータソースを設定する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak を使用すると、エクステンションから別のデータベースにアクセスする必要がある場合に、追加のデータソースを指定できます。これは、ユーザーなどのカスタムデータを保存するために、メインの Red Hat build of Keycloak のデータソースを使用することが実行可能オプションではない場合に役立ちます。
独自のユーザーデータベースに接続する方法の詳細は、{developerguide_userstoragespi_name} のドキュメントを参照してください。
複数のデータソースを定義することは、単一のデータソースを定義することと同じように機能しますが、1 つ重要な変更点があります。それは、設定オプション名の一部として、各データソースに名前を指定する必要があることです。
9.13.1. 必須設定 リンクのコピーリンクがクリップボードにコピーされました!
追加のデータソースを有効にするには、JPA persistence.xml ファイルと Red Hat build of Keycloak 設定の 2 つを設定する必要があります。persistence.xml ファイルは、Jakarta Persistence API の標準の一部として永続性ユニットを指定する役割を果たし、Hibernate ORM フレームワークへの適切な設定の伝播に必要です。persistence.xml ファイルの作成が完了したら、それに応じて Red Hat build of Keycloak の設定をセットアップする必要があります。
追加のデータソースプロパティーは、CLI、keycloak.conf、または環境変数などの標準的な設定ソースを通じて指定できます。
追加のデータソースは、メインデータソースと同様の方法で設定できます。これは、設定オプションに追加のデータソース名を含めるという、類似した名前を使用することで実現されます。たとえば、メインデータソースが db-username を使用する場合、追加のデータソースは db-username-<datasource> になります。完全なリストについては、関連オプションの章を参照してください。
9.13.1.1. 1.JPA persistence.xml ファイル リンクのコピーリンクがクリップボードにコピーされました!
persistence.xml は、管理するエンティティー、データソース名、JDBC 設定、JPA/Hibernate カスタム設定など、Jakarta Persistence API (JPA) の設定を提供します。そのファイルは、カスタムの Red Hat build of Keycloak エクステンションの META-INF/persistence.xml フォルダーに配置する必要があります。
Quarkus は、persistence.xml ファイルを使用する代わりに、Hibernate ORM プロパティーを介して JPA 永続性ユニットを設定する機能を提供することに注意してください。ただし、Red Hat build of Keycloak でサポートされている方法は、persistence.xml ファイルを使用することであり、このファイルが存在する場合、Quarkus プロパティーは無視されます。
Red Hat build of Keycloak では、ほとんどの設定は自動で行われるため、データソース名とトランザクションタイプなどの基本的な設定の詳細を指定するだけで済みます。
Red Hat build of Keycloak では、追加データソースのトランザクションタイプを JTA に設定する必要があります。この最小限の persistence.xml ファイルでは、トランザクションタイプとデータソース名を次のように設定できます。
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
version="3.0">
<persistence-unit name="user-store-pu" transaction-type="JTA">
<class>org.your.extension.UserEntity</class>
<properties>
<property name="jakarta.persistence.jtaDataSource" value="user-store" />
</properties>
</persistence-unit>
</persistence>
データソース名を適切に設定するには、jakarta.persistence.jtaDataSource プロパティーを設定する必要があります。設定されていない場合は、代わりに永続ユニット名がデータソース名として使用されます (この場合は user-store-pu)。上記の例では、結果のデータソース名は user-store になります。データソース名は、永続性ユニット名と同じにすることができます。
独自の JPA エンティティーを使用するには、この永続性ユニットによって管理され、特定のデータソースに向けられる JPA エンティティーをマークする <class> プロパティーを指定する必要があります。上記の例では、org.your.extension.UserEntity JPA エンティティーは、user-store データソースに誘導される永続性ユニット user-store-pu によって管理されます。
9.13.1.2. 2. 必須プロパティー リンクのコピーリンクがクリップボードにコピーされました!
persistence.xml をセットアップしたら、Red Hat build of Keycloak 側での最小限の設定は、指定されたデータソースに対する DB の種類/ベンダーのセットアップです。ビルド時オプション db-kind-<name> を指定する必要があります。ここで、<name> はデータソースの名前で、persistence.xml ファイルで指定されているものと 同じ である必要があります。
したがって、追加のデータソース user-store を次のように有効化できます (postgres の例)。
bin/kc.[sh|bat] start --db-kind-user-store=postgres
データソースに対して db-kind を指定すると、メインのデータソースと同様に、すべてのデータベースの種類に固有のデフォルト値 (ドライバーやダイアレクトなど) が自動的に適用されます。
9.13.2. 環境変数による設定 リンクのコピーリンクがクリップボードにコピーされました!
CLI または keycloak.conf プロパティーを使用してデータソースを設定したくない場合は、環境変数を使用できます。
次のように、環境変数 (user-store データソースの場合) を介して DB の種類を設定できます。
export KC_DB_KIND_USER_STORE=postgres
export KC_DB_USERNAME_USER_STORE=my-username
環境変数の _ (アンダースコア) から - (ダッシュ) へのデフォルトのマッピングにより、これは db-kind-user-store および db-username-user-store Red Hat build of Keycloak プロパティーにマッピングされます。ただし、データソースの名前に _、$、または . などの特殊文字が含まれる場合があります。
Red Hat build of Keycloak 環境変数を使用して適切に設定するには、データソースのキーがどのようになるべきかを明示的に指定する必要があります。特殊なケースとして、KCKEY_ を使用した一対のユニークな Red Hat build of Keycloak 環境変数を使用できます。
たとえば、user_store$marketing という名前のデータソースの場合、次のように環境変数を設定できます。
export KC_USER_STORE_DB_KIND=mariadb
export KCKEY_USER_STORE_DB_KIND=db-kind-user_store$marketing
詳細は、Red Hat build of Keycloak の設定 ガイドの 特殊文字を含む環境変数キーの形式 サブセクションを参照してください。
9.13.3. quarkus.properties の下位互換性 リンクのコピーリンクがクリップボードにコピーされました!
以前は、いくつかの場所では、raw Quarkus プロパティーを使用して、追加のデータソースを設定するようにユーザーに指示していました。ただし、conf/quarkus.properties ファイルでの Quarkus プロパティーの使用は サポート対象外 と見なされるため、上記のように専用の追加データソースオプションを使用することが強く推奨されます。
専用オプションに移行する前に、次のように Quarkus プロパティーを使用してデータソース設定を指定できます。
quarkus.datasource.user-store.db-kind=h2
quarkus.datasource.user-store.username=sa
quarkus.datasource.user-store.jdbc.url=jdbc:h2:mem:user-store;DB_CLOSE_DELAY=-1
quarkus.datasource.user-store.jdbc.transactions=xa
データソース名には、引用符なし で Quarkus プロパティーを使用してください。引用符付きのデータソース名を使用すると、新しいデータソースオプションのマッピングと競合するからです。したがって、問題を回避するには、quarkus.datasource."user-store".db-kind=h2 ではなく、quarkus.datasource.user-store.db-kind=h2 を使用してください。
9.14. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
|
|
|
|
|
| 🛠
| |
|
| (デフォルト) |
|
| |
|
| |
|
| |
|
| (デフォルト) |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
| 🛠
|
|
9.14.1. 追加のデータソースオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
| 🛠
| |
|
|
|
| 🛠
|
|
|
| (デフォルト) |
|
| |
|
| |
|
| (デフォルト) |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
| 🛠
|
|
第10章 分散キャッシュの設定 リンクのコピーリンクがクリップボードにコピーされました!
キャッシュレイヤーを設定して、複数の Red Hat build of Keycloak インスタンスをクラスター化し、パフォーマンスを高めます。
Red Hat build of Keycloak は、高可用性とマルチノードのクラスター化セットアップ向けに設計されています。現在の分散キャッシュ実装は、高性能で分散可能なインメモリーデータグリッドである Infinispan の上にビルドされています。
10.1. 分散キャッシュを有効にする リンクのコピーリンクがクリップボードにコピーされました!
start コマンドを使用して Red Hat build of Keycloak を実稼働モードで開始すると、キャッシュが有効になり、ネットワーク上の Red Hat build of Keycloak ノードがすべて検出されます。
デフォルトでは、キャッシュは TCP トランスポートに基づく jdbc-ping スタックを使用し、設定されたデータベースを使用してクラスターに参加するノードを追跡します。この章で後述するとおり、Red Hat build of Keycloak では、事前定義されたデフォルトのトランスポートスタックのセットから選択することも、独自のカスタムスタックを定義することもできます。
分散 Infinispan キャッシュを明示的に有効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] start --cache=ispn
start-dev コマンドを使用して Red Hat build of Keycloak を開発モードで開始すると、Red Hat build of Keycloak はローカルキャッシュのみを使用し、分散キャッシュは --cache=local オプションを暗黙的に設定することによって完全に無効になります。local キャッシュモードは、開発目的およびテスト目的に限定されています。
10.2. キャッシュを設定する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、conf/cache-ispn.xml にある通常の {infinispan_configuring_docs}[Infinispan configuration file] を提供します。このファイルには、キャッシュコンテナーと JGroups トランスポートに使用されるデフォルト設定が含まれています。
次の表は、Red Hat build of Keycloak が使用する特定のキャッシュの概要を示しています。
| キャッシュ名 | キャッシュタイプ | 説明 |
|---|---|---|
| realms | Local | 永続化されたレルムデータをキャッシュします |
| users | Local | 永続化されたユーザーデータをキャッシュします |
| authorization | Local | 永続化された認可データをキャッシュします |
| keys | Local | 外部公開鍵をキャッシュします |
| crl | Local | X.509 オーセンティケーター CRL のキャッシュ |
| work | Replicated (レプリケート) | 無効化メッセージをノード間で伝播します |
| authenticationSessions | Distributed (分散) | 認証プロセス中に作成/破棄された、または期限切れになった認証セッションをキャッシュします。 |
| sessions | Distributed (分散) | 永続的なユーザーセッションデータをキャッシュする |
| clientSessions | Distributed (分散) | 永続的なクライアントセッションデータをキャッシュする |
| offlineSessions | Distributed (分散) | 永続的なオフラインユーザーセッションデータをキャッシュする |
| offlineClientSessions | Distributed (分散) | 永続的なオフラインクライアントセッションデータをキャッシュする |
| loginFailures | Distributed (分散) | 失敗したログイン (不正の検知) を追跡します |
| actionTokens | Distributed (分散) | アクショントークンをキャッシュします |
10.2.1. キャッシュタイプとデフォルト リンクのコピーリンクがクリップボードにコピーされました!
ローカルキャッシュ
Red Hat build of Keycloak は、データベースへの不必要なラウンドトリップを回避するために、永続データをローカルにキャッシュします。
次のデータは、ローカルキャッシュを使用して、クラスター内の各ノードのローカルに保持されます。
- レルム と、クライアント、ロール、グループなどの関連データ。
- ユーザー と、付与されたロールやグループメンバーシップなどの関連データ。
- 認可 と、リソース、権限、ポリシーなどの関連データ。
- keys
レルム、ユーザー、認可のローカルキャッシュは、デフォルトで最大 10,000 エントリーを保持するように設定されています。デフォルトで、ローカルキーキャッシュは最大 1,000 エントリーを保持でき、1 時間ごとに期限切れになります。したがって、外部クライアントまたはアイデンティティープロバイダーからキーを定期的にダウンロードする必要があります。
最適な実行時間を実現し、データベースへの追加のラウンドトリップを回避するには、各キャッシュの設定で、エントリーの最大数がデータベースのサイズと一致していることを確認する必要があります。キャッシュできるエントリーが増えると、サーバーがデータベースからデータを取得しなければならない回数が少なくなります。メモリーの使用率とパフォーマンスの間で何が犠牲になるかを評価する必要があります。
ローカルキャッシュの無効化
ローカルキャッシュによりパフォーマンスは向上しますが、マルチノードセットアップでは課題が発生します。
1 つの Red Hat build of Keycloak ノードが共有データベース内のデータを更新すると、他のすべてのノードはそれを認識する必要があるため、キャッシュからそのデータを無効にします。
work キャッシュはレプリケートされたキャッシュであり、これらの無効化メッセージの送信に使用されます。このキャッシュのエントリー/メッセージは有効期限が非常に短いため、このキャッシュのサイズが時間の経過とともに増加することを想定する必要はありません。
認証セッション
ユーザーが認証を試みるたびに、認証セッションが作成されます。これらは、認証プロセスが完了するか、有効期限に達すると自動的に破棄されます。
authenticationSessions 分散キャッシュは、認証プロセス中に、認証セッションとそれに関連する他のデータを保存するために使用されます。
分散可能キャッシュに依存すると、クラスター内のどのノードでも認証セッションを利用できるため、ユーザーは認証状態を失うことなく任意のノードにリダイレクトできます。ただし、実稼働環境に対応したデプロイメントでは、常にセッションアフィニティーを考慮し、セッションが最初に作成されたノードにユーザーをリダイレクトすることを優先する必要があります。これにより、ノード間の不要な状態遷移が回避され、CPU、メモリー、ネットワークの使用率が向上します。
ユーザーセッション
ユーザーが認証されると、ユーザーセッションが作成されます。ユーザーセッションはアクティブユーザーとその状態を追跡するため、認証情報を再度要求されることなく、あらゆるアプリケーションに対してシームレスに認証できるようになります。アプリケーションごとに、ユーザーはクライアントセッションで認証されるため、サーバーはユーザーが認証されているアプリケーションとその状態をアプリケーションごとに追跡できます。
ユーザーセッションとクライアントセッションは、ユーザーがログアウトを実行するとき、クライアントがトークンの取り消しを実行するとき、または有効期限に達したときに自動的に破棄されます。
セッションデータはデフォルトでデータベースに保存され、オンデマンドで次のキャッシュにロードされます。
-
sessions -
clientSessions
分散可能キャッシュに依存することで、キャッシュされたユーザーおよびクライアントセッションはクラスター内の任意のノードで利用できるようになり、データベースからセッションデータをロードすることなく、ユーザーを任意のノードにリダイレクトできるようになります。ただし、実稼働環境に対応したデプロイメントでは、常にセッションアフィニティーを考慮し、セッションが最初に作成されたノードにユーザーをリダイレクトすることを優先する必要があります。これにより、ノード間の不要な状態遷移が回避され、CPU、メモリー、ネットワークの使用率が向上します。
ユーザーセッションとクライアントセッションのこれらのメモリー内キャッシュは、デフォルトではノードあたり 10000 エントリーに制限されているため、大規模なインストールでは Red Hat build of Keycloak の全体的なメモリー使用量が削減されます。内部キャッシュは、キャッシュエントリーごとに 1 人の所有者のみで実行されます。
オフラインユーザーセッション
サーバーは、OpenID Connect プロバイダーとしてユーザーを認証し、オフライントークンを発行できます。認証が成功した後にオフライントークンを発行すると、サーバーはオフラインユーザーセッションとオフラインクライアントセッションを作成します。
次のキャッシュは、オフラインセッションを保存するために使用されます。
- offlineSessions
- offlineClientSessions
ユーザーセッションキャッシュおよびクライアントセッションキャッシュと同様に、オフラインのユーザーセッションキャッシュおよびクライアントセッションキャッシュは、デフォルトでノードあたり 10000 エントリーに制限されます。メモリーから退避されたアイテムは、必要に応じてデータベースからオンデマンドでロードされます。
パスワードのブルートフォース検出
loginFailures 分散キャッシュは、失敗したログイン試行に関するデータを追跡するために使用されます。このキャッシュは、マルチノード Red Hat build of Keycloak セットアップでブルートフォース保護機能が動作するために必要です。
アクショントークン
アクショントークンは、たとえばパスワードを忘れた場合のフローで送信されるメールなど、アクションを非同期で確認する必要がある場合に使用されます。actionTokens 分散キャッシュは、アクショントークンに関するメタデータを追跡するために使用されます。
--log-level=info,org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory:debug を設定すると、適用された Infinispan 設定をログで確認できます。
10.2.2. 揮発性のユーザーセッション リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、通常のユーザーセッションはデータベースに保存され、オンデマンドでキャッシュに読み込まれます。Red Hat build of Keycloak を設定して、通常のユーザーセッションをキャッシュにのみ保存し、データベースへの呼び出しを最小限に抑えることができます。
このセットアップのすべてのセッションはメモリー内に保存されるため、これに関連する 2 つの影響があります。
- すべての Red Hat build of Keycloak ノードが再起動するとセッションが失われます。
- メモリー消費量が増加します。
揮発性のユーザーセッションを使用する場合、キャッシュはユーザーセッションとクライアントセッションの信頼できるソースになります。Red Hat build of Keycloak は、メモリーに保存できるエントリーの数を自動的に調整し、コピーの数を増やしてデータの損失を防ぎます。
このセットアップを有効にするには、次の手順に従います。
次のコマンドを使用して、
persistent-user-sessions機能を無効にします。bin/kc.sh start --features-disabled=persistent-user-sessions ...
multi-site 機能が有効になっている場合、persistent-user-sessions を無効化できません。
10.2.3. キャッシュの最大サイズの設定 リンクのコピーリンクがクリップボードにコピーされました!
メモリー使用量を削減するために、特定のキャッシュに保存されるエントリーの数に上限を設定することが可能です。キャッシュの上限を指定するには、次のコマンドライン引数 --cache-embedded-${CACHE_NAME}-max-count= を指定する必要があります。${CACHE_NAME} は、上限を適用するキャッシュの名前に置き換えます。たとえば、offlineSessions キャッシュに上限 1000 を適用するには、--cache-embedded-offline-sessions-max-count=1000 のように設定します。次のキャッシュでは上限を定義できません: actionToken、authenticationSessions、loginFailures、work。
揮発性セッションが有効になっている場合、sessions、clientSessions、offlineSessions、および offlineClientSessions の最大キャッシュサイズの設定はサポートされません。
10.2.4. 独自のキャッシュ設定ファイルを指定する リンクのコピーリンクがクリップボードにコピーされました!
独自のキャッシュ設定ファイルを指定するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --cache-config-file=my-cache-file.xml
設定ファイルは conf/ ディレクトリーに相対的です。
10.2.5. キャッシュ設定のデフォルトの変更 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、必要なすべてのキャッシュを期待される設定で自動的に作成します。conf/cache-ispn.xml または --cache-config-file で提供される独自のファイルで、追加のキャッシュを追加したり、デフォルトのキャッシュ設定をオーバーライドしたりできます。
適用された Infinispan 設定をログに表示するには、--log-level=info,org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory:debug を設定します。
XML 経由でデフォルトのキャッシュ設定をオーバーライドすることは技術的には可能ですが、サポートされていません。これは、デフォルトのキャッシュ設定に問題があることが証明されている高度なユースケースにのみ推奨されます。デフォルトのキャッシュ設定を変更する唯一のサポートされている方法は、cache-... オプションを使用することです。
変更されたデフォルトのキャッシュ設定が検出された際に警告がログに記録されないようにするには、次のオプションを追加します。
bin/kc.[sh|bat] start --cache-config-mutate=true
10.2.6. リモートサーバーの CLI オプション リンクのコピーリンクがクリップボードにコピーされました!
高可用性用およびマルチノードのクラスター化セットアップ用に Red Hat build of Keycloak サーバーを設定するために、CLI オプション cache-remote-host、cache-remote-port、cache-remote-username、cache-remote-password が導入され、XML ファイル内の設定が簡素化されました。宣言された CLI パラメーターのいずれかが存在する場合、XML ファイルにはリモートストアに関連する設定は存在しないはずです。
10.2.6.1. セキュアではない Infinispan サーバーへの接続 リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境ではセキュリティーを無効にすることは推奨されません。
開発環境やテスト環境では、セキュアではない Infinispan サーバーを起動する方が簡単です。これらのユースケースでは、CLI オプション cache-remote-tls-enabled により、Red Hat build of Keycloak と Data Grid 間の暗号化 (TLS) が無効になります。Data Grid サーバーが暗号化された接続のみを受け入れるように設定されている場合、Red Hat build of Keycloak は起動に失敗します。
CLI オプション cache-remote-username と cache-remote-password はオプションであり、設定されていない場合は、Red Hat build of Keycloak は認証情報を提示せずに Data Grid サーバーに接続します。Data Grid サーバーで認証が有効になっている場合、Red Hat build of Keycloak は起動に失敗します。
10.3. トポロジーを考慮したデータ分散 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak をネットワークトポロジーを認識するように設定すると、Infinispan によってデータが正しく分散されるようになるため、ハードウェア障害が発生した場合でもデータの可用性が向上します。たとえば、キャッシュに num_owners=2 が設定されている場合、可能な場合は 2 人の所有者が同じノードに保存されないようになります。
デフォルトでは、ユーザーセッションとクライアントセッションはデータベースに安全に保存され、これらの設定の影響を受けません。残りの分散キャッシュはこの設定の影響を受けます。
次のトポロジー情報を設定できます。
- サイト名
Red Hat build of Keycloak クラスターが異なるデータセンター間にデプロイされている場合は、このオプションを使用して、データのレプリカが別のデータセンターに保存されるようにします。データセンターがオフラインになったり障害が発生したりしても、データの損失を防ぎます。
SPI オプション
spi-cache-embedded--default--site-name(または環境変数KC_SPI_CACHE_EMBEDDED__DEFAULT__SITE_NAME) を使用してください。値自体は重要ではありませんが、各データセンターには一意の値が必要です。例:
--spi-cache-embedded--default--site-name=site-1- ラック名
Red Hat build of Keycloak クラスターがデータセンター上の異なるラックで実行されている場合は、このオプションを設定して、データのレプリカが別の物理ラックに保存されるようにします。ラックが突然切断されたり故障したりした場合でも、データの損失を防ぎます。
SPI オプション
spi-cache-embedded--default--rack-name(または環境変数KC_SPI_CACHE_EMBEDDED__DEFAULT__RACK_NAME) を使用してください。値自体は重要ではありませんが、各ラックには一意の値が必要です。例:
--spi-cache-embedded--default--rack-name=rack-1- マシン名
同じ物理マシン上で複数の Red Hat build of Keycloak インスタンスが実行されている場合 (たとえば、仮想マシンまたはコンテナーを使用している場合) は、このオプションを使用して、データのレプリカが異なる物理マシンに保存されるようにします。物理的なマシン障害によるデータ損失を防ぎます。
SPI オプション
spi-cache-embedded--default--machine-name(または環境変数KC_SPI_CACHE_EMBEDDED__DEFAULT__MACHINE_NAME) を使用してください。値自体は重要ではありませんが、各マシンは一意の値を持つ必要があります。例:
--spi-cache-embedded--default--machine-name=machine-1注記Red Hat build of Keycloak Operator は、Kubernetes ノードに基づいてマシン名を自動的に設定します。これにより、複数の Pod が同じノードにスケジュールされている場合でも、可能な場合はデータのレプリカが個別のノード間で引き続きレプリケートされるようになります。複数の Pod が同じノードにスケジュールされるのを防ぎ、シングルノードの障害によってデータ損失が発生するリスクをさらに軽減するために、アンチアフィニティールールやトポロジー拡散制約をセットアップすることを推奨します。
10.4. トランスポートスタック リンクのコピーリンクがクリップボードにコピーされました!
トランスポートスタックにより、クラスター内の Red Hat build of Keycloak ノードが確実に信頼性の高い方法で通信できるようになります。Red Hat build of Keycloak は、幅広いトランスポートスタックをサポートしています。
-
jdbc-ping -
kubernetes(非推奨) -
jdbc-ping-udp(非推奨) -
tcp(非推奨) -
udp(非推奨) -
ec2(非推奨) -
azure(非推奨) -
google(非推奨)
特定のキャッシュスタックを適用するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --cache-stack=<stack>
分散キャッシュが有効な場合、デフォルトのスタックは jdbc-ping に設定され、これは Red Hat build of Keycloak の 26.x リリースストリームのデフォルト設定と下位互換性があります。
10.4.1. 利用可能なトランスポートスタック リンクのコピーリンクがクリップボードにコピーされました!
次の表は --cache-stack ランタイムオプションを使用する以外に追加の設定なしで使用できるトランスポートスタックを示しています。
| スタック名 | トランスポートプロトコル | 検出 |
|---|---|---|
|
| TCP |
JGroups |
|
| UDP |
JGroups |
次の表は、--cache-stack ランタイムオプションと最小設定を使用して使用できるトランスポートスタックを示しています。
| スタック名 | トランスポートプロトコル | 検出 |
|---|---|---|
|
| TCP |
JGroups |
|
| TCP |
JGroups |
|
| UDP |
JGroups |
tcp、udp、または jdbc-ping-udp スタックを使用する場合、ノードが個別のクラスターを形成するように各クラスターは異なるマルチキャストアドレスやポートを使用する必要があります。デフォルトでは、Red Hat build of Keycloak は、jgroups.mcast_addr のマルチキャストアドレスとして 239.6.7.8 を使用し、マルチキャストポート jgroups.mcast_port として 46655 を使用します。
-D<property>=<value> を使用して、JAVA_OPTS_APPEND 環境変数または CLI コマンド経由でプロパティーを渡します。
追加のスタック
上記の利用可能なスタックのいずれかを使用することを推奨します。追加のスタックは Infinispan によって提供されますが、それらを設定する方法はこのガイドの対象外です。詳細なドキュメントは、Infinispan クラスタートランスポートの設定 および JGroups スタックのカスタマイズ を参照してください。
10.5. トランスポートスタックの保護 リンクのコピーリンクがクリップボードにコピーされました!
TLS を使用した暗号化は、TCP ベースのトランスポートスタックでデフォルトで有効になっており、これがデフォルトの設定でもあります。TCP ベースのトランスポートスタックを使用している限り、追加の CLI オプションやキャッシュ XML の変更は必要ありません。
UDP または TCP_NIO2 に基づくトランスポートスタックを使用している場合は、次の手順に従ってトランスポートスタックの暗号化を設定します。
-
オプション
cache-embedded-mtls-enabledをfalseに設定します。 - JGroups Encryption ドキュメント および クラスタートランスポートの暗号化 ドキュメントに従ってください。
TLS を有効にすると、Red Hat build of Keycloak は接続を保護するために自己署名 RSA 2048 ビット証明書を自動生成し、TLS 1.3 を使用して通信を保護します。キーと証明書はデータベースに保存されるため、すべてのノードで使用できます。デフォルトでは、証明書の有効期間は 60 日間で、30 日ごとに実行中にローテーションされます。これを変更するには、オプション cache-embedded-mtls-rotation-interval-days を使用します。
10.5.1. サービスメッシュ内で実行 リンクのコピーリンクがクリップボードにコピーされました!
Istio のようなサービスメッシュを使用する場合、相互認証が機能するためには、Red Hat build of Keycloak の Pod 間における直接の mTLS 通信を許可する必要がある場合があります。そうしないと、間違った証明書が提示されたことを示す JGRP000006: failed accepting connection from peer SSLSocket のようなエラーメッセージが表示される場合があり、クラスターは正しく形成されません。
次に、Red Hat build of Keycloak の Pod 間における直接の mTLS 通信を許可するか、サービスメッシュトランスポートセキュリティーに依存することで通信を暗号化してピアを認証するかを選択できます。
Istio を使用するときに Red Hat build of Keycloak に直接の mTLS 通信を許可するには、以下を実行します。
次の設定を適用して直接通信を許可します。
apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: infinispan-allow-nomtls spec: selector: matchLabels: app: keycloak1 portLevelMtls: "7800":2 mode: PERMISSIVE
mTLS 通信を無効にし、サービスメッシュを使用してトラフィックを暗号化する場合は以下を実行します。
-
オプション
cache-embedded-mtls-enabledをfalseに設定します。 - データ転送ポート (デフォルト: 7800) に対して他の Red Hat build of Keycloak Pod からのトラフィックのみを許可するようにサービスメッシュを設定します。
10.5.2. 独自の鍵と証明書の指定 リンクのコピーリンクがクリップボードにコピーされました!
標準セットアップでは推奨されませんが、特定のセットアップで不可欠な場合は、トランスポートスタックの証明書を使用してキーストアを手動で設定できます。cache-embedded-mtls-key-store-file は、キーストアへのパスを設定し、cache-embedded-mtls-key-store-password は、復号化するためのパスワードを設定します。トラストストアに、接続を受け入れるための有効な証明書を格納します。トラストストアは、cache-embedded-mtls-trust-store-file (トラストストアへのパス) と cache-embedded-mtls-trust-store-password (それを復号するためのパスワード) を使用して設定できます。不正アクセスを制限するには、常に各 Red Hat build of Keycloak に自己署名証明書を使用します。
10.6. ネットワークポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak クラスタリングを正常に実行するには、いくつかのネットワークポートを開く必要があります。以下の表では jdbc-ping スタック用に開く必要がある TCP ポートと、ポートを通過するトラフィックの説明を紹介しています。
| ポート | オプション | プロパティー | 説明 |
|---|---|---|---|
|
|
|
| ユニキャストデータ転送。 |
|
|
|
プロトコル |
必要なポートでオプションが使用できない場合は、JAVA_OPTS_APPEND 環境変数または CLI コマ、システムプロパティー -D<property>=<value> を使用して設定します。
10.7. ネットワークバインドアドレス リンクのコピーリンクがクリップボードにコピーされました!
正常な Red Hat build of Keycloak クラスタリングを確保するには、ネットワークポートを、クラスターの他のすべてのノードからアクセス可能なインターフェイスにバインドする必要があります。
デフォルトでは、192.168.0.0/16 または 10.0.0.0/8 のアドレス範囲から、サイトローカル (ルーティング不可能な) IP アドレスが選択されます。
アドレスをオーバーライドするには、オプション cache-embedded-network-bind-address=<IP> を設定します。
次の特殊な値も認識されます。
| 値 | 説明 |
|---|---|
|
|
利用可能な場合はグローバル IP アドレスを選択します。利用できない場合は、 |
|
| サイトローカル (ルーティング不可能) IP アドレス (たとえば、192.168.0.0 または 10.0.0.0 アドレス範囲から) を選択します。これはデフォルト値です。 |
|
| 169.254.1.0 から 169.254.254.255 までのリンクローカル IP アドレスを選択します。 |
|
| 任意の非ループバックアドレスを選択します。 |
|
| ループバックアドレス (例: 127.0.0.1) を選択します。 |
|
|
インターフェイス名に対してパターンに一致するアドレスを選択します。たとえば、 |
|
|
ホストアドレスに対してパターンに一致するアドレスを選択します。たとえば、 |
|
|
ホスト名に対してパターンに一致するアドレスを選択します。たとえば、 |
IPv6 のみを設定し、Red Hat build of Keycloak でバインドアドレスを自動的に選択するには、次の設定を使用します。
export JAVA_OPTS_APPEND="-Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true"
JGroups トランスポートの詳細は、JGroups ドキュメントページ または Infinispan ドキュメントページ を参照してください。
10.8. 異なるネットワーク上でインスタンスを実行する リンクのコピーリンクがクリップボードにコピーされました!
ファイアウォールの背後やコンテナー内など、異なるネットワーク上で Red Hat build of Keycloak インスタンスを実行すると、各インスタンスはローカル IP アドレスで相互にアクセスできなくなります。そのような場合は、それらのローカル IP アドレスに対してポート転送ルール (「仮想サーバー」 と呼ばれることもあります) を設定してください。
ポート転送を使用する場合は、各ノードが外部アドレスを他のノードに正しくアドバタイズできるように、次のオプションを使用します。
| オプション | 説明 |
|---|---|
|
| Red Hat build of Keycloak 内の他のインスタンスがこのノードへの接続に使用するポート。 |
|
| Red Hat build of Keycloak 内の他のインスタンスがこのノードに接続するために使用する IP アドレス。 |
10.9. クラスターとネットワークの健全性を確認する リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Red Hat build of Keycloak クラスターが正しく形成され、インスタンス間のネットワーク通信が期待どおりに機能していることを確認する方法を説明します。高可用性とデータの一貫性を確保するには、デプロイメント後にこれらのチェックを実行することが非常に重要です。
クラスターが適切に形成されているかどうかを確認するには、次のいずれかの場所を確認します。
Admin UI
通常
https://<your-host>/admin/master/console/#/master/providersで利用できる Red Hat build of Keycloak Web UI にアクセスします。Provider Info セクションで、connectionsInfinispan エントリーを見つけます。詳細を展開するには、Show more をクリックします。クラスターのステータスと個々のキャッシュの健全性に関する情報を確認できるはずです。
ログ
Infinispan は、新しいインスタンスがクラスターに参加したりクラスターから離脱したりするたびに、クラスタービューをログに記録します。ID
ISPN000094のログエントリーを検索します。正常なクラスタービューには、予期されるすべてのノードが表示されます。以下に例を示します。
ISPN000094: Received new cluster view for channel ISPN: [node1-26186|1] (2) [node1-26186, node2-37007]このログエントリーは、"ISPN" という名前のクラスターに現在 2 つのノード (
node1-26186とnode2-37007) があることを示しています。(2)は、クラスター内のノードの総数を確認します。Metrics
Red Hat build of Keycloak は、Prometheus エンドポイントを介して Infinispan メトリクスを公開します。これは、Grafana などのツールで視覚化できます。メトリクス
vendor_cluster_sizeは、クラスター内の現在のインスタンスの数を示します。このメトリクスが、クラスターで設定されている実行中のインスタンスの予想数と一致することを確認する必要があります。詳細は、クラスタリングメトリクス を参照してください。
10.10. キャッシュからのメトリクスを公開する リンクのコピーリンクがクリップボードにコピーされました!
メトリクスが有効になっている場合、キャッシュからのメトリクスは自動的に公開されます。
キャッシュメトリクスのヒストグラムを有効にするには、cache-metrics-histograms-enabled を true に設定します。これらのメトリクスはレイテンシー分布に関するより詳細な情報を提供しますが、収集するとパフォーマンスに影響する可能性があるため、すでに飽和状態のシステムでこれらを有効にする場合は注意が必要です。
bin/kc.[sh|bat] start --metrics-enabled=true --cache-metrics-histograms-enabled=true
メトリクスを有効にする方法の詳細は、メトリクスによる分析情報の取得 を参照してください。
10.11. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
| |
|
|
|
|
メトリクスが有効になっている場合にのみ使用可能です。 |
|
|
'cache' タイプが 'ispn' に設定されている場合にのみ使用可能です。
この設定を未設定のままにして、代わりに 'jdbc-ping' を使用してください。非推奨値: |
|
10.11.1. 埋め込みキャッシュ リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
| |
|
組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
| |
|
| |
|
TCP ベースのキャッシュスタックが使用されている場合にのみ使用可能です。 |
|
|
プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | (デフォルト) |
|
プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
| |
|
組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
|
10.11.2. リモートキャッシュ リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
リモートホストが設定されている場合にのみ使用可能です。 | |
|
| |
|
リモートホストが設定されている場合にのみ使用可能です。 | |
|
リモートホストが設定されている場合にのみ使用可能です。 | (デフォルト) |
|
リモートホストが設定されている場合にのみ使用可能です。 |
|
|
リモートホストが設定されている場合にのみ使用可能です。 |
第11章 送信 HTTP 要求の設定 リンクのコピーリンクがクリップボードにコピーされました!
送信 HTTP リクエストに使用するクライアントを設定します。
Red Hat build of Keycloak では、保護するアプリケーションやサービスに対して頻繁に要求を行う必要があります。Red Hat build of Keycloak は、HTTP クライアントを使用してこれらの送信接続を管理します。この章では、クライアント、接続プール、プロキシー環境設定、タイムアウトなどの設定方法を説明します。
11.1. TLS 接続の信頼済み証明書を設定する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak が TLS を使用して送信要求を実行できるように Red Hat build of Keycloak のトラストストアを設定する方法については、信頼済み証明書の設定 を参照してください。
11.2. クライアント設定コマンド リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak が送信通信に使用する HTTP クライアントは、高度な設定が可能です。Red Hat build of Keycloak の送信 HTTP クライアントを設定するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --spi-connections-http-client--default--<configurationoption>=<value>
コマンドのオプションは次のとおりです。
- establish-connection-timeout-millis
- 接続の確立がタイムアウトになるまでの最大時間 (ミリ秒)。デフォルト: 設定されていません。
- socket-timeout-millis
- 2 つのデータパケット間で、ソケット接続がタイムアウトになるまでの非アクティブな最大時間 (ミリ秒単位)。デフォルト: 5000ms
- connection-pool-size
- 送信接続の接続プールのサイズ。デフォルト: 128
- max-pooled-per-route
- ホストごとにプールできる接続の数。デフォルト: 64
- connection-ttl-millis
- 最大接続時間 (ミリ秒単位)。デフォルト: 設定されていません。
- max-connection-idle-time-millis
- アイドル状態の接続が接続プール内に留まる最大時間 (ミリ秒単位)。アイドル状態の接続は、バックグラウンドクリーナースレッドによってプールから削除されます。このチェックを無効にするには、このオプションを -1 に設定します。デフォルト: 900000
- disable-cookies
- cookie のキャッシュを有効または無効にします。デフォルト: true
- client-keystore
- Java キーストアファイルへのパス。このキーストアには、mTLS のクライアント証明書が含まれています。
- client-keystore-password
-
クライアントキーストアのパスワード。
client-keystoreが設定されている場合は必須。 - client-key-password
- クライアントの秘密鍵のパスワード。client-keystore が設定されている場合は必須。
- proxy-mappings
- 送信 HTTP 要求のプロキシー設定を指定します。詳細は、「HTTP 要求の送信プロキシーマッピング」 を参照してください。
- disable-trust-manager
- 送信要求に HTTPS が必要で、この設定オプションが true に設定されている場合、トラストストアを指定する必要はありません。この設定は SSL 証明書の検証を無効にするため、開発時にのみ使用し、実稼働環境では絶対に使用しないでください。デフォルト: false
11.3. HTTP 要求の送信プロキシーマッピング リンクのコピーリンクがクリップボードにコピーされました!
プロキシーを使用するように送信要求を設定するには、標準プロキシー環境変数である HTTP_PROXY、HTTPS_PROXY、NO_PROXY を使用してプロキシーマッピングを設定します。
-
HTTP_PROXYおよびHTTPS_PROXY変数は、すべての送信 HTTP 要求に使用されるプロキシーサーバーを表します。Red Hat build of Keycloak では、この 2 つの変数は区別されません。両方の変数を定義すると、プロキシーサーバーが使用する実際のスキームに関係なく、HTTPS_PROXYが優先されます。 -
NO_PROXY変数は、プロキシーを使用しないホスト名のコンマ区切りリストを定義します。指定したホスト名ごとに、そのすべてのサブドメインもプロキシーの使用から除外されます。
環境変数は小文字または大文字にすることができます。小文字が優先されます。たとえば、HTTP_PROXY と http_proxy の両方を定義した場合、http_proxy が使用されます。
プロキシーマッピングと環境変数の例
HTTPS_PROXY=https://www-proxy.acme.com:8080
NO_PROXY=google.com,login.facebook.com
この例では、次のような結果になります。
-
google.com または google.com のサブドメイン (例: auth.google.com) への要求を除き、すべての送信要求はプロキシー
https://www-proxy.acme.com:8080を使用します。 - login.facebook.com とそのすべてのサブドメインは、定義されたプロキシーを使用しません。ただし、groups.facebook.com は login.facebook.com のサブドメインではないため、除外されます。
11.4. 正規表現を使用したプロキシーマッピング リンクのコピーリンクがクリップボードにコピーされました!
プロキシーマッピングに環境変数を使用する代わりに、Red Hat build of Keycloak が送信する送信要求の proxy-mappings のコンマ区切りリストを設定できます。proxy-mapping は、hostname-pattern;proxy-uri 形式を使用する、正規表現ベースのホスト名パターンとプロキシー URI で構成されます。
たとえば、次の正規表現があります。
.*\.(google|googleapis)\.com
次のコマンドを入力して、正規表現ベースのホスト名パターンを適用します。
bin/kc.[sh|bat] start --spi-connections-http-client--default--proxy-mappings='.*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080'
マイクロプロファイル設定はマッピングの配列を解析するために使用されるため、バックスラッシュ文字 \ は再度エスケープされます。
送信 HTTP 要求を決定するために、以下が実行されます。
- ターゲットのホスト名を、設定されているすべてのホスト名パターンと照合します。
- 最初に一致したパターンの proxy-uri が使用されます。
- ホスト名と一致する設定済みパターンがない場合、プロキシーは使用されません。
プロキシーサーバーに認証が必要な場合は、username:password@ 形式でプロキシーユーザーの認証情報を含めます。以下に例を示します。
.*\.(google|googleapis)\.com;http://proxyuser:password@www-proxy.acme.com:8080
プロキシーマッピングの正規表現の例:
# All requests to Google APIs use http://www-proxy.acme.com:8080 as proxy
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080
# All requests to internal systems use no proxy
.*\.acme\.com;NO_PROXY
# All other requests use http://fallback:8080 as proxy
.*;http://fallback:8080
この例では、以下が実行されます。
- proxy-uri の特別な値である NO_PROXY が使用されます。これは、関連付けられたホスト名パターンに一致するホストにはプロキシーが使用されないことを意味します。
- catch-all パターンはプロキシーマッピングを終了し、すべての送信要求にデフォルトのプロキシーを提供します。
11.5. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
第12章 信頼済み証明書の設定 リンクのコピーリンクがクリップボードにコピーされました!
TLS 経由で通信するように Red Hat build of Keycloak トラストストアを設定します。
Red Hat build of Keycloak が外部サービスと通信する場合、または TLS 経由で着信接続を行う場合、信頼済みサーバーに接続していることを確認するために、リモート証明書を検証する必要があります。これは、中間者攻撃を防ぐために必要です。
これらのクライアントまたはサーバーの証明書、またはこれらの証明書に署名した CA を、トラストストアに配置する必要があります。その後、このトラストストアを、Red Hat build of Keycloak で使用するために設定します。
12.1. システムトラストストアの設定 リンクのコピーリンクがクリップボードにコピーされました!
既存の Java デフォルトトラストストア証明書は、常に信頼されます。追加の証明書が必要な場合 (JRE によって認識されない自己署名認証局または内部認証局がある場合など) は、それを conf/truststores ディレクトリーまたはサブディレクトリーに追加することができます。証明書は、PEM ファイル、または拡張子が .p12、.pfx、または .pkcs12 の PKCS12 ファイル内にある場合があります。PKCS12 の場合、証明書が暗号化されていない必要があります。つまり、パスワードは必要ありません。
別のパスが必要な場合は、--truststore-paths オプションを使用して、PEM または PKCS12 ファイルが配置されている追加のファイルまたはディレクトリーを指定します。パスは、Red Hat build of Keycloak を起動した場所に対する相対パスであるため、代わりに絶対パスを使用することを推奨します。ディレクトリーが指定されている場合、そのディレクトリでトラストストアファイルが再帰的にスキャンされます。
該当するすべての証明書を追加すると、トラストストアは、javax.net.ssl プロパティーを介してシステムのデフォルトのトラストストアとして、また Red Hat build of Keycloak 内部で使用するデフォルトのトラストストアとして使用されます。
以下に例を示します。
bin/kc.[sh|bat] start --truststore-paths=/opt/truststore/myTrustStore.pfx,/opt/other-truststore/myOtherTrustStore.pem
独自の javax.net.ssl トラストストアシステムプロパティーを直接設定することも可能ですが、代わりに --truststore-paths を使用することを推奨します。
12.2. ホスト名検証ポリシー リンクのコピーリンクがクリップボードにコピーされました!
tls-hostname-verifier プロパティーを使用して、TLS 接続によるホスト名の検証方法を調整できます。
-
DEFAULT(デフォルト) では、サブドメイン名 (例: *.foo.com) のワイルドカードを使用して、同じレベル数の名前 (例: a.foo.com は一致するが、a.b.foo.com は一致しない) と一致させることができます。パブリック接尾辞のルールと除外は、https://publicsuffix.org/list/ に基づいています。 -
ANYはホスト名が検証されていないことを意味します。実稼働環境でこのモードは使用しないでください。 -
WILDCARD(非推奨) を使用すると、サブドメイン名のワイルドカード (*.foo.com など) が、複数のレベル (a.b.foo.com など) を含む任意のものに一致します。代わりに DEFAULT を使用してください。 STRICT(非推奨) では、サブドメイン名のワイルドカード (*.foo.com など) が同じレベル数の名前 ( a.foo.com は一致するが、a.b.foo.com は一致しない) と一致しますが、いくつかの限定された例外があります。代わりに DEFAULT を使用してください。この設定は、厳密なホスト名チェックを必要とする LDAP セキュア接続には適用されないことに注意してください。
12.3. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
STRICT と WILDCARD は非推奨となりました。代わりに DEFAULT を使用してください。非推奨の値: |
|
|
|
第13章 mTLS の信頼できる証明書の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak に接続しているクライアントを検証するために Mutual TLS を設定します。
クライアント証明書を適切に検証し、TLS 相互認証 (mTLS) などの特定の認証方法を有効にするために、サーバーが信頼する必要があるすべての証明書 (および証明書チェーン) を含むトラストストアを設定できます。相互 TLS や X.509 認証などの証明書を使用してクライアントを適切に認証するために、このトラストストアに依存する機能が多数あります。
13.1. mTLS を有効にする リンクのコピーリンクがクリップボードにコピーされました!
mTLS を使用した認証は、デフォルトで無効になっています。Red Hat build of Keycloak がサーバーであり、Red Hat build of Keycloak エンドポイントに対する要求からの証明書を検証する必要がある場合に mTLS 証明書の処理を有効にするには、トラストストアに適切な証明書を配置し、次のコマンドを使用して mTLS を有効にします。
bin/kc.[sh|bat] start --https-client-auth=<none|request|required>
required 値を使用すると、Red Hat build of Keycloak は常に証明書を求めるようにセットアップされ、要求に証明書が提供されない場合は失敗します。値を request に設定すると、Red Hat build of Keycloak は証明書がない要求も受け入れ、証明書が存在する場合にのみ証明書の正確性を検証します。
mTLS 設定とトラストストアはすべてのレルムで共有されます。異なるレルムに異なるトラストストアを設定することはできません。
管理インターフェイスのプロパティーは、mTLS 設定を含むメイン HTTP サーバーから継承されます。つまり、mTLS が設定されると、管理インターフェイスでも有効になります。動作をオーバーライドするには、https-management-client-auth プロパティーを使用します。
13.2. mTLS 専用のトラストストアを使用する リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Red Hat build of Keycloak はシステムトラストストアを使用して証明書を検証します。詳細は、信頼済み証明書の設定 を参照してください。
mTLS 専用のトラストストアを使用する必要がある場合は、次のコマンドを実行してこのトラストストアのロケーションを設定できます。
bin/kc.[sh|bat] start --https-trust-store-file=/path/to/file --https-trust-store-password=<value>
トラストストアで認識されるファイル拡張子:
-
pkcs12 ファイルの場合は
.p12、.pkcs12、.pfx -
jks ファイルの場合は
.jks、.truststore -
pem ファイルの場合は
.ca、.crt、.pem
トラストストアにファイルタイプに一致する拡張子がない場合は、https-key-store-type オプションも設定する必要があります。
13.3. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
13.3.1. 送信 HTTP リクエストに mTLS を使用する リンクのコピーリンクがクリップボードにコピーされました!
これは、Red Hat build of Keycloak がサーバーとして機能する mTLS ユースケースの、基本的な証明書設定であることに注意してください。Red Hat build of Keycloak がクライアントとして機能する場合 (たとえば Red Hat build of Keycloak が mTLS によって保護されているブローカーアイデンティティープロバイダーのトークンエンドポイントからトークンを取得しようとする場合)、キーストア内の適切な証明書を送信要求に提供するように、HttpClient を設定する必要があります。このような場合に mTLS を設定するには、送信 HTTP 要求の設定 を参照してください。
13.3.2. X.509 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
X.509 認証を設定する方法の詳細は、X.509 クライアント証明書ユーザー認証 セクションを参照してください。
13.4. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
|
|
|
| |
|
| |
|
| |
| 🛠
|
|
第14章 機能の有効化と無効化 リンクのコピーリンクがクリップボードにコピーされました!
オプション機能を使用するように Red Hat build of Keycloak を設定します。
Red Hat build of Keycloak には、テクノロジープレビューや非推奨機能などの無効化された機能を含め、いくつかの機能が組み込まれています。他の機能はデフォルトで有効になっていますが、Red Hat build of Keycloak のユースケースに適さない場合は無効にできます。
14.1. 機能を有効にする リンクのコピーリンクがクリップボードにコピーされました!
サポートされている一部の機能とすべてのプレビュー機能は、デフォルトで無効になっています。機能を有効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] build --features="<name>[,<name>]"
たとえば、docker と token-exchange を有効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] build --features="docker,token-exchange"
すべてのプレビュー機能を有効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] build --features="preview"
有効な機能には、バージョン管理されているものも、バージョン管理されていないものもあります。バージョン付きの機能名 (例: feature:v1) を使用すると、その機能バージョンがランタイム内に存在する限り有効になります。代わりにバージョンなしの名前 (例: feature) を使用すると、サポートされる特定の機能バージョンの選択が、次の優先順位によってリリースごとに変わる可能性があります。
- サポートされている最新のデフォルトバージョン
- サポートされている最新のデフォルトでないバージョン
- 最新の非推奨のバージョン
- 最新のプレビューバージョン
- 最新の実験バージョン
14.2. 機能を無効にする リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで有効になっている機能を無効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] build --features-disabled="<name>[,<name>]"
たとえば、impersonation を無効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] build --features-disabled="impersonation"
ある機能を features-disabled リストと features リストの両方に指定することはできません。
機能を無効にすると、その機能のすべてのバージョンが無効になります。
14.3. サポートされる機能 リンクのコピーリンクがクリップボードにコピーされました!
次のリストには、デフォルトで有効になっているサポート対象機能が含まれています。これらの機能は、必要がない場合は無効にできます。
| 機能 | 説明 |
|---|---|
| account-api:v1 | アカウント管理 REST API |
| account:v3 | アカウントコンソールバージョン 3 |
| admin-api:v1 | 管理者 API |
| admin-fine-grained-authz:v2 | Fine-Grained Admin Permissions バージョン 2 |
| admin:v2 | 新しい管理コンソール |
| authorization:v1 | 認可サービス |
| ciba:v1 | OpenID Connect Client Initiated Backchannel Authentication (CIBA) |
| client-policies:v1 | クライアント設定ポリシー |
| device-flow:v1 | OAuth 2.0 Device Authorization Grant |
| dpop:v1 | OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer |
| hostname:v2 | ホスト名オプション V2 |
| impersonation:v1 | 管理者がユーザーに成り代わる機能 |
| kerberos:v1 | Kerberos |
| login:v2 | 新しいログインテーマ |
| opentelemetry:v1 | OpenTelemetry トレーシング |
| organization:v1 | レルム内の組織サポート |
| par:v1 | OAuth 2.0 Pushed Authorization Requests (PAR) |
| passkeys:v1 | パスキー |
| persistent-user-sessions:v1 | 再起動やアップグレード後もオンラインユーザーセッションが維持される |
| recovery-codes:v1 | リカバリーコード |
| rolling-updates:v1 | ローリング更新 |
| step-up-authentication:v1 | ステップアップ認証 |
| token-exchange-standard:v2 | 標準トークン交換バージョン 2 |
| update-email:v1 | メールアクションを更新します |
| user-event-metrics:v1 | ユーザーイベントに基づいてメトリクスを収集する |
| web-authn:v1 | W3C Web Authentication (WebAuthn) |
14.3.1. デフォルトでは無効になっています。 リンクのコピーリンクがクリップボードにコピーされました!
次のリストには、デフォルトで無効になっているサポート対象機能が含まれています。これらの機能は、必要に応じて有効にできます。
| 機能 | 説明 |
|---|---|
| docker:v1 | Docker レジストリープロトコル |
| fips:v1 | FIPS 140-2 モード |
| multi-site:v1 | マルチサイトサポート |
14.4. プレビュー機能 リンクのコピーリンクがクリップボードにコピーされました!
プレビュー機能はデフォルトでは無効になっており、実稼働環境での使用は推奨されません。これらの機能は、今後のリリースで変更または削除される可能性があります。
| 機能 | 説明 |
|---|---|
| admin-fine-grained-authz:v1 | きめ細かい管理パーミッション |
| client-auth-federated:v1 | アイデンティティープロバイダーによって発行されたアサーションに基づいてクライアントを認証 |
| client-secret-rotation:v1 | クライアントのシークレットローテーション |
| log-mdc:v1 | ログ内の Mapped Diagnostic Context (MDC) 情報 |
| rolling-updates:v2 | パッチリリースのローリング更新 |
| scripts:v1 | JavaScript を使用したカスタムオーセンティケーターの作成 |
| spiffe:v1 | SPIFFE 信頼関係プロバイダー |
| token-exchange:v1 | トークン交換サービス |
14.5. 非推奨の機能 リンクのコピーリンクがクリップボードにコピーされました!
次のリストには、今後のリリースで削除される予定の非推奨機能が含まれています。これらの機能は、デフォルトで無効になっています。
| 機能 | 説明 |
|---|---|
| instagram-broker:v1 | Instagram Identity Broker |
| login:v1 | レガシーログインテーマ |
| logout-all-sessions:v1 | logout-all-sessions は、通常のセッションのみをログアウトする |
| passkeys-conditional-ui-authenticator:v1 | Passkeys 条件付き UI オーセンティケーター |
14.6. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
|
|
| 🛠
|
|
第15章 プロバイダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak のプロバイダーを設定します。
サーバーは拡張性を念頭に置いて構築されています。そのために多数のサービスプロバイダーインターフェイス (SPI) が提供されており、それぞれがサーバーに特定の機能を提供します。この章では、SPI とそれぞれのプロバイダーの設定に関する中核的な概念を理解します。
この章を読むと、説明された概念と手順を使用して、プロバイダーをインストール、アンインストール、有効化、無効化、設定するための概念と手順を使用できるようになります。そこには、それぞれの要件を満たすことを目的として、サーバー機能を拡張するために実装したプロバイダーも含まれます。
15.1. 設定オプションの形式 リンクのコピーリンクがクリップボードにコピーされました!
プロバイダーは、特定の設定形式を使用して設定できます。形式は、以下で構成されています。
spi-<spi-id>--<provider-id>--<property>=<value>
または、複数のプロバイダー間で曖昧さが生じる可能性がない場合:
spi-<spi-id>-<provider-id>-<property>=<value>
<spi-id> は、設定する SPI の名前です。
<provider-id> は、設定するプロバイダーの ID です。これは、対応するプロバイダーファクトリー実装に設定された ID です。
<property> は、特定のプロバイダーに設定するプロパティーの実際の名前です。
enabled というプロパティー名は、実質的にプロバイダーを有効化/無効化するために予約されています。
これらの名前 (spi、プロバイダー、プロパティー) はすべて小文字とし、myKeycloakProvider のようなキャメルケースの名前は、my-keycloak-provider のように大文字の前にダッシュ (-) が必要です。
たとえば HttpClientSpi SPI の場合、SPI の名前は connectionsHttpClient で、使用可能なプロバイダー実装の 1 つは、default という名前です。connectionPoolSize プロパティーを設定するには、次のように設定オプションを使用します。
spi-connections-http-client--default--connection-pool-size=10
15.1.1. プロバイダー設定オプションを設定する リンクのコピーリンクがクリップボードにコピーされました!
プロバイダー設定オプションは、サーバーの起動時に指定します。Red Hat build of Keycloak の設定 のオプションで、サポートされているすべての設定ソースと形式を参照してください。たとえば、コマンドラインオプションを使用して以下のように指定します。
connections-http-client SPI の default プロバイダーの connection-pool-size を設定する
bin/kc.[sh|bat] start --spi-connections-http-client--default--connection-pool-size=10
15.2. ビルド時のオプション リンクのコピーリンクがクリップボードにコピーされました!
15.2.1. SPI 用の単一プロバイダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
SPI によっては、複数のプロバイダー実装が同時に存在することも可能ですが、実行時に使用されるのはそのうちの 1 つだけです。これらの SPI の場合、特定のプロバイダーがランタイムにアクティブになり使用される主要な実装になります。形式は、以下で構成されています。
spi-<spi-id>--provider=<provider-id>
spi-<spi-id>-provider=<provider-id> は引き続き使用できますが、サーバーは再拡張が必要になった際にそれを適切に検出しません。
プロバイダーを単一のプロバイダーとして設定するには、次のように build コマンドを実行する必要があります。
mycustomprovider プロバイダーを email-template SPI の単一プロバイダーとしてマークする
bin/kc.[sh|bat] build --spi-email-template--provider=mycustomprovider
15.2.2. SPI のデフォルトプロバイダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
SPI に応じて、複数のプロバイダー実装が共存でき、デフォルトでは 1 つが使用されます。これらの SPI の場合、特定のプロバイダーが要求されない限り、特定のプロバイダーがデフォルトの実装として選択されます。形式は、以下で構成されています。
spi-<spi-id>--provider-default=<provider-id>
spi-<spi-id>-provider-default=<provider-id> は引き続き使用できますが、サーバーは再拡張が必要になった際にそれを適切に検出しません。
デフォルトのプロバイダーを決定するために、次のロジックが使用されます。
- 明示的に設定されたデフォルトプロバイダー
- 最も高い順位のプロバイダー (順序が 0 以下のプロバイダーは無視)
-
ID が
defaultに設定されているプロバイダー
プロバイダーをデフォルトプロバイダーとして設定するには、次のように build コマンドを実行する必要があります。
mycustomhash プロバイダーを password-hashing SPI のデフォルトプロバイダーとしてマークする
bin/kc.[sh|bat] build --spi-password-hashing--provider-default=mycustomprovider
15.2.3. プロバイダーの有効化と無効化 リンクのコピーリンクがクリップボードにコピーされました!
形式は、以下で構成されています。
spi-<spi-id>--<provider-id>--enabled=<boolean>
spi-<spi-id>-<provider-id>-enabled=<boolean> は引き続き使用できますが、サーバーは再拡張が必要になった際にそれを適切に検出しません。
プロバイダーを有効または無効にするには、次のように build コマンドを実行する必要があります。
プロバイダーを無効にする
bin/kc.[sh|bat] build --spi-email-template--mycustomprovider--enabled=true
プロバイダーを無効にするには、同じコマンドを使用し、enabled プロパティーを false に設定します。
15.3. プロバイダーのインストールとアンインストール リンクのコピーリンクがクリップボードにコピーされました!
カスタムプロバイダーは、Java アーカイブ (JAR) ファイルにパッケージ化して、ディストリビューションの providers ディレクトリーにコピーする必要があります。その後、--optimized を使用している場合は、JAR ファイルの実装でサーバーのプロバイダーレジストリーを更新するために、build コマンドを実行する必要があります。
この手順は、サーバーランタイムを最適化するために必要です。そうすることで、サーバーの起動時や実行時にプロバイダーを検出するのではなく、事前にすべてのプロバイダーが既知になるようになります。
信頼できないプロバイダー JAR をインストールしないでください。アプリケーション全体に対して単一のクラスローダーがあり、providers ディレクトリー内の JAR は組み込みライブラリーよりも優先されます。また、プロバイダーロジックで使用できる状態やメソッドの組み込みサンドボックスもありません。プロバイダーは、DB への直接アクセス、すべてのサーバー設定 (認証情報を含む) の読み取りなど、サーバープロセスが実行できるすべての操作を実行できます。
プロバイダーをアンインストールするには、providers ディレクトリーから JAR ファイルを削除し、build コマンドを再度実行する必要があります。
15.4. サードパーティーの依存関係を使用する リンクのコピーリンクがクリップボードにコピーされました!
プロバイダーを実装する場合、サーバーディストリビューションからは利用できないサードパーティーの依存関係を使用する必要があることもあります。
この場合、追加の依存関係を providers ディレクトリーにコピーし、build コマンドを実行する必要があります。これを実行すると、サーバーはこれらの追加の依存関係を、それに依存するプロバイダーが実行時に使用できるようにします。
15.5. 参考資料 リンクのコピーリンクがクリップボードにコピーされました!
第16章 ロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak のロギングを設定します。
Red Hat build of Keycloak は、JBoss Logging フレームワークを使用します。以下は、共通の親ログハンドラー root を持つ使用可能なログハンドラーの概要です。
-
console -
file -
syslog
16.1. ロギング設定 リンクのコピーリンクがクリップボードにコピーされました!
ロギングは、Red Hat build of Keycloak でカテゴリーごとに行われます。ロギングは、ルートログレベル、または org.hibernate や org.keycloak などのより具体的なカテゴリーで設定できます。特定のログハンドラーごとにログレベルをカスタマイズすることも可能です。
この章では、ロギングの設定方法を説明します。
16.1.1. ログレベル リンクのコピーリンクがクリップボードにコピーされました!
次の表は、使用可能なログレベルを定義しています。
| レベル | 説明 |
|---|---|
| FATAL | いかなる種類の要求にもまったく対応できない致命的な障害。 |
| ERROR | 要求を処理できなくなる重大なエラーまたは問題。 |
| WARN | 即時の修正を必要としない場合もある、致命的ではないエラーまたは問題。 |
| INFO | Red Hat build of Keycloak のライフサイクルイベントまたは重要な情報。低頻度で発生。 |
| DEBUG | データベースログなど、デバッグ目的の詳細情報。高頻度で発生。 |
| TRACE | 最も詳細なデバッグ情報。非常に高い頻度で発生。 |
| ALL | すべてのログメッセージ向けの特別なレベル。 |
| OFF | ログを完全にオフにする特別なレベル (推奨されません)。 |
16.1.2. ルートログレベルを設定する リンクのコピーリンクがクリップボードにコピーされました!
より具体的なカテゴリーロガーのログレベル設定が存在しない場合は、代わりにそれを含むカテゴリーが使用されます。それを含むカテゴリーがない場合は、ルートロガーレベルが使用されます。
ルートログレベルを設定するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-level=<root-level>
このコマンドには、次のガイドラインを使用してください。
-
<root-level>には、前述の表で定義されたレベルを指定します。 -
ログレベルで大文字と小文字は区別されません。たとえば、
DEBUGまたはdebugを使用できます。 -
誤ってログレベルを 2 回設定してしまった場合、リストの最後に指定されたログレベルになります。たとえば、
--log-level="info,…,DEBUG,…"の構文を含めた場合、ルートロガーはDEBUGになります。
16.1.3. カテゴリー固有のログレベルを設定する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、特定の領域に異なるログレベルを設定できます。このコマンドを使用すると、別のログレベルが必要なカテゴリーをコンマ区切りリストで指定できます。
bin/kc.[sh|bat] start --log-level="<root-level>,<org.category1>:<org.category1-level>"
カテゴリーに適用される設定は、より具体的な一致するサブカテゴリーを含めない限り、そのサブカテゴリーにも適用されます。
例
bin/kc.[sh|bat] start --log-level="INFO,org.hibernate:debug,org.hibernate.hql.internal.ast:info"
この例では、次のようにログレベルを設定します。
- すべてのロガーのルートログレベルは INFO に設定されます。
- 通常、ハイバーネートログレベルは DEBUG に設定されます。
-
SQL 抽象構文ツリーが詳細なログ出力を作成しないようにするために、特定のサブカテゴリー
org.hibernate.hql.internal.astが INFO に設定されます。その結果、SQL 抽象構文ツリーはdebugレベルでは表示されずに省略されます。
16.1.4. ログメッセージのコンテキストの追加 リンクのコピーリンクがクリップボードにコピーされました!
Mapped Diagnostic Context (MDC) を含むログメッセージは プレビュー 機能であり、完全にはサポートされていません。この機能はデフォルトで無効化されています。
現在のレルムやリクエストを実行しているクライアントなど、各ログ行の追加のコンテキスト情報を有効化できます。
有効にするには、オプション log-mdc-enabled を使用します。
設定例
bin/kc.[sh|bat] start --features=log-mdc --log-mdc-enabled=true
出力例
2025-06-20 14:13:01,772 {kc.clientId=security-admin-console, kc.realmName=master} INFO ...
設定オプション log-mdc-keys を設定して、追加するキーを指定します。
16.1.5. レベルを個別のオプションとして設定する リンクのコピーリンクがクリップボードにコピーされました!
カテゴリー固有のログレベルを設定する場合は、log-level オプションを使用する代わりに、個別の log-level-<category> オプションとしてログレベルを設定することもできます。これは、以前に設定した log-level オプションを上書きせずに、選択したカテゴリーのログレベルを設定する場合に便利です。
例
サーバーを次のように起動した場合:
bin/kc.[sh|bat] start --log-level="INFO,org.hibernate:debug"
その後、環境変数 KC_LOG_LEVEL_ORG_KEYCLOAK=trace を設定して、org.keycloak カテゴリーのログレベルを変更できます。
log-level-<category> オプションは log-level よりも優先されます。これにより、log-level オプションで設定された内容をオーバーライドできます。たとえば、上記の CLI の例で KC_LOG_LEVEL_ORG_HIBERNATE=trace を設定すると、org.hibernate カテゴリーは debug ではなく trace レベルを使用します。
環境変数を使用する場合、カテゴリー名は大文字にし、ドットはアンダースコアに置き換える必要があることに注意してください。他の設定ソースを使用する場合は、カテゴリー名を「そのまま」指定する必要があります。例:
bin/kc.[sh|bat] start --log-level="INFO,org.hibernate:debug" --log-level-org.keycloak=trace
16.2. ログハンドラーを有効にする リンクのコピーリンクがクリップボードにコピーされました!
ログハンドラーを有効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log="<handler1>,<handler2>"
使用可能なハンドラーは次のとおりです。
-
console -
file -
syslog
後述する、より具体的なハンドラー設定は、ハンドラーがこのコンマ区切りリストに追加された場合にのみ有効になります。
16.2.1. 各ハンドラーのログレベルを指定する リンクのコピーリンクがクリップボードにコピーされました!
log-level プロパティーは、グローバルルートログレベルと選択したカテゴリーのレベルを指定します。ただし、最新のアプリケーション要件に準拠するには、ログレベルに対してよりきめ細かいアプローチが必要です。
特定のハンドラーのログレベルを設定するために、log-<handler>-level (<handler> は使用可能なログハンドラー) 形式のプロパティーが導入されました。
つまり、ログレベル設定のプロパティーは次のようになります。
-
log-console-level- Console ログハンドラー -
log-file-level- File ログハンドラー -
log-syslog-level- Syslog ログハンドラー
log-<handler>-level プロパティーは、特定のログハンドラーが有効になっている場合にのみ使用可能です。詳細は、以下のログハンドラー設定を参照してください。
「ログレベル」 セクションで指定されているログレベルのみが有効です。これらのログレベルは 小文字で指定する必要があります。ログハンドラーの特定のカテゴリーを指定する機能はまだサポートされていません。
16.2.1.1. 一般原則 リンクのコピーリンクがクリップボードにコピーされました!
特定のハンドラーごとにログレベルを設定しても、log-level プロパティーで指定された ルートレベルはオーバーライドされない ことを理解する必要があります。ログハンドラーは、ロギングシステム全体の最大の詳細度を表すルートログレベルを考慮します。つまり、個々のログハンドラーはルートロガーよりも詳細度が低くなるように設定できますが、それ以上には設定できません。
具体的には、ハンドラーに任意のログレベルが定義されている場合、そのログレベルのログレコードが出力に存在するわけではありません。その場合、ルート log-level も評価する必要があります。ログハンドラーレベルは ルートログレベルの制限 を提供し、ログハンドラーのデフォルトのログレベルは all (制限なし) です。
16.2.1.2. 例 リンクのコピーリンクがクリップボードにコピーされました!
例: ファイルハンドラーの場合は debug、コンソールハンドラーの場合は info:
bin/kc.[sh|bat] start --log=console,file --log-level=debug --log-console-level=info
ルートログレベルは debug に設定されているため、すべてのログハンドラーはその値を継承します。File ログハンドラーも同様です。コンソールで debug レコードを非表示にするには、コンソールハンドラーの最小 (最も深刻でない) レベルを info に設定する必要があります。
例: すべてのハンドラーに対して warn、ファイルハンドラーに対しては debug:
bin/kc.[sh|bat] start --log=console,file,syslog --log-level=debug --log-console-level=warn --log-syslog-level=warn
ルートレベルは、最も詳細な必要なレベル (この場合は debug) に設定する必要があり、他のログハンドラーもそれに応じて修正する必要があります。
例: すべてのハンドラーの場合は info、ただし Syslog ハンドラーの場合は debug + org.keycloak.events:trace:
bin/kc.[sh|bat] start --log=console,file,syslog --log-level=debug,org.keycloak.events:trace, --log-syslog-level=trace --log-console-level=info --log-file-level=info
org.keycloak.events:trace を表示するには、Syslog ハンドラーの trace レベルを設定する必要があります。
16.2.2. ログハンドラーに異なる JSON 形式を使用する リンクのコピーリンクがクリップボードにコピーされました!
すべてのログハンドラーは、JSON 形式で構造化されたログ出力機能を提供します。これは log-<handler>-output=json 形式のプロパティーによって有効にできます (<handler> はログハンドラーです)。
生成された JSON の異なる形式が必要な場合は、次の JSON 出力形式を利用できます。
-
default(デフォルト) -
ecs
ecs 値は ECS (Elastic Common Schema) を参照します。
ECS は、Elastic ソリューションで使用される共通のフィールドセットを定義する、オープンソースのコミュニティー主導の仕様です。ECS 仕様は、OpenTelemetry によって管理される単一の標準を作成することを目標として、OpenTelemetry Semantic Conventions と統合されています。
JSON 出力形式を変更するために、log-<handler>-json-format (<handler> はログハンドラー) 形式のプロパティーが導入されました。
-
log-console-json-format- Console ログハンドラー -
log-file-json-format- File ログハンドラー -
log-syslog-json-format- Syslog ログハンドラー
16.2.2.1. 例 リンクのコピーリンクがクリップボードにコピーされました!
Console ログハンドラーの ECS (Elastic Common Schema) 形式の JSON ログを取得する場合は、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-console-output=json --log-console-json-format=ecs
ログメッセージの例
{"@timestamp":"2025-02-03T14:53:22.539484211+01:00","event.sequence":9608,"log.logger":"io.quarkus","log.level":"INFO","message":"Keycloak 999.0.0-SNAPSHOT on JVM (powered by Quarkus 3.17.8) started in 4.615s. Listening on: http://0.0.0.0:8080","process.thread.name":"main","process.thread.id":1,"mdc":{},"ndc":"","host.hostname":"host-name","process.name":"/usr/lib/jvm/jdk-21.0.3+9/bin/java","process.pid":77561,"data_stream.type":"logs","ecs.version":"1.12.2","service.environment":"prod","service.name":"Keycloak","service.version":"999.0.0-SNAPSHOT"}
16.2.3. 非同期ロギング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は非同期ロギングをサポートしており、高スループット と 低レイテンシー を必要とするデプロイメントに役立つ可能性があります。非同期ロギングは、すべてのログレコードの処理を別のスレッドを使用して行います。ロギングハンドラーは、同期ロギングとまったく同じ方法で呼び出されますが、別々のスレッドで実行されます。すべての Red Hat build of Keycloak ログハンドラーに対して非同期ロギングを有効化できます。非同期ロギングが有効化されているログハンドラーごとに、専用のスレッドが作成されます。
非同期ロギングの基礎となるメカニズムでは、ログレコードを処理するためにキューが使用されます。すべての新しいログレコードはキューに追加され、非同期ロギングが有効になっている特定のログハンドラーに公開されます。ログハンドラーごとにキューが異なります。
キューがすでにいっぱいの場合は、メインスレッドをブロックし、キューの空き領域を待機します。
16.2.3.1. 非同期ロギングを使用するタイミング リンクのコピーリンクがクリップボードにコピーされました!
- 受信リクエストの レイテンシーを低くする 必要がある場合
- より高いスループット が必要な場合
- ワーカースレッドプールが小さく、ロギングを別のスレッドにオフロードしたい場合
- I/O 負荷の高いログハンドラー の影響を軽減したい場合
- リモートの宛先 (ネットワーク syslog サーバーなど) にロギングしており、ワーカースレッドのブロックを回避したい場合
非同期ロギングを有効にすると、追加の別個のスレッドと内部キューにより、追加のメモリーオーバーヘッド が発生する可能性があることに注意してください。その場合、リソースが制限された環境での使用は推奨しません。さらに、予期しないサーバーのシャットダウンにより、ログレコードが失われる リスクが生じます。
16.2.3.2. 非同期ロギングを有効にする リンクのコピーリンクがクリップボードにコピーされました!
次のように log-async プロパティーを使用して、すべてのログハンドラーに対して非同期ロギングをグローバルに有効化できます。
bin/kc.[sh|bat] start --log-async=true
または、log-<handler>-async (<handler> はログハンドラー) の形式のプロパティーを使用して、特定のハンドラーごとに非同期ロギングを有効化することもできます。特定のハンドラーのプロパティーが設定されていない場合は、親の log-async プロパティーの値が使用されます。
これらのプロパティーは次のように使用できます。
bin/kc.[sh|bat] start --log-console-async=true --log-file-async=true --log-syslog-async=true
-
log-console-async- Console ログハンドラー -
log-file-async- File ログハンドラー -
log-syslog-async- Syslog ログハンドラー
16.2.3.3. キューの長さを変更する リンクのコピーリンクがクリップボードにコピーされました!
非同期ロギングに使用されるキューのサイズを変更できます。キュー内のログレコードのデフォルトサイズは 512 です。
キューの長さは次のように変更できます。
bin/kc.[sh|bat] start --log-console-async-queue-length=512 --log-file-async-queue-length=512 --log-syslog-async-queue-length=512
これらのプロパティーは、これらの特定のログハンドラーに対して非同期ロギングが有効になっている場合にのみ使用可能です。
16.2.4. HTTP アクセスロギング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、受信した HTTP 要求の詳細を記録するための HTTP アクセスロギングをサポートしています。アクセスログはデバッグやトラフィック分析によく使用されますが、セキュリティー監査やコンプライアンス監視にとっても重要であり、管理者によるアクセスパターンの追跡、疑わしいアクティビティーの特定、監査証跡の維持に役立ちます。
これらのログは INFO レベルで書き込まれるため、ロギング設定にこのレベルが含まれていることを確認してください (グローバルに (例: log-level=info)、またはアクセスログカテゴリーに固有に (例: log-level=org.keycloak.http.access-log:info のいずれか)。HTTP アクセスログが有効になっている場合、INFO レベルが Red Hat build of Keycloak のデフォルトのログレベルであるため、デフォルトで表示されます。
16.2.4.1. 有効化の方法 リンクのコピーリンクがクリップボードにコピーされました!
次のように http-access-log-enabled プロパティーを使用して、HTTP アクセスロギングを有効化できます。
bin/kc.[sh|bat] start --http-access-log-enabled=true
16.2.4.2. 変更ログの形式/パターン リンクのコピーリンクがクリップボードにコピーされました!
次のように http-access-log-pattern プロパティーを使用して、アクセスログレコードの形式/パターンを変更できます。
bin/kc.[sh|bat] start --http-access-log-pattern=combined
定義済みの名前付きパターン:
-
common(デフォルト) - 要求に関する基本情報を出力します -
combined- 要求に関する基本情報とリファラーおよびユーザーエージェントに関する情報を出力します -
long- 要求に関する包括的な情報をすべてのヘッダーとともに出力します
次のように、ログ記録する必要なデータを使用して独自のパターンを指定することもできます。
bin/kc.[sh|bat] start --http-access-log-pattern='%A %{METHOD} %{REQUEST_URL} %{i,User-Agent}'
HTTP アクセスログには、Authorization、Cookie、または外部 API キー参照などの機密性の高い HTTP ヘッダーが含まれている場合があります。HTTP アクセスログでは、Authorization ヘッダーと選択された機密性の高い Cookie は自動的にマスクされます。ただし、マスク対象項目のリストは完全ではない可能性があります。long パターンの使用や、カスタム形式によるヘッダーの出力には注意してください。これらは開発目的でのみ使用すべきものです。
使用できる変数の完全なリストは、Quarkus のドキュメント を参照してください。
16.2.5. マスクされる具体的な HTTP ヘッダーと Cookie リンクのコピーリンクがクリップボードにコピーされました!
機密性の高い一部の HTTP ヘッダーと Cookie は、HTTP アクセスログ内で自動的にマスクされます。
マスクされる機密性の高い HTTP ヘッダー:
-
Authorization
マスクされる機密性の高い Red Hat build of Keycloak の Cookie:
-
AUTH_SESSION_ID -
KC_AUTH_SESSION_HASH -
KEYCLOAK_IDENTITY -
KEYCLOAK_SESSION -
AUTH_SESSION_ID_LEGACY -
KEYCLOAK_IDENTITY_LEGACY -
KEYCLOAK_SESSION_LEGACY
16.2.6. 特定の URL パスを除外する リンクのコピーリンクがクリップボードにコピーされました!
特定の URL パスを HTTP アクセスロギングから除外して、記録されないようにすることができます。
次のように、正規表現を使用して除外することができます。
bin/kc.[sh|bat] start --http-access-log-exclude='/realms/my-internal-realm/.*'
この場合、/realms/my-internal-realm/ および後続のパスへのすべての呼び出しは、HTTP アクセスログから除外されます。
16.3. Console ログハンドラー リンクのコピーリンクがクリップボードにコピーされました!
Console ログハンドラーはデフォルトで有効になっており、コンソール用に構造化されていないログメッセージを提供します。
16.3.1. コンソールログ形式を設定する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、デフォルトで人間が判読できるテキストログを生成するパターンベースのロギングフォーマッターを使用します。
これらの行のログ形式テンプレートは、ルートレベルで適用できます。デフォルトの形式テンプレートは次のとおりです。
-
%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n
この形式の文字列では、下表の記号がサポートされています。
| 記号 | 概要 | 説明 |
|---|---|---|
| %% | % | 単純な % 文字をレンダリングします。 |
| %c | カテゴリー | ログカテゴリー名をレンダリングします。 |
| %d{xxx} | 日付 |
指定された日付形式の文字列で日付をレンダリングします。 |
| %e | 例外 | 出力された例外をレンダリングします。 |
| %h | ホスト名 | 単純なホスト名をレンダリングします。 |
| %H | 修飾ホスト名 | 完全修飾ホスト名をレンダリングします。OS 設定によっては、単純なホスト名と同じになる場合があります。 |
| %i | プロセス ID | 現在のプロセスの PID をレンダリングします。 |
| %m | フルメッセージ | 出力された場合は、ログメッセージと例外をレンダリングします。 |
| %n | 改行 | プラットフォーム固有の行区切り文字列をレンダリングします。 |
| %N | プロセス名 | 現在のプロセスの名前をレンダリングします。 |
| %p | レベル | メッセージのログレベルをレンダリングします。 |
| %r | 相対時間 | アプリケーションログの開始からの相対時間 (ミリ秒単位) をレンダリングします。 |
| %s | 単純なメッセージ | 例外トレースのないログメッセージをレンダリングします。 |
| %t | スレッド名 | スレッド名をレンダリングします。 |
| %t{id} | スレッド ID | スレッド ID をレンダリングします。 |
| %z{<zone name>} | タイムゾーン | ログ出力のタイムゾーンを <zone name> に設定します。 |
| %L | 行番号 | ログメッセージの行番号をレンダリングします。 |
16.3.2. ロギング形式を設定する リンクのコピーリンクがクリップボードにコピーされました!
ログに記録される行のログ形式を設定するには、次の手順を実行します。
- 前述の表を使用して、形式テンプレートを作成します。
以下のコマンドを入力します。
bin/kc.[sh|bat] start --log-console-format="'<format>'"
; などの特殊なシェル文字を含むコマンドを呼び出す場合は、CLI を使用して文字をエスケープする必要があります。代わりに、設定ファイルで設定することを検討してください。
例: 完全修飾カテゴリー名を短縮する
bin/kc.[sh|bat] start --log-console-format="'%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n'"
この例では、テンプレートでデフォルトの [%c] の代わりに [%c{3.}] を設定することで、カテゴリー名を 3 文字に短縮します。
16.3.3. JSON またはプレーンコンソールのロギングを設定する リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Console ログハンドラーはプレーンな非構造化データをコンソールに記録します。代わりに構造化された JSON ログ出力を使用するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-console-output=json
ログメッセージの例
{"timestamp":"2025-02-03T14:52:20.290353085+01:00","sequence":9605,"loggerClassName":"org.jboss.logging.Logger","loggerName":"io.quarkus","level":"INFO","message":"Keycloak 999.0.0-SNAPSHOT on JVM (powered by Quarkus 3.17.8) started in 4.440s. Listening on: http://0.0.0.0:8080","threadName":"main","threadId":1,"mdc":{},"ndc":"","hostName":"host-name","processName":"/usr/lib/jvm/jdk-21.0.3+9/bin/java","processId":76944}
JSON 出力を使用する場合、色は無効になり、--log-console-format で設定された形式設定は適用されません。
非構造化ロギングを使用するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-console-output=default
ログメッセージの例
2025-02-03 14:53:56,653 INFO [io.quarkus] (main) Keycloak 999.0.0-SNAPSHOT on JVM (powered by Quarkus 3.17.8) started in 4.795s. Listening on: http://0.0.0.0:8080
16.3.4. 色 リンクのコピーリンクがクリップボードにコピーされました!
非構造化ログの色付きコンソールログ出力は、デフォルトでは無効になっています。色を使用すると読みやすくなりますが、ログを外部のログ集約システムに送信する際に問題が発生する可能性があります。色分けされたコンソールログ出力を有効または無効にするには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-console-color=<false|true>
16.3.5. コンソールログレベルの設定 リンクのコピーリンクがクリップボードにコピーされました!
Console ログハンドラーのログレベルは、次のように --log-console-level プロパティーで指定できます。
bin/kc.[sh|bat] start --log-console-level=warn
詳細は、上記の 「各ハンドラーのログレベルを指定する」 セクションを参照してください。
16.4. ファイルロギング リンクのコピーリンクがクリップボードにコピーされました!
コンソールにログを記録する代わりに、ファイルへの非構造化ロギングを使用できます。
16.4.1. ファイルロギングを有効にする リンクのコピーリンクがクリップボードにコピーされました!
ファイルへのロギングは、デフォルトで無効になっています。有効にするには、以下のコマンドを入力します。
bin/kc.[sh|bat] start --log="console,file"
keycloak.log という名前のログファイルが、Red Hat build of Keycloak の data/log ディレクトリー内に作成されます。
16.4.2. ログファイルの場所と名前を設定する リンクのコピーリンクがクリップボードにコピーされました!
ログファイルの作成場所とファイル名を変更するには、次の手順を実行します。
ログファイルを保存するための書き込み可能なディレクトリーを作成します。
ディレクトリーが書き込み可能でない場合、Red Hat build of Keycloak は正しく起動しますが、エラーが発生してログファイルは作成されません。
以下のコマンドを入力します。
bin/kc.[sh|bat] start --log="console,file" --log-file=<path-to>/<your-file.log>
16.4.3. ファイルハンドラーの形式を設定する リンクのコピーリンクがクリップボードにコピーされました!
File ログハンドラーに別のログ形式を設定するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-file-format="<pattern>"
詳細と利用可能なパターン設定の表は、「コンソールログ形式を設定する」 を参照してください。
16.4.4. ファイルログレベルの設定 リンクのコピーリンクがクリップボードにコピーされました!
File ログハンドラーのログレベルは、次のように --log-file-level プロパティーで指定できます。
bin/kc.[sh|bat] start --log-file-level=warn
詳細は、上記の 「各ハンドラーのログレベルを指定する」 セクションを参照してください。
16.5. Syslog を使用した集中ロギング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、ログをリモート Syslog サーバーに送信する機能を提供します。これは、RFC 5424 で定義されたプロトコルを利用します。
16.5.1. Syslog ハンドラーを有効にする リンクのコピーリンクがクリップボードにコピーされました!
Syslog を使用してロギングを有効にするには、次のように、アクティブ化されたログハンドラーのリストに Syslog を追加します。
bin/kc.[sh|bat] start --log="console,syslog"
16.5.2. Syslog アプリケーション名の設定 リンクのコピーリンクがクリップボードにコピーされました!
別のアプリケーション名を設定するには、次のように --log-syslog-app-name オプションを追加します。
bin/kc.[sh|bat] start --log="console,syslog" --log-syslog-app-name=kc-p-itadmins
設定されていない場合、アプリケーション名はデフォルトで keycloak になります。
16.5.3. Syslog エンドポイントの設定 リンクのコピーリンクがクリップボードにコピーされました!
集中型ロギングシステムのエンドポイント (host:port) を設定するには、次のコマンドを入力し、値を特定の値に置き換えます。
bin/kc.[sh|bat] start --log="console,syslog" --log-syslog-endpoint=myhost:12345
Syslog ハンドラーが有効になっている場合、ホストはホスト値として localhost を使用します。デフォルトのポートは 514 です。
16.5.4. Syslog ログレベルの設定 リンクのコピーリンクがクリップボードにコピーされました!
Syslog ログハンドラーのログレベルは、次のように --log-syslog-level プロパティーで指定できます。
bin/kc.[sh|bat] start --log-syslog-level=warn
詳細は、上記の 「各ハンドラーのログレベルを指定する」 セクションを参照してください。
16.5.5. Syslog プロトコルの設定 リンクのコピーリンクがクリップボードにコピーされました!
Syslog は通信のデフォルトプロトコルとして TCP を使用します。TCP の代わりに UDP を使用するには、次のように --log-syslog-protocol オプションを追加します。
bin/kc.[sh|bat] start --log="console,syslog" --log-syslog-protocol=udp
使用可能なプロトコルは、tpc、udp、および ssl-tcp です。
16.5.6. Syslog カウントフレーミングの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、特定の Syslog レシーバーの要件に応じて、TCP または SSL-TCP 経由で送信される Syslog メッセージの先頭に、そのメッセージのサイズが付加されます。この動作は --log-syslog-counting-framing オプションによって制御されます。
この機能を明示的に有効化または無効化するには、次のコマンドを使用します。
bin/kc.[sh|bat] start --log-syslog-counting-framing=true
以下のいずれかの値を設定できます。
-
protocol-dependent(デフォルト) -log-syslog-protocolがtcpまたはssl-tcpの場合にのみ、カウントフレーミングを有効にします。 -
true- メッセージの前にサイズを付けることによって、カウントフレーミングを常に有効にします。 -
false- カウントフレーミングを使用しないでください。
protocol-dependent を使用すると、プロトコルで必要な場合にのみ接頭辞が有効になり、ほとんどの Syslog サーバーとの互換性が確保されることに注意してください。
16.5.7. Syslog ログ形式の設定 リンクのコピーリンクがクリップボードにコピーされました!
ログに記録される行のログ形式を設定するには、次の手順を実行します。
- 前述の表を使用して、形式テンプレートを作成します。
以下のコマンドを入力します。
bin/kc.[sh|bat] start --log-syslog-format="'<format>'"
; などの特殊なシェル文字を含むコマンドを呼び出す場合は、CLI を使用して文字をエスケープする必要があります。代わりに、設定ファイルで設定することを検討してください。
例: 完全修飾カテゴリー名を短縮する
bin/kc.[sh|bat] start --log-syslog-format="'%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n'"
この例では、テンプレートでデフォルトの [%c] の代わりに [%c{3.}] を設定することで、カテゴリー名を 3 文字に短縮します。
16.5.8. Syslog タイプの設定 リンクのコピーリンクがクリップボードにコピーされました!
Syslog は、特定の RFC 仕様に基づいてさまざまなメッセージ形式を使用します。異なるメッセージ形式で Syslog タイプを変更するには、次のように --log-syslog-type オプションを使用します。
bin/kc.[sh|bat] start --log-syslog-type=rfc3164
--log-syslog-type オプションに指定できる値は次のとおりです。
-
rfc5424(デフォルト) -
rfc3164
推奨される Syslog タイプは RFC 5424 で、これは BSD Syslog プロトコルとして知られる RFC 3164 に代わるものです。
16.5.9. Syslog の最大メッセージ長の設定 リンクのコピーリンクがクリップボードにコピーされました!
送信可能なメッセージの最大長 (バイト単位) を設定するには、次のように --log-syslog-max-length オプションを使用します。
bin/kc.[sh|bat] start --log-syslog-max-length=1536
長さは、1k や 1K などの適切な接尾辞を使用してメモリーサイズ形式で指定できます。長さには、ヘッダーとメッセージが含まれます。
長さが明示的に設定されていない場合、デフォルト値は次のように --log-syslog-type オプションに基づいて設定されます。
-
2048B- RFC 5424 用 -
1024B- RFC 3164 用
16.5.10. Syslog 構造化出力の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Syslog ログハンドラーはプレーンな非構造化データを Syslog サーバーに送信します。代わりに構造化された JSON ログ出力を使用するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-syslog-output=json
ログメッセージの例
2024-04-05T12:32:20.616+02:00 host keycloak 2788276 io.quarkus - {"timestamp":"2024-04-05T12:32:20.616208533+02:00","sequence":9948,"loggerClassName":"org.jboss.logging.Logger","loggerName":"io.quarkus","level":"INFO","message":"Profile prod activated. ","threadName":"main","threadId":1,"mdc":{},"ndc":"","hostName":"host","processName":"QuarkusEntryPoint","processId":2788276}
JSON 出力を使用する場合、色は無効になり、--log-syslog-format で設定された形式設定は適用されません。
非構造化ロギングを使用するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --log-syslog-output=default
ログメッセージの例
2024-04-05T12:31:38.473+02:00 host keycloak 2787568 io.quarkus - 2024-04-05 12:31:38,473 INFO [io.quarkus] (main) Profile prod activated.
ご覧のとおり、タイムスタンプは 2 回存在するため、--log-syslog-format プロパティーを使用して適宜修正できます。
16.6. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
|
|
| (デフォルト) |
|
|
|
| 🛠
log-mdc プレビュー機能が有効になっている場合にのみ使用可能です。 |
|
|
MDC ロギングが有効になっている場合にのみ使用可能です。 |
|
16.6.1. コンソール リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
|
Console ログハンドラーがアクティブ化され、非同期ロギングが有効になっている場合にのみ使用可能です。 | (デフォルト) |
|
Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
|
Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 | (デフォルト) |
|
Console ログハンドラーと MDC ロギングがアクティブ化されている場合にのみ使用可能です。 |
|
|
Console ログハンドラーとトレーシングがアクティブ化されている場合にのみ使用可能です。 |
|
|
Console ログハンドラーがアクティブ化され、出力が 'json' に設定されている場合にのみ使用可能です。 |
|
|
Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
|
Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
16.6.2. ファイル リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
File ログハンドラーがアクテ化されている場合にのみ使用可能です。 | (デフォルト) |
|
File ログハンドラーがアクテ化されている場合にのみ使用可能です。 |
|
|
File ログハンドラーがアクティブ化され、非同期ロギングが有効になっている場合にのみ使用可能です。 | (デフォルト) |
|
File ログハンドラーがアクテ化されている場合にのみ使用可能です。 | (デフォルト) |
|
File ログハンドラーと MDC ロギングがアクティブ化されている場合にのみ使用可能です。 |
|
|
File ログハンドラーとトレーシングがアクティブ化されている場合にのみ使用可能です。 |
|
|
File ログハンドラーがアクティブ化され、出力が 'json' に設定されている場合にのみ使用可能です。 |
|
|
File ログハンドラーがアクテ化されている場合にのみ使用可能です。 |
|
|
File ログハンドラーがアクテ化されている場合にのみ使用可能です。 |
|
16.6.3. Syslog リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
Syslog がアクティブ化されている場合にのみ使用可能です。 | (デフォルト) |
|
Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
Syslog がアクティブ化され、非同期ロギングが有効になっている場合にのみ使用可能です。 | (デフォルト) |
|
Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
Syslog がアクティブ化されている場合にのみ使用可能です。 | (default) |
|
Syslog がアクティブ化されている場合にのみ使用可能です。 | (デフォルト) |
|
Syslog ハンドラーと MDC ロギングがアクティブ化されている場合にのみ使用可能です。 |
|
|
Syslog ハンドラーとトレーシングがアクティブ化されている場合にのみ使用可能です。 |
|
|
Syslog がアクティブ化され、出力が 'json' に設定されている場合にのみ使用可能です。 |
|
|
Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
Syslog がアクティブ化されている場合にのみ使用可能です。 | |
|
Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
16.6.4. HTTP アクセスログ リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
HTTP アクセスログが有効な場合にのみ使用可能です。 | |
|
HTTP アクセスログが有効な場合にのみ使用可能です。 |
|
第17章 FIPS 140-2 サポート リンクのコピーリンクがクリップボードにコピーされました!
FIPS 準拠のために Red Hat build of Keycloak サーバーを設定します。
Federal Information Processing Standard Publication 140-2 (FIPS 140-2) は、暗号化モジュールを承認するために使用される米国政府のコンピューターセキュリティー標準です。Red Hat build of Keycloak は FIPS 140-2 準拠モードでの実行をサポートしています。この場合、Red Hat build of Keycloak は、その機能に FIPS で承認されている暗号化アルゴリズムのみを使用します。
FIPS 140-2 で実行するには、Red Hat build of Keycloak が FIPS 140-2 対応システム上で実行されていなければなりません。この要件は通常、インストール時に FIPS が有効化された RHEL または Fedora を前提としています。詳細は、RHEL のドキュメント を参照してください。システムが FIPS モードの場合、基盤となる OpenJDK も FIPS モードであることが確認され、FIPS 対応のセキュリティープロバイダー のみが使用されます。
システムが FIPS モードであることを確認するには、コマンドラインから次のコマンドを使用します。
fips-mode-setup --check
システムが FIPS モードではない場合、次のコマンドを使用して有効にできます。ただし、この方法で後から有効にするのではなく、インストール時からシステムを FIPS モードにすることが推奨されます。
fips-mode-setup --enable
17.1. BouncyCastle ライブラリー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak の内部では、多くの暗号化ユーティリティーに BouncyCastle ライブラリーが使用されています。Red Hat build of Keycloak に同梱されている BouncyCastle ライブラリーのデフォルトバージョンは FIPS に準拠していないことに注意してください。ただし、BouncyCastle には FIPS 検証済みバージョンのライブラリーもあります。FIPS 検証済みの BouncyCastle ライブラリーは、Red Hat build of Keycloak では公式サポートを提供できないため、Red Hat build of Keycloak には同梱されていません。したがって、FIPS 準拠モードで実行するには、BouncyCastle-FIPS ビットをダウンロードし、それを Red Hat build of Keycloak のディストリビューションに追加する必要があります。Red Hat build of Keycloak を FIPS モードで実行すると、デフォルトの BouncyCastle ビットの代わりに BCFIPS ビットが使用されます。これにより、FIPS 準拠が実現します。
17.1.1. BouncyCastle FIPS ビット リンクのコピーリンクがクリップボードにコピーされました!
BouncyCastle FIPS は、BouncyCastle の公式ページ からダウンロードできます。その後、使用しているディストリビューションの KEYCLOAK_HOME/providers ディレクトリーにそれらを追加できます。Red Hat build of Keycloak の BouncyCastle 依存関係と互換性のある適切なバージョンを使用してください。サポートされている、必要な BCFIPS ビットは次のとおりです。
- bc-fips バージョン 2.1.2.
- bctls-fips バージョン 2.1.22.
- bcpkix-fips バージョン 2.1.10.
- bcutil-fips バージョン 2.1.5.
17.2. キーストアを生成する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak サーバーの SSL で使用する pkcs12 または bcfks キーストアを作成できます。
17.2.1. PKCS12 キーストア リンクのコピーリンクがクリップボードにコピーされました!
p12 (または pkcs12) キーストア (および/またはトラストストア) は、BCFIPS 非承認モードで適切に機能します。
PKCS12 キーストアは、RHEL 9 上の OpenJDK 21 Java を使用して、標準的な方法で生成できます。たとえば、次のコマンドを使用してキーストアを生成できます。
keytool -genkeypair -sigalg SHA512withRSA -keyalg RSA -storepass passwordpassword \
-keystore $KEYCLOAK_HOME/conf/server.keystore \
-alias localhost \
-dname CN=localhost -keypass passwordpassword
FIPS モードの pkcs12 キーストアは、シークレット (対称) キーを 管理しません。この制限は、pkcs12 キーストアタイプ内でこのタイプのキーを許可しない BCFIPS プロバイダーによって課せられます。
システムが FIPS モードの場合、FIPS 対応のセキュリティープロバイダーを使用するためにデフォルトの java.security ファイルが変更されるため、追加の設定は必要ありません。さらに、PKCS12 キーストアでは、keytool コマンドを使用して簡単に PBE (パスワードベースの暗号化) キーを保存できます。そのため、このキーストアは、Red Hat build of Keycloak KeyStore Vault とともに使用したり、KeyStore 設定ソースに設定プロパティーを保存するために使用するのに最適です。詳細は、Red Hat build of Keycloak の設定 および vault の使用 を参照してください。
17.2.2. BCFKS キーストア リンクのコピーリンクがクリップボードにコピーされました!
BCFKS キーストアを生成するには、BouncyCastle FIPS ライブラリーとカスタムセキュリティーファイルを使用する必要があります。
まず、/tmp/kc.keystore-create.java.security などのヘルパーファイルを作成します。ファイルの内容としては、次のプロパティーのみ必要です。
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS
次に、次のようなコマンドを入力してキーストアを生成します。
keytool -keystore $KEYCLOAK_HOME/conf/server.keystore \
-storetype bcfks \
-providername BCFIPS \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-providerpath $KEYCLOAK_HOME/providers/bc-fips-*.jar \
-alias localhost \
-genkeypair -sigalg SHA512withRSA -keyalg RSA -storepass passwordpassword \
-dname CN=localhost -keypass passwordpassword \
-J-Djava.security.properties=/tmp/kc.keystore-create.java.security
自己署名付き証明書はデモンストレーション目的に限定して使用しているため、実稼働環境に移行する際にこれらの証明書を適切な証明書に置き換えてください。
bcfks タイプのキーストア/トラストストアを使用して他の操作を行う場合も、同様のオプションが必要です。
17.3. サーバーを実行する リンクのコピーリンクがクリップボードにコピーされました!
- 非承認モードで BCFIPS を使用してサーバーを実行するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --features=fips --hostname=localhost --https-key-store-password=passwordpassword --log-level=INFO,org.keycloak.common.crypto:TRACE,org.keycloak.crypto:TRACE
非承認モードでは、デフォルトのキーストアタイプ (およびデフォルトのトラストストアタイプ) は PKCS12 です。したがって、上記のように BCFKS キーストアを生成した場合は、コマンド --https-key-store-type=bcfks も使用する必要があります。トラストストアを使用する場合も、同様のコマンドが必要になる場合があります。
すべてが期待どおりに動作する場合は、実稼働環境でのログインを無効にできます。
17.4. strict モード リンクのコピーリンクがクリップボードにコピーされました!
fips-mode オプションがあります。fips 機能が有効になっている場合、これは自動的に non-strict に設定されます。これは、BCFIPS が "非承認モード" で実行されることを意味します。よりセキュアな代替方法として、--features=fips --fips-mode=strict を使用できます。この場合、BouncyCastle FIPS は "承認モード" を使用します。このオプションを使用すると、暗号化とセキュリティーアルゴリズムに対するセキュリティー要件が厳しくなります。
strict モードでは、デフォルトのキーストアタイプ (およびデフォルトのトラストストアタイプ) は BCFKS です。別のキーストアタイプを使用する場合は、オプション --https-key-store-type を使用して適切なタイプを指定する必要があります。トラストストアを使用する場合も、同様のコマンドが必要になる場合があります。
サーバーを起動するときに、起動コマンドに TRACE レベルを含めることができます。以下に例を示します。
--log-level=INFO,org.keycloak.common.crypto.CryptoIntegration:TRACE
TRACE レベルを使用すると、次のような Approved Mode に関する注記が付いた KC プロバイダーが起動ログに含まれていることを確認できます。
KC(BCFIPS version 2.0102 Approved Mode, FIPS-JVM: enabled) version 1.0 - class org.keycloak.crypto.fips.KeycloakFipsSecurityProvider,
17.4.1. strict モードでの暗号化の制限 リンクのコピーリンクがクリップボードにコピーされました!
-
前のセクションで説明したように、strict モードは
pkcs12キーストアでは機能しない可能性があります。前述のように、別のキーストア (bcfksなど) を使用する必要があります。また、strict モードを使用している場合、jksおよびpkcs12キーストアは Red Hat build of Keycloak ではサポートされません。たとえば、管理コンソールの OIDC または SAML クライアントのキーストア、もしくはレルムキーのjava-keystoreプロバイダーのキーストアのインポートや生成などです。 -
ユーザーパスワードは、14 文字以上でなければなりません。Red Hat build of Keycloak は、デフォルトで PBKDF2 ベースのパスワードエンコーディングを使用します。BCFIPS 承認モードでは、PBKDF2 アルゴリズムを使用した 112 ビット (実質的には 14 文字) 以上のパスワードが必要です。それよりも短いパスワードを許可する場合は、SPI
password-hashingのプロバイダーpbkdf2-sha512のプロパティーmax-padding-lengthを 14 に設定して、このアルゴリズムによって作成されたハッシュの検証時に追加のパディングを提供します。この設定は、以前に保存されたパスワードとの下位互換性もあります。たとえば、ユーザーのデータベースが非 FIPS 環境にあり、パスワードが短く、承認モードで BCFIPS を使用して Red Hat build of Keycloak でパスワードを検証する場合、そのパスワードは機能するはずです。したがって、サーバーの起動時に次のようなオプションを効果的に使用できます。
--spi-password-hashing--pbkdf2-sha512--max-padding-length=14
上記のオプションを使用しても、FIPS 準拠は損なわれません。いずれにせよ、パスワードは長くすることが推奨されます。たとえば、最新のブラウザーで自動生成されるパスワードは 14 文字を超えるため、この要件に一致します。max-padding-length のオプションを省略する場合は、パスワードの長さが少なくとも 14 文字になるようにレルムにパスワードポリシーを設定できます。
24 より古い Red Hat build of Keycloak から移行する場合、またはデフォルトのハッシュアルゴリズムをオーバーライドするようにパスワードポリシーを明示的に設定する場合は、一部のユーザーが pbkdf2-sha256 などの古いアルゴリズムを使用している可能性があります。この場合、パスワードが 14 文字より短い可能性があるため、古い pbkdf2-sha256 でハッシュされたパスワードを持つユーザーがログインできるように、--spi-password-hashing--pbkdf2-sha256--max-padding-length=14 オプションを追加することを検討してください。
-
1024 ビットの RSA キーは機能しません (最小は 2048)。これは、Red Hat build of Keycloak レルム自体が使用するキー (管理コンソールの
Keysのレルムキー) だけでなく、クライアントキーと IDP キーにもあてはまります。 -
HMAC SHA-XXX キーは、112 ビット (または 14 文字) 以上でなければなりません。たとえば、OIDC クライアントをクライアント認証
Signed Jwt with Client Secret(OIDC 表記ではclient-secret-jwt) で使用する場合、クライアントシークレットの長さは 14 文字以上である必要があります。優れたセキュリティーを確保するには、この要件が必ず満たされるように、Red Hat build of Keycloak サーバーによって生成されたクライアントシークレットを使用することを推奨します。 -
bc-fips バージョン 1.0.2.4 は、PKCS 1.5 RSA 暗号化の移行期間の終了に対応しています。したがって、アルゴリズム
RSA1_5を使用した JSON Web Encryption (JWE) は、デフォルトでは厳密モードでは許可されません (BC は現時点では下位互換性オプションとしてシステムプロパティー-Dorg.bouncycastle.rsa.allow_pkcs15_enc=trueを提供)。RSA-OAEPおよびRSA-OAEP-256は、以前と同様に引き続き利用可能です。
17.5. その他の制限 リンクのコピーリンクがクリップボードにコピーされました!
SAML が機能するためには、XMLDSig セキュリティープロバイダーがセキュリティープロバイダーで利用できることを確認する必要があります。Kerberos が機能するためには、SunJGSS セキュリティープロバイダーが利用できることを確認する必要があります。OpenJDK 21 の FIPS 対応 RHEL 9 では、XMLDSig セキュリティープロバイダーが java.security でデフォルトですでに有効になっている可能性があり、最新の OpenJDK 17 でも同様の可能性があります。ただし、古い OpenJDK 17 ではデフォルトで有効になっていない可能性があり、その場合、SAML は事実上機能しません。
SAML が機能するためには、プロバイダーを JAVA_HOME/conf/security/java.security FIPS プロバイダーリストに手動で追加します。たとえば、FIPS セキュリティープロバイダーでまだ使用できない場合は、次のような行を追加します。
fips.provider.7=XMLDSig
セキュリティープロバイダーを追加すると、正常に機能するはずです。実際、これは FIPS に準拠しており、OpenJDK 21 および OpenJDK 17 の新しいバージョンではデフォルトですでに追加されています。詳細は、Bugzilla を参照してください。
JAVA_HOME/conf/security/java.security で、設定済みのすべてのプラバイダーを確認し、番号が一致することを確認することが推奨されます。言い換えると、fips.provider.7 は、このファイル内に fips.provider.N のような接頭辞が設定されたプロバイダーがすでに 6 つあることを前提としています。
Java 内の java.security ファイルを編集しない場合は、カスタム Java セキュリティーファイル (たとえば、kc.java.security という名前で) を作成し、そのファイルに XMLDSig プロバイダーを追加するための上記のプロパティーを 1 つだけ追加できます。その後、このプロパティーファイルをアタッチして Red Hat build of Keycloak サーバーを起動します。
-Djava.security.properties=/location/to/your/file/kc.java.security
Kerberos/SPNEGO の場合、セキュリティープロバイダー SunJGSS はまだ完全には FIPS に準拠していません。したがって、FIPS に準拠する必要がある場合は、それをセキュリティープロバイダーリストに追加することは推奨されません。FIPS プラットフォームで実行され、セキュリティープロバイダーが使用できない場合、Red Hat build of Keycloak ではデフォルトで KERBEROS 機能が無効になっています。詳細は、Bugzilla を参照してください。
17.6. FIPS ホストで CLI を実行する リンクのコピーリンクがクリップボードにコピーされました!
クライアント登録 CLI (kcreg.sh|bat スクリプト) または管理 CLI (kcadm.sh|bat スクリプト) を実行する場合、CLI はプレーンな BouncyCastle 依存関係の代わりに BouncyCastle FIPS 依存関係も使用する必要があります。そのために必要なのは、jar を CLI ライブラリーフォルダーにコピーすることだけです。CLI ツールは、対応する BCFIPS jar が存在することを検出すると、プレーン BC の代わりに BCFIPS 依存関係を自動的に使用します (使用されるバージョンは上記を参照)。たとえば、CLI を実行する前に次のようなコマンドを使用します。
cp $KEYCLOAK_HOME/providers/bc-fips-*.jar $KEYCLOAK_HOME/bin/client/lib/
cp $KEYCLOAK_HOME/providers/bctls-fips-*.jar $KEYCLOAK_HOME/bin/client/lib/
cp $KEYCLOAK_HOME/providers/bcutil-fips-*.jar $KEYCLOAK_HOME/bin/client/lib/
CLI で BCFKS トラストストア/キーストアを使用しようとすると、このトラストストアがデフォルトの Java キーストアタイプではないために問題が発生することがあります。その場合は、Java セキュリティープロパティーでデフォルトとして指定できます。たとえば、kcadm|kcreg クライアントで操作を行う前に、unix ベースのシステムで次のコマンドを実行します。
echo "keystore.type=bcfks
fips.keystore.type=bcfks" > /tmp/kcadm.java.security
export KC_OPTS="-Djava.security.properties=/tmp/kcadm.java.security"
17.7. コンテナー内での FIPS モードの Red Hat build of Keycloak サーバー リンクのコピーリンクがクリップボードにコピーされました!
コンテナー内で Red Hat build of Keycloak を FIPS モードで実行する場合は、"ホスト" も FIPS モードを使用する必要があります。その後、コンテナーは親ホストから FIPS モードを "継承" します。詳細は、RHEL ドキュメントの このセクション を参照してください。
Red Hat build of Keycloak のコンテナーイメージは、FIPS モードのホストから実行されると自動的に FIPS モードになります。ただし、Red Hat build of Keycloak コンテナーも起動時に (BC jar ではなく) BCFIPS jar と適切なオプションを使用していることを確認してください。
これに関しては、コンテナー内での Red Hat build of Keycloak の実行 で説明されているように、独自のコンテナーイメージをビルドし、BCFIPS などを使用するように調整するのが最善です。
たとえば、現在のディレクトリーにサブディレクトリー files を作成し、以下を追加できます。
- 前述の BC FIPS jar ファイル
-
カスタムキーストアファイル (名前の例:
keycloak-fips.keystore.bcfks) -
SAML 用のプロバイダーが追加されたセキュリティーファイル
kc.java.security(OpenJDK 21 または新しい OpenJDK 17 では不要)
次に、カレントディレクトリーに次のような Containerfile を作成します。
Containerfile:
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4 as builder
ADD files /tmp/files/
WORKDIR /opt/keycloak
RUN cp /tmp/files/*.jar /opt/keycloak/providers/
RUN cp /tmp/files/keycloak-fips.keystore.* /opt/keycloak/conf/server.keystore
RUN cp /tmp/files/kc.java.security /opt/keycloak/conf/
RUN /opt/keycloak/bin/kc.sh build --features=fips --fips-mode=strict
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.4
COPY --from=builder /opt/keycloak/ /opt/keycloak/
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
次に、FIPS 環境を最適化された Docker イメージとしてビルドし、コンテナー内での Red Hat build of Keycloak の実行 の説明に従って起動します。これらの手順では、イメージを起動する際に上記のように因数を使用する必要があります。
17.8. 非 FIPS 環境からの移行 リンクのコピーリンクがクリップボードにコピーされました!
以前に Red Hat build of Keycloak を非 FIPS 環境で使用していた場合は、そのデータを含めて FIPS 環境に移行できます。ただし、前のセクションで述べたように、次のような制限と考慮事項が存在します。
-
Red Hat build of Keycloak 25 以降では、パスワードハッシュのデフォルトのアルゴリズムは
argon2です。ただし、このアルゴリズムは FIPS 140-2 ではサポートされていません。つまり、ユーザーがargon2を使用してパスワードをハッシュした場合、FIPS 環境に切り替えた後はログインできなくなります。FIPS 環境に移行する予定がある場合は、最初から (ユーザーが作成される前に) レルムのパスワードポリシーを設定し、デフォルトのアルゴリズムを、たとえば FIPS 準拠のpbkdf2-sha512にオーバーライドすることを検討してください。このストラテジーにより、FIPS 環境への移行がスムーズに行われます。これ以外の場合で、ユーザーがすでにargon2パスワードを使用している場合は、FIPS 環境に移行した後にパスワードをリセットするようユーザーに依頼します。たとえば、ユーザーに "Forget password" を使用するように依頼したり、パスワードをリセットするためのメールをすべてのユーザーに送信したりします。 - キーストアに依存するすべての Red Hat build of Keycloak 機能が、サポートされているキーストアタイプのみを使用していることを確認してください。これは、strict モードと non-strict モードのどちらが使用されているかによりことなります。
-
Kerberos 認証が機能しない可能性があります。認証フローで
Kerberosオーセンティケーターを使用している場合、FIPS 環境に以降すると、そのオーセンティケーターは自動的にDISABLEDに切り替わります。FIPS 環境に切り替える前に、レルムからKerberosユーザーストレージプロバイダーを削除し、LDAP プロバイダーのKerberos関連機能を無効にすることが推奨されます。
FIPS strict モードに切り替える前に、前述の要件に加えて、次の点を必ず再確認してください。
- キー (レルムキーやクライアントキーなど) に依存するすべての Red Hat build of Keycloak 機能が、2048 ビット以上の RSA Red Hat build of Keycloak を使用していることを確認します。
-
Signed JWT with Client Secretに依存するクライアントが、長さが 14 文字以上のシークレット (理想的には生成されたシークレット) を使用していることを確認します。 -
前述したパスワードの長さの制限。ユーザーのパスワードがこれよりも短い場合は、前述したように、最大パディング長が 14 に設定された PBKDF2 プロバイダーを使用してサーバーを起動します。この方法を避ける場合は、たとえば全ユーザーに、新しい環境での初回認証時に (
Forgot passwordリンクを使用するなどして) パスワードをリセットするように依頼できます。
17.9. 非 FIPS システム上の Red Hat build of Keycloak FIPS モード リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、FIPS 対応の RHEL 8 システムおよび ubi8 イメージでサポートされ、テストされています。RHEL 9 (および ubi9 イメージ) でもサポートされています。RHEL 非互換プラットフォームまたは FIPS 非対応プラットフォームで実行している場合、FIPS 準拠が厳格に保証されることはなく、正式にサポートされません。
そのようなシステム上で Red Hat build of Keycloak を実行するように制限されている場合でも、java.security ファイルで設定されているセキュリティープロバイダーを更新することはできます。それを更新しても、FIPS 準拠には至りませんが、少なくともそれに近づきます。これは、前述のように、セキュリティープロバイダーのオーバーライドされたリストのみを含むカスタムセキュリティーファイルを提供することで実行できます。推奨プロバイダーのリストは、OpenJDK 21 のドキュメント を参照してください。
起動時に Red Hat build of Keycloak サーバーログで、正しいセキュリティープロバイダーが使用されているか確認できます。前述の Keycloak 起動コマンドで説明したように、暗号化関連の Red Hat build of Keycloak パッケージに対して TRACE ロギングが有効になっている必要があります。
第18章 管理インターフェイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
メトリクスやヘルスチェックなどのエンドポイント用に Red Hat build of Keycloak 管理インターフェイスを設定します。
管理インターフェイスを使用すると、プライマリー HTTP サーバーとは異なる HTTP サーバー経由で管理エンドポイントにアクセスできます。これにより、/metrics や /health などのエンドポイントを外部から隠すことが可能になり、セキュリティーが強化されます。特定の管理ポートが公開されない可能性があるため、最も重要な利点は、Kubernetes 環境で確認できるかもしれません。
18.1. 管理インターフェイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
管理インターフェイスは、何かが公開されるとオンになります。メトリクスとヘルスが有効な場合、/metrics や /health などの管理エンドポイントはデフォルトの管理ポート 9000 で公開されます。管理インターフェイスには一連のオプションが用意されており、完全に設定可能です。
管理インターフェイスのプロパティーが明示的に設定されていない場合、その値はデフォルトの HTTP サーバーから自動的に継承されます。
18.1.1. ポート リンクのコピーリンクがクリップボードにコピーされました!
管理インターフェイスのポートを変更するには、Red Hat build of Keycloak のオプション http-management-port を使用します。
18.1.2. Relative path リンクのコピーリンクがクリップボードにコピーされました!
管理エンドポイントの接頭辞パスは異なる場合があるため、管理インターフェイスの相対パスを変更できます。これは、Red Hat build of Keycloak のオプション http-management-relative-path を介して実現できます。
たとえば、CLI オプション --http-management-relative-path=/management を設定すると、メトリクスおよびヘルスエンドポイントは /management/metrics および /management/health パスでアクセスされます。
相対パスが指定されると、ユーザーは Red Hat build of Keycloak がホストされているパスに自動的に リダイレクト されます。つまり、相対パスが /management に設定され、ユーザーが localhost:9000/ にアクセスすると、ページは localhost:9000/management にリダイレクトされます。
値を明示的に設定しない場合は、http-relative-path プロパティーの値が使用されます。たとえば、CLI オプション --http-relative-path=/auth を設定すると、これらのエンドポイントは /auth/metrics パスと /auth/health パスでアクセスできます。
18.1.3. TLS サポート リンクのコピーリンクがクリップボードにコピーされました!
TLS がデフォルトの Red Hat build of Keycloak サーバーに設定されている場合、管理インターフェイスはデフォルトで HTTPS 経由でもアクセス可能になります。管理インターフェイスは、メインサーバーの場合のように両方ではなく、HTTP または HTTPS のいずれかでのみ実行できます。
管理インターフェイスで HTTPS を使用しない場合は、http-management-scheme オプションを http に設定できます。
管理用 HTTP サーバーに異なる TLS パラメーターを設定するために、https-management-* というプレフィックスを持つ Red Hat build of Keycloak の特定の管理インターフェイス用オプションが提供されています。これらのオプションの機能は、メインの HTTP サーバー用の対応する機能と同様です。詳細は、TLS の設定 を参照してください。これらのオプションが明示的に設定されていない場合、TLS パラメーターはデフォルトの HTTP サーバーから継承されます。
18.1.4. 管理インターフェイスを無効にする リンクのコピーリンクがクリップボードにコピーされました!
管理インターフェイスは、何も公開されていない場合は自動的にオフになります。現在、管理インターフェースでは、ヘルスチェックとメトリクスのみが公開されています。管理インターフェイス上での公開を無効にする場合は、Red Hat build of Keycloak プロパティー legacy-observability-interface を true に設定します。
セキュリティー上の理由から、デフォルトサーバーでヘルスエンドポイントとメトリクスエンドポイントを公開することは推奨されません。常に管理インターフェイスを使用する必要があります。legacy-observability-interface オプションは非推奨となり、今後のリリースで削除予定である点に注意してください。これは、単に移行のための時間を追加することができるだけです。
18.2. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
ヘルスが有効な場合にのみ使用可能です。 |
|
|
| (default) |
| 🛠
| (デフォルト) |
|
|
|
|
http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
http-management-scheme が継承されている場合にのみ使用可能です。 | (デフォルト) |
| 🛠
|
|
|
http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
http-management-scheme が継承されている場合にのみ使用可能です。 | (デフォルト) |
| 🛠
非推奨。 |
|
第19章 レルムのインポートとエクスポート リンクのコピーリンクがクリップボードにコピーされました!
レルムを JSON ファイルとしてインポートおよびエクスポートします。
この章では、JSON ファイルを使用してレルムをインポートおよびエクスポートするさまざまな方法を説明します。
19.1. インポート/エクスポートコマンド リンクのコピーリンクがクリップボードにコピーされました!
単一のファイルへのエクスポートやインポートは、ファイルが非常に大きくなり、エクスポート/インポートのプロセス中にメモリー不足を引き起こす可能性があります。データベースに 50,000 人以上のユーザーが含まれている場合は、単一のファイルではなくディレクトリーにエクスポートします。ファイルあたりのユーザー数のデフォルトは 50 ですが、必要に応じてさらに大きな値を使用することもできます。
import および export コマンドは、実質的にはサーバーを完全に起動する前に終了する、サーバーの起動プロセスです。現在、実行中のサーバーインスタンスと同じマシンから実行するようには設計されていないため、ポートやその他の競合が発生する可能性があります。
kc.[sh|bat] export コマンドを使用する前に、すべての Red Hat build of Keycloak ノードを停止することを推奨します。これにより、エクスポート中にユーザーまたはレルムが変更されても、結果に一貫性の問題が発生しなくなります。
オーバーライドオプションを指定して kc.[sh|bat] import コマンドを実行する前に、すべての Red Hat build of Keycloak ノードを停止する必要があります。このコマンドはキャッシュクラスターにアタッチされないため、レルムを上書きするとクラスター内のキャッシュに不整合が生じます。その結果、不整合または古い情報が表示され、使用されることになります。インポートコマンドでレルムを上書きする代わりに、インポートを実行する前に、管理 API を使用して上書きする必要があるレルムを削除することを検討してください。
19.1.1. データベース接続パラメーターのオプションを指定する リンクのコピーリンクがクリップボードにコピーされました!
以下の export および import コマンドを使用する場合、Red Hat build of Keycloak は、レルム、クライアント、ユーザー、およびその他のエンティティーに関する情報が保存されているデータベースに接続する方法を認識している必要があります。Red Hat build of Keycloak の設定 で説明されているように、その情報はコマンドラインパラメーター、環境変数、または設定ファイルとして提供できます。使用可能なオプションを確認するには、各コマンドに対して --help コマンドラインオプションを使用します。
設定オプションの一部は、ビルド時の設定オプションです。デフォルトでは、Red Hat build of Keycloak は、ビルド時のパラメーターにおける変更を検出すると、export および import コマンドに対して自動的に再ビルドします。
Red Hat build of Keycloak の設定 で説明されているように、build コマンドを使用して Red Hat build of Keycloak の最適化バージョンをビルドした場合は、コマンドラインオプション --optimized を使用して、起動時間を短縮するために Red Hat build of Keycloak がビルドチェックをスキップするようにします。その際には、コマンドラインからビルド時オプションを削除し、実行時オプションのみを保持します。
--optimized を使用しない場合、import または export コマンドによって最適化されたビルドが暗黙的に作成または更新される可能性があることに注意してください。サーバーインスタンスと同じマシンからこれらのコマンドを実行している場合は、サーバーの次回の起動に影響する可能性があります。
19.1.2. レルムをディレクトリーにエクスポートする リンクのコピーリンクがクリップボードにコピーされました!
レルムをエクスポートするには、export コマンドを使用します。このコマンドを呼び出すときに、Red Hat build of Keycloak サーバーインスタンスを開始しないでください。
bin/kc.[sh|bat] export --help
レルムをディレクトリーにエクスポートするには、--dir <dir> オプションを使用できます。
bin/kc.[sh|bat] export --dir <dir>
レルムをディレクトリーにエクスポートすると、サーバーはエクスポートされるレルムごとに個別のファイルを作成します。
19.1.2.1. ユーザーのエクスポート方法を設定する リンクのコピーリンクがクリップボードにコピーされました!
--users <strategy> オプションを設定することで、ユーザーのエクスポート方法も設定できます。このオプションで使用できる値は次のとおりです。
different_files-
--users-per-fileで設定したファイルあたりの最大ユーザー数に応じて、ユーザーを別々の json ファイルにエクスポートします。これはデフォルト値です。 skip- ユーザーのエクスポートをスキップします。
realm_file- ユーザーをレルム設定と同じファイルにエクスポートします。"foo" という名前のレルムの場合、レルムデータとユーザーを含む "foo-realm.json" になります。
same_file- すべてのユーザーを 1 つの明示的なファイルにエクスポートします。したがって、1 つのレルムに対して 2 つの json ファイル (レルムデータを含むファイルとユーザーを含むファイルを 1 つずつ) を取得することになります。
different_files ストラテジーを使用してユーザーをエクスポートしている場合は、--users-per-file オプションを設定することで、ファイルごとに必要なユーザー数を設定できます。デフォルト値は 50 です。
bin/kc.[sh|bat] export --dir <dir> --users different_files --users-per-file 100
19.1.3. レルムをファイルにエクスポートする リンクのコピーリンクがクリップボードにコピーされました!
レルムをファイルにエクスポートするには、--file <file> オプションを使用できます。
bin/kc.[sh|bat] export --file <file>
レルムをファイルにエクスポートする場合、サーバーは同じファイルを使用して、エクスポートされるすべてのレルムの設定を保存します。
19.1.4. 特定のレルムをエクスポートする リンクのコピーリンクがクリップボードにコピーされました!
エクスポートする特定のレルムを指定しない場合、すべてのレルムがエクスポートされます。単一のレルムをエクスポートする場合、次のように --realm オプションを使用できます。
bin/kc.[sh|bat] export [--dir|--file] <path> --realm my-realm
19.1.5. インポートファイルの命名規則 リンクのコピーリンクがクリップボードにコピーされました!
レルムをエクスポートするときには、特定のファイル名規則が使用されます。これは、ディレクトリーからのインポートや起動時のインポートにも使用する必要があります。インポートするレルムファイルの名前は、<realm name>-realm.json にする必要があります。レルムに関連付けられた通常ユーザーファイルとフェデレーションユーザーファイルの名前は、<realm-name>-users-<file number>.json および <realm-name>-federated-users-<file number>.json にする必要があります。この規則を使用しないと、エラーが発生したり、ユーザーファイルがインポートされなかったりします。
19.1.6. ディレクトリーからレルムをインポートする リンクのコピーリンクがクリップボードにコピーされました!
レルムをインポートするには、import コマンドを使用できます。このコマンドを呼び出すときに、Red Hat build of 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 に設定されているため、レルムは常に新しい設定でオーバーライドされます。
19.1.7. ファイルからレルムをインポートする リンクのコピーリンクがクリップボードにコピーされました!
以前に単一のファイルでエクスポートしたレルムをインポートするには、次のように --file <file> オプションを使用できます。
bin/kc.[sh|bat] import --file <file>
19.1.8. レルム設定ファイル内で環境変数を使用する リンクのコピーリンクがクリップボードにコピーされました!
プレースホルダーを使用して、任意のレルム設定の環境変数の値を解決できます。
プレースホルダーを使用したレルム設定
{
"realm": "${MY_REALM_NAME}",
"enabled": true,
...
}
上記の例では、MY_REALM_NAME 環境変数に設定された値が realm プロパティーの設定に使用されます。
現在、参照できる環境変数に制限はありません。環境変数を使用して機密情報を伝達する場合は、プレースホルダー参照によって機密性の高い環境変数の値が不適切に公開されないように注意してください。
19.2. 起動時にレルムをインポートする リンクのコピーリンクがクリップボードにコピーされました!
サーバーの起動時に、--import-realm オプションを使用してレルムをインポートすることもできます。
bin/kc.[sh|bat] start --import-realm
--import-realm オプションを設定すると、サーバーは data/import ディレクトリーからレルム設定ファイルをインポートしようとします。このディレクトリーからは .json 拡張子を使用する通常のファイルのみが読み取られ、サブディレクトリーは無視されます。
Red Hat build of Keycloak コンテナーの場合、インポートディレクトリーは /opt/keycloak/data/import です。
すでにレルムがサーバーに存在する場合、インポート操作はスキップされます。この動作の主な理由は、サーバーの再起動時にレルムを再作成し、状態を失う可能性を回避することです。
レルムを再作成するには、サーバーを起動する前に import コマンドを明示的に実行する必要があります。
インポートが完了するまでサーバーは完全に起動しません。
19.3. 管理コンソールを使用したインポートとエクスポート リンクのコピーリンクがクリップボードにコピーされました!
管理コンソールを使用してレルムをインポートおよびエクスポートすることもできます。この機能は、管理コンソールでクラスターがオンラインである必要があるため、前のセクションで説明した他の CLI オプションとは異なります。管理コンソールでは、レルムを 部分的に エクスポートする機能のみも提供されます。この場合、現在のレルム設定と、クライアント、ロール、グループなどの一部のリソースをエクスポートできます。この方法では、そのレルムのユーザーをエクスポートすることは できません。
管理コンソールのエクスポートを使用する場合、レルムと選択したリソースが、常に realm-export.json という名前のファイルにエクスポートされます。また、パスワードやクライアントシークレットなどの機密の高い値が、すべて * 記号でマスクされます。
管理コンソールを使用してレルムをエクスポートするには、次の手順を実行します。
- レルムを選択します。
- メニューで Realm settings をクリックします。
レルム設定画面の右上隅にある Action メニューに移動し、Partial export を選択します。
レルム設定とともにリソースのリストが表示されます。
- エクスポートするリソースを選択します。
- Export をクリックします。
管理コンソールからのレルムのエクスポートは、サーバー間のバックアップやデータ転送には適していません。サーバー間のバックアップまたはデータ転送には、CLI エクスポートのみを使用できます。
レルムに多数のグループ、ロール、およびクライアントが含まれている場合、この操作により、サーバーがしばらくの間、ユーザーの要求に応答しなくなる可能性があります。特に本番環境ではこの機能を使用してください。
同様の方法で、以前にエクスポートしたレルムをインポートすることもできます。以下の手順を実行します。
- メニューで Realm settings をクリックします。
レルム設定画面の右上隅にある Action メニューに移動し、Partial import を選択します。
インポートするファイルを選択できるプロンプトが表示されます。このファイルに基づいて、レルム設定とともにインポートできるリソースが表示されます。
- Import をクリックします。
インポートするリソースがすでに存在する場合の Red Hat build of Keycloak の動作を制御することもできます。以下のオプションがあります。
- Fail import
- インポートを中断します。
- Skip
- プロセスを中断せずに重複リソースをスキップします。
- Overwrite
- 既存のリソースをインポートするリソースに置き換えます。
管理コンソールの部分的なインポートでは、CLI export コマンドによって作成されたファイルもインポートできます。つまり、CLI で作成した完全なエクスポートを、管理コンソールを使用してインポートできます。ファイルにユーザーが含まれている場合、そのユーザーも現在のレルムにインポートできます。
第20章 vault の使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak で vault を設定して使用します。
Red Hat build of Keycloak は、すぐに使用できる Vault SPI 実装を 2 つ提供しています。それが、プレーンテキストファイルベースの vault と Java KeyStore ベースの Vault です。
ファイルベースの vault 実装は、Kubernetes/OpenShift シークレットで特に役立ちます。Kubernetes シークレットを Red Hat build of Keycloak コンテナーにマウントでき、データフィールドはフラットファイル構造のマウントされたフォルダーで使用可能になります。
Java KeyStore ベースの vault 実装は、ベアメタルインストールにシークレットを保存するのに役立ちます。パスワードを使用して暗号化された KeyStore vault を使用できます。
20.1. 利用可能な統合 リンクのコピーリンクがクリップボードにコピーされました!
vault に保存されたシークレットは、管理コンソールの次の場所で使用できます。
- SMTP メールサーバーのパスワードを取得します。
- LDAP ベースのユーザーフェデレーションを使用する場合に LDAP バインド認証情報を取得します。
- 外部アイデンティティープロバイダーを統合するときに OIDC アイデンティティープロバイダーのクライアントシークレットを取得します。
20.2. vault を有効にする リンクのコピーリンクがクリップボードにコピーされました!
ファイルベースの vault を有効にするには、まず次のビルドオプションを使用して Red Hat build of Keycloak をビルドする必要があります。
bin/kc.[sh|bat] build --vault=file
同様に、Java KeyStore ベースの場合は、次のビルドオプションを指定する必要があります。
bin/kc.[sh|bat] build --vault=keystore
20.3. ファイルベースの vault を設定する リンクのコピーリンクがクリップボードにコピーされました!
20.3.1. シークレット検索に使用するベースディレクトリーを設定する リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes/OpenShift シークレットは、基本的にマウントされたファイルです。これらのファイルをマウントするディレクトリーを設定するには、次のコマンドを入力します。
bin/kc.[sh|bat] start --vault-dir=/my/path
20.3.2. レルム固有のシークレットファイル リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes/OpenShift シークレットは、Red Hat build of Keycloak でレルムごとに使用されるため、ファイルの命名規則を適切に設定する必要があります。
${vault.<realmname>_<secretname>}
20.4. Java KeyStore ベースの vault を設定する リンクのコピーリンクがクリップボードにコピーされました!
Java KeyStore ベースの vault を使用するには、最初に KeyStore ファイルを作成する必要があります。これを行うには、次のコマンドを使用できます。
keytool -importpass -alias <realm-name>_<alias> -keystore keystore.p12 -storepass keystorepassword
次に、vault に保存する値を入力します。-alias パラメーターの形式は、使用するキーリゾルバーによって異なることに注意してください。デフォルトのキーリゾルバーは REALM_UNDERSCORE_KEY です。
これにより、デフォルトでは、SecretKeyEntry 内の汎用 PBEKey (パスワードベースの暗号化) の形式で値が保存されます。
その後、次のランタイムオプションを使用して Red Hat build of Keycloak を起動できます。
bin/kc.[sh|bat] start --vault-file=/path/to/keystore.p12 --vault-pass=<value> --vault-type=<value>
--vault-type パラメーターはオプションであり、デフォルトは PKCS12 であることに注意してください。
vault に保存されているシークレットは、プレースホルダー ${vault.realm-name_alias} を介してレルム内でアクセスできます (REALM_UNDERSCORE_KEY キーリゾルバーを使用していると仮定)。
20.5. シークレット名にアンダースコアを使用する リンクのコピーリンクがクリップボードにコピーされました!
シークレットを正しく処理するには、<secretname> 内のすべてのアンダースコアを 2 連にします。REALM_UNDERSCORE_KEY キーリゾルバーが使用されている場合、<realmname> 内のアンダースコアも 2 連になり、<secretname> と <realmname> は 1 つのアンダースコアで区切られます。
例
-
レルム名:
sso_realm -
予定している名前:
ldap_credential - 結果のファイル名:
sso__realm_ldap__credential
sso と realm の間、および ldap と credential の間にアンダースコアが 2 つあることに注意してください。
キーリゾルバーの詳細は、サーバー管理ガイドのキーリゾルバーセクション を参照してください。
20.6. 例: 管理コンソールで LDAP バインド認証情報シークレットを使用する リンクのコピーリンクがクリップボードにコピーされました!
セットアップ例
-
名前が
secrettestのレルム -
バインド認証情報の名前は
ldapBc -
結果のファイル名:
secrettest_ldapBc
管理コンソールでの使用法
その後、LDAP ユーザーフェデレーションを設定する際に Bind Credential の値として ${vault.ldapBc} を使用することで、管理コンソールからこのシークレットを使用できます。
20.7. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
|
|
|
| |
|
| |
|
| |
|
| (デフォルト) |
第21章 すべての設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak のビルドオプションと設定を確認します。
21.1. Cache リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: |
|
|
CLI: | |
|
CLI: |
|
|
CLI: | |
|
CLI: 組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
CLI: | |
|
CLI: | |
|
CLI: TCP ベースのキャッシュスタックが使用されている場合にのみ使用可能です。 |
|
|
CLI: プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
CLI: プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
CLI: プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | (デフォルト) |
|
CLI: プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
CLI: プロパティー 'cache-embedded-mtls-enabled' が有効な場合にのみ使用可能です。 | |
|
CLI: Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
CLI: Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
CLI: Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
CLI: Infinispan クラスター組み込みが有効な場合にのみ使用可能です。 | |
|
CLI: 組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
CLI: 組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
CLI: | |
|
CLI: 組み込み Infinispan クラスターが設定されている場合にのみ使用可能です。 | |
|
CLI: | |
|
CLI: メトリクスが有効になっている場合にのみ使用可能です。 |
|
|
CLI: リモートホストが設定されている場合にのみ使用可能です。 | |
|
CLI: | |
|
CLI: リモートホストが設定されている場合にのみ使用可能です。 | |
|
CLI: リモートホストが設定されている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: リモートホストが設定されている場合にのみ使用可能です。 |
|
|
CLI: リモートホストが設定されている場合にのみ使用可能です。 | |
|
CLI: 'cache' タイプが 'ispn' に設定されている場合にのみ使用可能です。
この設定を未設定のままにして、代わりに 'jdbc-ping' を使用してください。非推奨値: |
|
21.2. Config リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: | |
|
CLI: | |
|
CLI: | (デフォルト) |
21.3. データベース リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
名前付きキー: 🛠
CLI: |
|
|
名前付きキー:
CLI: |
|
| 🛠
名前付きキー: 🛠
CLI: | |
|
名前付きキー:
CLI: | (デフォルト) |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: | |
|
CLI: | |
|
名前付きキー:
CLI: | (デフォルト) |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: | |
|
名前付きキー:
CLI: |
21.4. データベース - 追加のデータソース リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: |
|
| 🛠
CLI: | |
|
CLI: |
|
| 🛠
CLI: |
|
|
CLI: | (デフォルト) |
|
CLI: | |
|
CLI: | |
|
CLI: | (デフォルト) |
|
CLI: | |
|
CLI: | |
|
CLI: | |
|
CLI: | |
|
CLI: | |
|
CLI: | |
|
CLI: | |
|
CLI: |
21.5. トランザクション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
名前付きキー: 🛠
CLI: |
|
| 🛠
CLI: |
|
21.6. 機能 リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
CLI: |
|
| 🛠
CLI: |
|
21.7. ホスト名 v2 リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: ホスト名:v2 機能が有効な場合にのみ使用可能です。 | |
|
CLI: ホスト名:v2 機能が有効な場合にのみ使用可能です。 | |
|
CLI: ホスト名:v2 機能が有効な場合にのみ使用可能です。 |
|
|
CLI: ホスト名:v2 機能が有効な場合にのみ使用可能です。 |
|
|
CLI: ホスト名:v2 機能が有効な場合にのみ使用可能です。 |
|
21.8. HTTP(S) リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: 非推奨。 |
|
|
CLI: |
|
|
CLI: | (デフォルト) |
|
CLI: | |
|
CLI: メトリクスが有効になっている場合にのみ使用可能です。 |
|
|
CLI: メトリクスが有効になっている場合にのみ使用可能です。 | |
|
CLI: | |
|
CLI: | (デフォルト) |
| 🛠
CLI: | (デフォルト) |
|
CLI: | |
|
CLI: | |
|
CLI: | (デフォルト) |
|
CLI: | |
| 🛠
CLI: |
|
|
CLI: | |
|
CLI: | (デフォルト) |
|
CLI: | |
|
CLI: | (デフォルト) |
|
CLI: |
|
|
CLI: | |
|
CLI: | |
|
CLI: |
21.9. HTTP アクセスログ リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: |
|
|
CLI: HTTP アクセスログが有効な場合にのみ使用可能です。 | |
|
CLI: HTTP アクセスログが有効な場合にのみ使用可能です。 |
|
21.10. ヘルス リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
CLI: |
|
21.11. 管理 リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
CLI: ヘルスが有効な場合にのみ使用可能です。 |
|
|
CLI: | (default) |
| 🛠
CLI: | (デフォルト) |
|
CLI: |
|
|
CLI: http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
CLI: http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
CLI: http-management-scheme が継承されている場合にのみ使用可能です。 | (デフォルト) |
| 🛠
CLI: |
|
|
CLI: http-management-scheme が継承されている場合にのみ使用可能です。 | |
|
CLI: http-management-scheme が継承されている場合にのみ使用可能です。 | (デフォルト) |
| 🛠
CLI: 非推奨。 |
|
21.12. メトリクス リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
CLI: |
|
21.13. Proxy リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: |
|
|
CLI: |
|
|
CLI: |
21.14. Vault リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
CLI: |
|
|
CLI: | |
|
CLI: | |
|
CLI: | |
|
CLI: | (デフォルト) |
21.15. Logging リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: |
|
|
CLI: |
|
|
CLI: Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Console ログハンドラーがアクティブ化され、非同期ロギングが有効になっている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: Console ログハンドラーと MDC ロギングがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Console ログハンドラーとトレーシングがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Console ログハンドラーがアクティブ化され、出力が 'json' に設定されている場合にのみ使用可能です。 |
|
|
CLI: Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Console ログハンドラーがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: File ログハンドラーがアクテ化されている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: File ログハンドラーがアクテ化されている場合にのみ使用可能です。 |
|
|
CLI: File ログハンドラーがアクティブ化され、非同期ロギングが有効になっている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: File ログハンドラーがアクテ化されている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: File ログハンドラーと MDC ロギングがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: File ログハンドラーとトレーシングがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: File ログハンドラーがアクティブ化され、出力が 'json' に設定されている場合にのみ使用可能です。 |
|
|
CLI: File ログハンドラーがアクテ化されている場合にのみ使用可能です。 |
|
|
CLI: File ログハンドラーがアクテ化されている場合にのみ使用可能です。 |
|
|
CLI: | (デフォルト) |
|
CLI: |
|
| 🛠
CLI: log-mdc プレビュー機能が有効になっている場合にのみ使用可能です。 |
|
|
CLI: MDC ロギングが有効になっている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化され、非同期ロギングが有効になっている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 | (default) |
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 | (デフォルト) |
|
CLI: Syslog ハンドラーと MDC ロギングがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Syslog ハンドラーとトレーシングがアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化され、出力が 'json' に設定されている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 | |
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
|
CLI: Syslog がアクティブ化されている場合にのみ使用可能です。 |
|
21.16. トレーシング リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: トレーシングが有効な場合にのみ使用可能 |
|
| 🛠
CLI: 'opentelemetry' 機能が有効になっている場合にのみ利用可能 |
|
|
CLI: トレーシングが有効な場合にのみ使用可能 | (デフォルト) |
|
CLI: トレーシングと埋め込み Infinispan が有効な場合にのみ使用可能 |
|
| 🛠
CLI: トレーシングが有効な場合にのみ使用可能 |
|
|
CLI: トレーシングが有効な場合にのみ使用可能 |
|
|
CLI: トレーシングが有効な場合にのみ使用可能 | |
|
CLI: トレーシングが有効な場合にのみ使用可能 | (デフォルト) |
| 🛠
CLI: トレーシングが有効な場合にのみ使用可能 |
|
|
CLI: トレーシングが有効な場合にのみ使用可能 | (デフォルト) |
21.17. Events リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
CLI: メトリクスが有効で、user-event-metrics 機能が有効になっている場合にのみ使用できます。 |
|
|
CLI: ユーザーイベントメトリクスが有効になっている場合にのみ使用できます。
|
|
|
CLI: ユーザーイベントメトリクスが有効になっている場合にのみ使用できます。 |
|
21.18. Truststore リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI:
STRICT と WILDCARD は非推奨となりました。代わりに DEFAULT を使用してください。非推奨の値: |
|
|
CLI: |
21.19. Security リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
CLI: |
|
21.20. Export リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: | |
|
CLI: | |
|
CLI: | |
|
CLI: |
|
|
CLI: | (デフォルト) |
21.21. インポート リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: | |
|
CLI: | |
|
CLI: |
|
21.22. ブートストラップ管理者 リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
CLI: | (default) |
|
CLI: | |
|
CLI: | |
|
CLI: | (default) |
第22章 すべてのプロバイダー設定 リンクのコピーリンクがクリップボードにコピーされました!
プロバイダーの設定オプションを確認します。
22.1. authentication-sessions リンクのコピーリンクがクリップボードにコピーされました!
22.1.1. infinispan リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.1.2. remote リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
22.2. brute-force-protector リンクのコピーリンクがクリップボードにコピーされました!
22.2.1. default-brute-force-detector リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.3. cache-embedded リンクのコピーリンクがクリップボードにコピーされました!
22.3.1. default リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
|
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
22.4. cache-remote リンクのコピーリンクがクリップボードにコピーされました!
22.4.1. default リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
|
|
|
|
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
任意の |
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
(デフォルト) または任意の |
|
|
|
|
|
任意の |
|
|
任意の |
22.5. ciba-auth-channel リンクのコピーリンクがクリップボードにコピーされました!
22.5.1. ciba-http-auth-channel リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
22.6. connections-http-client リンクのコピーリンクがクリップボードにコピーされました!
22.6.1. default リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
(デフォルト) または任意の |
|
|
|
|
|
|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
|
|
|
(デフォルト) または任意の |
22.6.2. opentelemetry リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
任意の |
|
|
任意の |
|
|
(デフォルト) または任意の |
|
|
|
|
|
|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
|
|
|
(デフォルト) または任意の |
22.7. connections-jpa リンクのコピーリンクがクリップボードにコピーされました!
22.7.1. quarkus リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
任意の |
|
|
|
22.8. credential リンクのコピーリンクがクリップボードにコピーされました!
22.8.1. keycloak-password リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.9. crl-storage リンクのコピーリンクがクリップボードにコピーされました!
22.9.1. infinispan リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
22.10. datastore リンクのコピーリンクがクリップボードにコピーされました!
22.10.1. legacy リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.11. dblock リンクのコピーリンクがクリップボードにコピーされました!
22.11.1. jpa リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
22.12. device-representation リンクのコピーリンクがクリップボードにコピーされました!
22.12.1. device-representation リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.13. events-listener リンクのコピーリンクがクリップボードにコピーされました!
22.13.1. email リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
|
22.13.2. jboss-logging リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
|
|
|
(デフォルト) または任意の |
|
|
|
|
|
|
22.14. export リンクのコピーリンクがクリップボードにコピーされました!
22.14.1. dir リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
任意の |
|
|
(デフォルト)、または任意の |
|
|
(デフォルト) または任意の |
22.14.2. single-file リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
任意の |
22.15. group リンクのコピーリンクがクリップボードにコピーされました!
22.15.1. jpa リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
任意の |
22.16. import リンクのコピーリンクがクリップボードにコピーされました!
22.16.1. dir リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
任意の |
|
|
任意の |
22.16.2. single-file リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
任意の |
|
|
任意の |
22.17. jgroups-mtls リンクのコピーリンクがクリップボードにコピーされました!
22.17.1. default リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
任意の |
|
|
任意の |
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
任意の |
22.18. load-balancer-check リンクのコピーリンクがクリップボードにコピーされました!
22.18.1. remote リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.19. login-protocol リンクのコピーリンクがクリップボードにコピーされました!
22.19.1. openid-connect リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
任意の |
22.19.2. saml リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.20. login-failure リンクのコピーリンクがクリップボードにコピーされました!
22.20.1. remote リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
22.21. mapped-diagnostic-context リンクのコピーリンクがクリップボードにコピーされました!
22.21.1. default リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.22. password-hashing リンクのコピーリンクがクリップボードにコピーされました!
22.22.1. argon2 リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
|
|
|
|
22.23. public-key-storage リンクのコピーリンクがクリップボードにコピーされました!
22.23.1. infinispan リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
22.24. required-action リンクのコピーリンクがクリップボードにコピーされました!
22.24.1. CONFIGURE_RECOVERY_AUTHN_CODES リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
22.24.2. CONFIGURE_TOTP リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
(デフォルト) または任意の |
22.24.3. TERMS_AND_CONDITIONS リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.4. UPDATE_EMAIL リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
|
22.24.5. UPDATE_PASSWORD リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.6. UPDATE_PROFILE リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.7. VERIFY_EMAIL リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
22.24.8. VERIFY_PROFILE リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.9. delete_credential リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.10. idp_link リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.11. update_user_locale リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.12. webauthn-register リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.24.13. webauthn-register-passwordless リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.25. resource-encoding リンクのコピーリンクがクリップボードにコピーされました!
22.25.1. gzip リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
22.26. security-profile リンクのコピーリンクがクリップボードにコピーされました!
22.26.1. default リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
22.27. single-use-object リンクのコピーリンクがクリップボードにコピーされました!
22.27.1. infinispan リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.27.2. remote リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.28. sticky-session-encoder リンクのコピーリンクがクリップボードにコピーされました!
22.28.1. infinispan リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.28.2. remote リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.29. storage リンクのコピーリンクがクリップボードにコピーされました!
22.29.1. ldap リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
22.30. truststore リンクのコピーリンクがクリップボードにコピーされました!
22.30.1. file リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
|
|
|
任意の |
|
|
任意の |
22.31. user-profile リンクのコピーリンクがクリップボードにコピーされました!
22.31.1. declarative-user-profile リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
任意の |
|
|
任意の |
|
|
任意の |
22.32. user-sessions リンクのコピーリンクがクリップボードにコピーされました!
22.32.1. infinispan リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
任意の |
|
|
任意の |
|
|
|
|
|
|
22.32.2. remote リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
|
|
(デフォルト) または任意の |
22.33. well-known リンクのコピーリンクがクリップボードにコピーされました!
22.33.1. oauth-authorization-server リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
任意の |
22.33.2. openid-configuration リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
|
|
|
|
|
任意の |
第23章 ローリング更新が可能かどうかを確認する リンクのコピーリンクがクリップボードにコピーされました!
更新互換性コマンドを実行して、Red Hat build of Keycloak がデプロイメントの変更に対するローリング更新をサポートしているかどうかを確認します。
機能を有効化または無効化するとき、あるいは Red Hat build of Keycloak のバージョン、設定、プロバイダー、テーマを変更するときに、ローリング更新ストラテジーを使用してデプロイメントを更新できるかどうかを確認するには、更新互換性コマンドを使用します。結果には、ローリング更新が可能かどうか、または再作成更新が必要かどうかが示されます。
現在のバージョンでは、古いバージョンと新しいバージョンの Red Hat build of Keycloak バージョンが同じである場合にローリング更新が可能であることを示しています。Red Hat build of Keycloak の今後のバージョンでは、その動作が変更され、設定、イメージ、バージョンからの追加情報を使用して、ローリング更新でダウンタイムを削減可能かどうかが判断されます。
この機能の次のイテレーションでは、Red Hat build of Keycloak の次のパッチリリースに更新する際にも、ローリング更新ストラテジーを使用できます。詳細は、「パッチリリースのローリング更新」 セクションを参照してください。
これは完全にスクリプト化可能であるため、更新手順ではその情報を使用して、実行された変更に応じてローリングを実行したり、ストラテジーを再作成したりできます。また、以前の設定のメタデータをファイルに保存できるため、GitOps にも適しています。このファイルを新しい設定の CI/CD パイプラインで使用して、ローリング更新が可能かどうか、または再作成更新が必要かどうかを判断します。
Red Hat build of Keycloak Operator を使用している場合は、ローリング更新によるダウンタイムの回避 の章と Auto ストラテジーに移動して、詳細を確認してください。
23.1. サポート対象の更新ストラテジー リンクのコピーリンクがクリップボードにコピーされました!
- ローリング更新
- このガイドでは、ローリング更新とは、少なくとも 2 つのノードで構成されるデプロイメントに対して、ダウンタイムなしで実行できる更新を指します。Red Hat build of Keycloak を 1 つずつ更新します。古いデプロイメントノードの 1 つをシャットダウンし、新しいデプロイメントノードを起動します。Red Hat build of Keycloak に進む前に、新しいノードの起動プローブが成功を返すまで待機します。起動プローブを有効にして使用する方法の詳細は ヘルスチェックによるインスタンスステータスの追跡 の章を参照してください。
- 再作成更新
- 再作成更新はゼロダウンタイムと互換性がないため、ダウンタイムを適用する必要があります。新しいバージョンのノードを起動する前に、古いバージョンを実行しているクラスターのすべてのノードをシャットダウンします。
23.2. 更新された設定に対する更新ストラテジーの決定 リンクのコピーリンクがクリップボードにコピーされました!
ローリング更新が可能かどうかを判断するには、以下を実行します。
- 更新互換性コマンドを実行して、古い設定で必要なメタデータを生成します。
- 新しい設定でメタデータをチェックして、更新ストラテジーを決定します。
--optimized を使用しない場合、update コマンドによって暗黙的に最適化されたビルドが作成または更新される可能性があることに注意してください。サーバーインスタンスと同じマシンからコマンドを実行している場合、サーバーの次回の起動に影響する可能性があります。
これらのコマンドのコンシューマーは、メタデータファイルの内部動作や構造に依存しないでください。今後の内部ロジックの改善によるメリットを得るためにも、ローリングアップデートの可否判断には、check コマンドの終了コードのみをもとに判断するようにしてください。
23.2.1. メタデータの生成 リンクのコピーリンクがクリップボードにコピーされました!
メタデータを生成するには、同じ Red Hat build of Keycloak バージョンと設定オプションを使用して、次のコマンドを実行します。
現在のデプロイメントからメタデータを生成して保存します。
bin/kc.[sh|bat] update-compatibility metadata --file=/path/to/file.json
このコマンドは、start コマンドで使用されるオプションをすべて使用できます。このコマンドは、デバッグの目的で、JSON 形式でメタデータをコンソールに表示します。--file パラメーターを使用すると、メタデータをファイルに保存できます。このファイルを後続の check コマンドで使用します。
上記のコマンドを実行する際は、環境変数か CLI 引数かに関係なく、すべての設定オプションが含まれていることを確認してください。
設定オプションを省略すると、メタデータが不完全になり、次のステップで間違った結果が報告される可能性があります。
23.2.2. メタデータの確認 リンクのコピーリンクがクリップボードにコピーされました!
このコマンドは、前のコマンドによって生成されたメタデータをチェックして、現在の設定と Red Hat build of Keycloak と比較します。新しい Red Hat build of Keycloak バージョンに更新する場合は、このコマンドを新しいバージョンで実行する必要があります。
以前のデプロイメントからのメタデータを確認します。
bin/kc.[sh|bat] update-compatibility check --file=/path/to/file.json
- コマンドを実行する際は、環境変数か CLI 引数かに関係なく、すべての設定オプションが含まれていることを確認してください。
- 正しい Red Hat build of Keycloak バージョンが使用されていることを確認します。
これらの要件を満たさない場合、結果は不正確になります。
コマンドは結果をコンソールに出力します。たとえば、ローリング更新が可能な場合は、次のように表示されます。
ローリング更新が可能であることを示すメッセージ
[OK] Rolling Update is available.
ローリング更新が不可能な場合、このコマンドで互換性がない旨の情報が表示されます。
ローリング更新が不可能であることを示すメッセージ
[keycloak] Rolling Update is not available. 'keycloak.version' is incompatible: 26.2.0 -> 26.2.1
- 1
- この例では、Keycloak バージョン
26.2.0はバージョン26.2.1と互換性がなく、ローリング更新は実行できません。
この機能の次のイテレーションでは、Red Hat build of Keycloak の次のパッチリリースに更新する際にも、ローリング更新ストラテジーを使用できます。詳細は、「パッチリリースのローリング更新」 セクションを参照してください。
コマンド終了コード
コマンドの終了コードを使用して、自動化パイプラインの更新タイプを判別します。
| 終了コード | 説明 |
|---|---|
|
| ローリング更新が可能です。 |
|
| 予期しないエラーが発生しました (メタデータファイルが見つからないか破損しているなど)。 |
|
| 無効な CLI オプションです。 |
|
| ローリング更新はできません。新しい設定を適用する前に、デプロイメントをシャットダウンする必要があります。 |
|
|
ローリング更新はできません。 |
23.3. 互換性のない変更のローリング リンクのコピーリンクがクリップボードにコピーされました!
次の設定変更では、"Rolling Update is not possible" という結果コードが返されます。
23.3.1. 機能 リンクのコピーリンクがクリップボードにコピーされました!
23.3.1.1. 常に再作成する リンクのコピーリンクがクリップボードにコピーされました!
以下の機能を有効化または無効化する場合、再作成更新が必要です。
| 機能 | 説明 |
|---|---|
| multi-site:v1 | マルチサイトサポート |
| persistent-user-sessions:v1 | 再起動やアップグレード後もオンラインユーザーセッションが維持される |
23.3.1.2. 機能バージョンの変更時に再作成する リンクのコピーリンクがクリップボードにコピーされました!
以下の機能のバージョンを変更すると、再作成更新がトリガーされます。
| 機能 | 説明 |
|---|---|
| login:v1 | レガシーログインテーマ |
| login:v2 | 新しいログインテーマ |
| passkeys-conditional-ui-authenticator:v1 | Passkeys 条件付き UI オーセンティケーター |
23.3.2. 設定オプション リンクのコピーリンクがクリップボードにコピーされました!
以下のいずれかの CLI オプションの値を変更すると、再作成更新がトリガーされます。
| オプション | 理由 |
|---|---|
|
|
|
|
| 設定ファイルを変更すると、キャッシュまたはトランスポート設定に互換性がなくなり、クラスターが期待どおりに形成されなくなる可能性があります。 |
|
| スタックを変更すると、ローリング更新中にクラスターが形成されなくなり、データが失われます。 |
|
| TLS を有効化/無効化すると、ローリング更新中にクラスターが形成されなくなり、データが失われます。 |
|
| 新しいリモートキャッシュに接続すると、以前にキャッシュされたデータが失われます。 |
|
| 新しいリモートキャッシュに接続すると、以前にキャッシュされたデータが失われます。 |
Red Hat build of Keycloak は、--cache-config-file を介して提供されるキャッシュ設定ファイルの内容の変更を検証しません。このファイルを変更する場合は、新しい設定を使用するノードが古い設定を実行しているノードとクラスターを形成できることを確認するために、変更内容を確認してテストする必要があります。クラスターを形成できない場合は、新しい設定に移行する前に、まず古い設定を実行している Red Hat build of Keycloak をシャットダウンする必要があります。
| オプション | 理由 |
|---|---|
|
| データの一貫性を確保するために、新しいデータベースベンダーへの移行をすべてのクラスターメンバーに適用する必要があります。 |
|
| データの一貫性を確保するために、新しいデータベーススキーマへの移行をすべてのクラスターメンバーに適用する必要があります。 |
|
| データの一貫性を確保するために、新しいデータベース名への移行をすべてのクラスターメンバーに適用する必要があります。 |
|
| データの一貫性を確保するには、すべてのクラスターメンバーが同じデータベースに接続する必要があります。 |
|
| データの一貫性を確保するには、すべてのクラスターメンバーが同じデータベースに接続する必要があります。 |
Red Hat build of Keycloak では、JDBC プロパティーの変更を容易にするために、--db-url オプションの変更をロールアウトできます。ホスト、ポート、またはデータベース名を変更すると、異なるクラスターメンバーが別のデータベースに接続し、データの一貫性の問題が発生する可能性があるため、この値を更新するときは十分注意する必要があります。
23.4. パッチリリースのローリング更新 リンクのコピーリンクがクリップボードにコピーされました!
この動作は現在プレビューモードであり、実稼働環境での使用は推奨されません。
同じ major.minor リリースストリーム内の新しいパッチバージョンにアップグレードする際に、ローリング更新を許可するように Red Hat build of Keycloak 互換性コマンドを設定できます。
互換性チェックコマンドでこの動作を有効化するには、次の例のように rolling-updates:v2 機能を有効化します。
bin/kc.[sh|bat] update-compatibility check --file=/path/to/file.json --features=rolling-updates:v2
metadata コマンドを使用してメタデータを生成する場合は、変更の必要がないことに注意してください。
推奨される設定:
- ロードバランサーでスティッキーセッションを有効化して、ユーザーが Red Hat build of Keycloak の異なるバージョン間を行き来することを防ぎます。そうしないと、アップグレードの進行中にユーザーがアカウントコンソールおよび管理 UI を複数回更新する必要が生じる可能性があります。
ローリング更新中にサポートされる機能:
- ユーザーは OpenID Connect クライアントにログインおよびログアウトできます。
- OpenID Connect クライアントは、トークンの更新やユーザー情報エンドポイントのクエリーなど、すべての操作を実行できます。
既知の制限
- パッチリリースでアカウントコンソールまたは管理 UI に変更があり、ユーザーがアップグレード前またはアップグレード中にアカウントコンソールまたは管理 UI を開いた場合、アップグレード中またはアップグレード後にブラウザーで操作している際にエラーメッセージが表示され、アプリケーションの再読み込みを求められることがあります。
- Red Hat build of Keycloak の 2 つのパッチリリースで、組み込み Infinispan の異なるバージョンが使用されている場合、Red Hat build of Keycloak のローリング更新は実行されません。
23.5. 関連資料 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak Operator は、上記の機能を使用して、ローリング更新が可能かどうかを判断します。詳細は、ローリング更新によるダウンタイムの回避 の章と Auto ストラテジーを参照してください。
23.6. 関連するオプション リンクのコピーリンクがクリップボードにコピーされました!
| 値 | |
|---|---|
| 🛠
|
|
| 🛠
|
|