10.2. キャッシュを設定する
Red Hat build of Keycloak は、conf/cache-ispn.xml にある通常の {infinispan_configuring_docs}[Infinispan 設定ファイル] を提供します。このファイルには、cache-container および 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 分散キャッシュは、アクショントークンに関するメタデータを追跡するために使用されます。
適用された Infinispan 設定は、--log-level=info,org.keycloak.connections.infinispan:debug を設定してログに表示されます。
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 ...
bin/kc.sh start --features-disabled=persistent-user-sessions ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
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 のデフォルトのキャッシュ設定を追加したり、または via--cache- config- file を介して提供される独自のファイルに上書きしたりできます。
XML によるデフォルトのキャッシュ設定のオーバーライドは技術的には可能ですが、サポートされていません。これは、デフォルトのキャッシュ設定に問題があることが証明されている高度なユースケースにのみ推奨されます。デフォルトのキャッシュ設定を変更するためにサポートされている唯一の方法は、cache-... オプションを使用することです。
変更されたデフォルトキャッシュ設定が検出されたときに警告がログに記録されるのを防ぐには、以下のオプションを追加します。
bin/kc.[sh|bat] start --cache-config-mutate=true
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 は起動に失敗します。