export JAVA_OPTS_APPEND="-Djava.net.preferIPv4Stack=true"
Keycloak 生產環境為各種部署提供安全的身份驗證和授權,範圍從支援數千使用者的內部部署到為數百萬使用者服務的部署。
本指南描述了生產就緒的 Keycloak 環境所需的配置一般領域。 此資訊著重於一般概念,而不是實際實施,實際實施取決於您的環境。 本指南涵蓋的關鍵方面適用於所有環境,無論是容器化、內部部署、GitOps 還是 Ansible。
Keycloak 會持續交換敏感資料,這表示所有與 Keycloak 之間的通訊都需要安全通訊通道。 為了防止多種攻擊途徑,您需要為該通道啟用 HTTP over TLS 或 HTTPS。
若要為 Keycloak 配置安全通訊通道,請參閱配置 TLS 和配置傳出 HTTP 請求。
若要保護 Keycloak 的快取通訊,請參閱配置分散式快取。
在生產環境中,Keycloak 實例通常在私有網路中執行,但 Keycloak 需要公開某些面向公眾的端點,以便與要保護的應用程式進行通訊。
有關端點類別以及如何為其配置公用主機名稱的詳細資訊,請參閱配置主機名稱 (v2)。
最佳做法是在與公用前端 URL(例如,登入流程所使用的 URL)不同的主機名稱或 context-path 上公開 Keycloak 管理 REST API 和控制台。 這種分離確保管理介面不會暴露在公共網際網路上,從而減少了攻擊面。
如果 REST API 不打算公開,則需要在反向代理層級阻止對它們的存取。 |
有關詳細資訊,請參閱配置主機名稱 (v2)。
除了配置主機名稱 (v2)之外,生產環境通常還包括反向代理/負載平衡器元件。 它將對貴公司或組織使用的網路的存取分開並統一。 對於 Keycloak 生產環境,建議使用此元件。
有關在 Keycloak 中配置代理通訊模式的詳細資訊,請參閱使用反向代理。 該指南還建議哪些路徑應該對公眾隱藏,以及應該公開哪些路徑,以便 Keycloak 可以保護您的應用程式。
生產環境應保護自己免受過載情況的影響,以便它能夠盡可能多地回應有效請求,並在情況恢復正常後繼續正常運作。 一種方法是在達到特定閾值後拒絕其他請求。
應在所有層級實施負載分散,包括您環境中的負載平衡器。 除此之外,Keycloak 中還有一個功能可以限制無法立即處理並且需要排隊的請求數量。 預設情況下,未設定任何限制。 設定選項http-max-queued-requests
以限制佇列請求的數量,使其符合您的環境。 任何超過此限制的請求都將立即傳回503 伺服器無法使用
的回應。
Keycloak 使用的資料庫對於 Keycloak 的整體效能、可用性、可靠性和完整性至關重要。 有關如何配置受支援資料庫的詳細資訊,請參閱配置資料庫。
為了確保使用者在 Keycloak 實例關閉時可以繼續登入,典型的生產環境包含兩個或多個 Keycloak 實例。
Keycloak 在 JGroups 和 Infinispan 之上執行,這為叢集情境提供了可靠、高可用的堆疊。 當部署到叢集時,應保護內嵌的 Infinispan 伺服器通訊。 您可以透過啟用驗證和加密或隔離用於叢集通訊的網路來保護此通訊。
若要深入瞭解如何使用多個節點、不同的快取以及適合您環境的堆疊,請參閱配置分散式快取。
系統屬性 java.net.preferIPv4Stack
和 java.net.preferIPv6Addresses
用於配置 JVM 以便與 IPv4 或 IPv6 位址一起使用。
預設情況下,可以同時透過 IPv4 和 IPv6 位址存取 Keycloak。 為了僅使用 IPv4 位址執行,您需要指定屬性 java.net.preferIPv4Stack=true
。 後者確保任何主機名稱到 IP 位址的轉換總是傳回 IPv4 位址變體。
這些系統屬性可以透過 JAVA_OPTS_APPEND
環境變數方便地設定。 例如,若要將 IP 堆疊偏好設定變更為 IPv4,請設定如下環境變數
export JAVA_OPTS_APPEND="-Djava.net.preferIPv4Stack=true"