2.11. その他の変更点
2.11.1. Argon2 パスワードハッシュ
Argon2 は現在、非 FIPS 環境での Red Hat build of Keycloak で使用されるデフォルトのパスワードハッシュアルゴリズムです。
Argon2 は 2015 年のパスワードハッシュコンテスト で優勝し、OWASP によって推奨されるハッシュアルゴリズムです。
Red Hat build of Keycloak 24 では、PBKDF2 のデフォルトのハッシュイテレーションが 27.5K から 210K に増加し、パスワードハッシュの生成に必要な CPU 時間が 10 倍以上増加しました。Argon2 を使用すると、以前のリリースの Red Hat build of Keycloak とほぼ同じ CPU 時間で、より優れたセキュリティーを実現できます。1 つの欠点として、Argon2 ではメモリーがより多く必要になりますが、これは GPU 攻撃に耐えるためには必要です。Red Hat build of Keycloak の Argon2 のデフォルトでは、ハッシュ要求ごとに 7MB が必要です。
メモリーと CPU の過剰な使用を防ぐため、デフォルトでは、Argon2 によるハッシュの並列計算において、JVM で利用可能なコア数が上限となっています。Argon2 のメモリー集約型の性質をサポートするために、ヒープの使用率を向上させるために、デフォルトの GC を ParallelGC から G1GC に更新しました。
Argon2 は FIPS 140-2 に準拠していないことに注意してください。したがって、FIPS 環境の場合、デフォルトのアルゴリズムは引き続き PBKDF2 になります。また、FIPS 以外の環境で使用しており、FIPS 環境に移行する予定がある場合は、最初にパスワードポリシーを pbkdf2-sha512
などの FIPS 準拠アルゴリズムに変更することを検討してください。そうしないと、ユーザーは FIPS 環境に切り替えた後にログインできなくなります。
2.11.2. デフォルトの http-pool-max-threads
が削減される
http-pool-max-threads
が設定されていない場合、デフォルトで 50 または 4 x (使用可能なプロセッサー数) のいずれか大きい方に設定されます。以前は、200 または 8 x (使用可能なプロセッサー数) のいずれか大きい方にデフォルト設定されていました。ほとんどの使用シナリオでは、タスクスレッドの数を減らすと、アクティブなスレッド間のコンテキスト切り替えが少なくなるため、パフォーマンスがわずかに向上します。
2.11.3. findGrantedResources
および findGrantedOwnerResources
クエリーのパフォーマンスが向上する
RESOURCE_SERVER_RESOURCE
と RESOURCE_SERVER_PERM_TICKET
テーブルに 100,000 を超えるエントリーがあり、ユーザーに 1,000 を超えるリソースへのアクセスが許可されている場合、これらのクエリーのパフォーマンスは低下しました。クエリーが簡素化され、requester
列と owner
列の新しいインデックスが導入されました。
新しいインデックスは両方とも RESOURCE_SERVER_PERM_TICKET
テーブルに適用されます。テーブルに現在 300,000 を超えるエントリーが含まれている場合、Red Hat build of Keycloak は、自動スキーマ移行中にデフォルトでインデックスの作成をスキップし、代わりに移行中にコンソールに SQL ステートメントを記録します。この場合、Red Hat build of Keycloak の起動後に、DB でステートメントを手動で実行する必要があります。
2.11.4. getExp
メソッドが SingleUseObjectKeyModel
に追加される
AccessToken
、IDToken
、および JsonWebToken
から非推奨のメソッドが削除された結果、有効期限値に関連するメソッド名との一貫性を保つために SingleUseObjectKeyModel
も変更されました。
以前の getExpiration
メソッドは非推奨となり、2038 年以降のオーバーフローを回避するために、新しく導入された getExp
メソッドを使用することを推奨します。
2.11.5. ブルートフォースが有効な場合、同時ログイン要求はデフォルトでブロックされる
攻撃者が多数のログイン試行を同時に実行した場合、ブルートフォース攻撃保護の設定で許可されている回数を超えてパスワードを推測できる可能性があります。これは、ブルートフォースプロテクターがユーザーをロックする前に、ブルートフォースチェックが実行されたことが原因です。この競合を防ぐために、ブルートフォースプロテクターは、同じサーバーで別のログインが進行中に発生するすべてのログイン試行を拒否するようになりました。
この機能を無効にしたい場合は、次のコマンドを使用します。
bin/kc.[sh|bat] start --spi-brute-force-protector-default-brute-force-detector-allow-concurrent-requests=true
2.11.6. ワイルドカード使用時のリダイレクト URI 検証の変更
セキュリティー上の懸念から、渡されたリダイレクト URI に userinfo
部分が含まれている場合、またはその path
が親ディレクトリー (/../
) にアクセスする場合、リダイレクト URI 検証では正確な文字列マッチング (ワイルドカードは使用しない) が実行されるようになりました。
完全なワイルドカード *
は、これらの特性を持つ http (s) URI の開発において有効なリダイレクトとして引き続き使用できます。実稼働環境では、そのタイプの URI に対してワイルドカードを必要としない正確で有効なリダイレクト URI を設定します。
ワイルドカードが有効なリダイレクト URI は実稼働環境では推奨されておらず、OAuth 2.0 仕様ではカバーされていないことに注意してください。
2.11.7. Infinispan マーシャリングの変更
マーシャリングは、Java オブジェクトをバイトに変換し、Red Hat build of Keycloak サーバー間でネットワーク経由で送信するプロセスです。Red Hat build of Keycloak 26 では、マーシャリングライブラリーが JBoss Marshalling から Infinispan Protostream に変更されました。ライブラリーは相互に互換性がないため、セッションデータが失われないようにするにはいくつかの手順が必要です。
JBoss Marshalling と Infinispan Protostream は相互に互換性がないため、誤って使用するとデータが損失する可能性があります。したがって、このバージョンにアップグレードすると、すべてのキャッシュがクリアされます。既存のオンラインユーザーおよびクライアントセッションはすべてクリアされます。オフラインユーザーおよびクライアントセッションは影響を受けません。
2.11.8. ルートから相対パスへの自動リダイレクト
http-relative-path
プロパティーが指定されている場合、ユーザーは Red Hat build of Keycloak がホストされているパスに自動的にリダイレクトされます。つまり、相対パスが /auth
に設定され、ユーザーが localhost:8080/
にアクセスすると、ページは localhost:8080/auth
にリダイレクトされます。
http-management-relative-path
または http-relative-path
プロパティーが指定されている場合、同じ変更が管理インターフェイスに適用されます。この変更により、ユーザーエクスペリエンスが向上します。ユーザーは URL への相対パスを明示的に設定する必要がなくなりました。
2.11.9. URL エンコードに UTF-8 charset を一貫して使用する
org.keycloak.common.util.Encode
は、file.encoding
システムプロパティーに暗黙的に依存するのではなく、URL エンコードに常に UTF-8
charset を使用するようになりました。
2.11.10. LDAP 接続プールの設定
このリリースでは、LDAP 接続プールの設定はシステムプロパティーのみに依存します。主な理由は、LDAP 接続プールの設定が、個々のレルムまたは LDAP プロバイダーインスタンスに固有のものではなく、JVM レベルの設定であるためです。
以前のリリースと比較して、LDAP 接続プールに関連するすべてのレルム設定は無視されます。次のいずれかの設定が LDAP プロバイダーに設定されている以前のバージョンから移行する場合は、代わりにシステムプロパティーを使用することを検討してください。
-
connectionPoolingAuthentication
-
connectionPoolingInitSize
-
connectionPoolingMaxSize
-
connectionPoolingPrefSize
-
connectionPoolingTimeout
-
connectionPoolingProtocol
-
connectionPoolingDebug
詳細は、接続プールの設定 を参照してください。
2.11.11. 再起動後も取り消されたアクセストークンが保持される
このリリースでは、埋め込みキャッシュを使用する場合、取り消されたアクセストークンはデータベースに書き込まれ、クラスターが再起動されたときにデフォルトで再ロードされます。
この動作を無効にするには、すべてのプロバイダー設定 で説明されているように、SPI オプション spi-single-use-object-infinispan-persist-revoked-tokens
を使用します。
SingleUseObjectProvider
の SPI 動作が変更され、取り消されたトークンに対しては put
メソッドと contains
メソッドのみを使用する必要があります。これはデフォルトで強制され、SPI オプション spi-single-use-object-infinispan-persist-revoked-tokens
を使用して無効にできます。
2.11.12. 可用性の高いマルチサイトデプロイメント
Red Hat build of Keycloak 26 では、推奨される高可用性マルチサイトアーキテクチャーが大幅に改善されました。主な改善点は次のとおりです。
- Red Hat build of Keycloak デプロイメントでは、両方のサイトで同時にユーザー要求を処理できるようになりました。一度に 1 つのサイトのみでリクエストを処理する以前のロードバランサー設定は、引き続き機能します。
- 障害が発生した場合にサイト間のレプリケーションを再設定するには、サイト間の接続をアクティブにモニタリングする必要があります。ブループリントでは、Alertmanager と AWS Lambda を使用したセットアップを説明します。
- ロードバランサーのブループリントは、AWS Global Accelerator を使用するように更新されました。これにより、クライアントによる DNS キャッシュによって発生するフェイルオーバー時間の延長を回避できます。
- アーキテクチャーの要件としてユーザーセッションが永続化されました。その結果、Red Hat build of Keycloak または Data Grid のアップグレードでもユーザーセッションは保持されます。
- 外部 Data Grid リクエスト処理が改善され、メモリー使用量とリクエストの待ち時間が削減されました。
上記の変更の結果として、既存の Red Hat build of Keycloak デプロイメントに次の変更が必要になります。
-
multi-site
機能が有効になっている場合、キャッシュ設定ファイルによって提供されるdistributed-cache
定義は無視されるため、ブループリントで概説されているように、cache-remote-*
コマンドライン引数または Keycloak CR を介して外部 Data Grid デプロイメントへの接続を設定する必要があります。すべてのremote-store
設定をキャッシュ設定ファイルから削除する必要があります。 - 外部 Data Grid の現在のキャッシュ設定を確認し、最新バージョンの Red Hat build of Keycloak ドキュメントに記載されている設定に更新します。以前のバージョンのキャッシュ設定では、サイト間のバックアップレプリケーションが失敗した場合にのみ警告が記録されていましたが、新しい設定では、両方のサイトの状態が同期されたままになります。つまり、2 つのサイト間の転送が失敗すると、呼び出し元にエラーが表示されます。そのため、サイト障害が発生した場合に 2 つのサイトを切断するためのモニタリングをセットアップする必要があります。高可用性ガイド には、これをセットアップするためのブループリントが含まれています。
- 以前のロードバランサー設定は Red Hat build of Keycloak でも引き続き機能しますが、クライアント側の DNS キャッシュによるフェイルオーバー時間の延長を回避するために、既存の Route53 設定をアップグレードすることを検討してください。
-
キャッシュ設定 XML ファイルをリモートストア設定で更新した場合、それらは機能しなくなります。代わりに、
multi-site
機能を有効にして、cache-remove-*
オプションを使用します。
2.11.13. 必須アクションの改善
アプリケーションによって開始された必須アクションの実行からリダイレクトされるときに、必要なアクションプロバイダー名が kc_action
パラメーターを介して返されるようになりました。これにより、クライアントに対して実行された必要なアクションの検出が容易になります。実行の結果は、kc_action_status
パラメーターによって決定できます。
注意: この機能では Keycloak JS アダプターへの変更が必要でした。そのため、この機能を利用する場合は、アダプターを最新バージョンにアップグレードすることを推奨します。
2.11.14. キーストアとトラストストアのデフォルト形式の変更
Red Hat build of Keycloak は、ファイル拡張子に基づいてキーストアとトラストストアの形式を決定するようになりました。ファイル拡張子が .p12
、.pkcs12
、または .pfx
の場合、形式は PKCS12 になります。ファイル拡張子が .jks
、.keystore
、または .truststore
の場合、形式は JKS になります。ファイル拡張子が .pem
、.crt
、または .key
の場合、形式は PEM になります。
https-key-store-type
と https-trust-store-type
を明示的に指定することで、自動検出をオーバーライドすることもできます。同じことが管理インターフェイスとその https-management-key-store-type
にも当てはまります。FIPS 厳密モードの制限は変更されません。
spi-truststore-file-*
オプションとトラストストア関連のオプション https-trust-store-*
は非推奨となりました。システムトラストストアの使用を強く推奨します。詳細は、関連する ガイド を参照してください。
2.11.15. common
テーマリソースのパスが変更される
keycloak
テーマの common
リソース、具体的にはサードパーティーライブラリーのリソースへのパスの一部が変更されました。それに応じてカスタムテーマを更新してください。
-
node_modules/patternfly/dist
is nowvendor/patternfly-v3
-
node_modules/@patternfly/patternfly
is nowvendor/patternfly-v4
-
node_modules/@patternfly-v5/patternfly
is nowvendor/patternfly-v5
-
node_modules/rfc4648/lib
is nowvendor/rfc4648
さらに、次のリソースが common
テーマから削除されました。
-
node_modules/alpinejs
-
node_modules/jquery
削除されたリソースを以前にテーマで使用していた場合は、代わりに独自のテーマリソースに追加してください。
2.11.16. BouncyCastle FIPS が更新される
当社の FIPS 140-2 インテグレーションは現在、BouncyCastle FIPS ライブラリーのバージョン 2 でテストされ、サポートされています。このバージョンは Java 21 で認定されています。FIPS 140-2 インテグレーションを使用する場合は、BouncyCastle FIPS ライブラリーを最新のドキュメントに記載されているバージョンにアップグレードすることを推奨します。
BouncyCastle FIPS バージョン 2 は、FIPS 140-3 認定を受けています。したがって、Red Hat build of Keycloak は、FIPS 140-3 準拠システムで使用される限り、FIPS 140-3 に準拠できます。これは、FIPS 140-3 に準拠している RHEL 9 ベースのシステムである可能性があります。ただし、RHEL 8 ベースのシステムは FIPS 140-2 のみ認定されていることに注意してください。