驗證
Dubbo 提供了全面的機制來構建安全的微服務通訊系統,也稱為零信任系統。這包括
- 透過提供身份驗證 (Authentication) 和基於 TLS 的加密通訊來防止中間人攻擊。
- 透過 mTLS 和許可權檢查等機制控制服務間訪問授權 (Authorization)。
本文檔將指導您利用 Dubbo 的安全功能為您的微服務構建零信任系統,重點關注驗證、透明加密、授權和審計。由於零信任是一種綜合方法,您可能需要其他基礎設施,例如證書管理和安全策略控制。
注意:本文檔的範圍不包括證書生成和分發。我們假設您已經擁有證書管理的基礎設施。因此,我們將重點關注 Dubbo 的驗證和授權機制和流程。如果您缺乏此類基礎設施,我們建議使用像 Istio 這樣的服務網格架構進行證書管理和安全策略。
架構
一個完整的零信任系統包含多個組件
- 一個根憑證授權單位 (CA) 來管理金鑰和證書。
- 一個安全策略管理和分發中心,用於將即時策略發送到數據平面組件
- 驗證策略
- 授權策略
- 安全命名信息
- 負責識別、加密和策略執行的數據平面組件 (Dubbo)。
- 一套用於完成安全審計和數據鏈路監控的工具和生態系統。
在像 Istio 這樣的服務網格部署中,控制平面通常處理安全策略和證書,並與 Kubernetes API Server 等基礎設施交互,以將配置數據分發到 Dubbo 或其他數據平面組件。
以下是 Dubbo 零信任的完整架構圖
驗證
Dubbo 提供兩種驗證模式
- 通道驗證(Channel Authentication):Dubbo 支援基於 TLS 的 HTTP/2 和 TCP 通訊。您可以透過通道驗證 API 或控制平面策略啟用 TLS,以進行伺服器身份驗證和數據鏈路加密。此外,您還可以啟用 mTLS 以進行客戶端-伺服器雙向驗證。這是一種服務到服務的驗證模式。
- 請求驗證(Request Authentication):Dubbo 提供 API 以在請求上下文中附加使用者身份憑證(例如 JWT 令牌)。Dubbo 會自動識別這些身份令牌以進行權限檢查。您也可以自訂這些令牌,例如 OAuth2 授權令牌。這是一種終端使用者驗證模式,代表登入系統的使用者身份。
架構
在 Istio 模式下,Dubbo 的驗證機制會透過 xDS 自動與 Istio 控制平面介接。由 Istio 控制平面產生的憑證和驗證策略會自動傳送到 Dubbo 數據平面,並應用於所有後續的數據通訊。
Dubbo mTLS 流程
在 Istio 部署中,您可以透過控制平面策略啟用或停用通道驗證的雙向驗證。雙向驗證的工作流程如下:
- Istio 傳送驗證策略以啟用雙向驗證。
- Dubbo 客戶端與伺服器建立雙向 TLS 握手,執行安全命名檢查以驗證伺服器的身份。
- 在客戶端和伺服器之間建立雙向 mTLS 鏈路以進行加密通訊。
- Dubbo 伺服器識別客戶端身份,並檢查其是否有權限存取相應的資源。
驗證策略
對於 Istio 支援的特定規則,Dubbo 完全支援 Istio 定義的驗證策略。
授權
Dubbo 已經抽象化了一個授權擴充機制,但目前僅支援 Istio 系統。因此,其授權功能等同於 Istio 官方文件中所述的功能。
架構
Dubbo 透過 xDS 從 Istio 控制平面接收使用者設定的授權策略。當請求到達 Dubbo 執行個體時,內建的授權引擎會將請求參數和使用者身份與策略進行比對。如果比對成功,則授予存取權;否則,拒絕存取。
授權策略
對於 Istio 支援的特定規則,Dubbo 完全支援 Istio 定義的授權策略。
Dubbo 驗證 API
Dubbo 定義了一個驗證 API。對於一般使用案例,開發人員可以透過此 API 啟用 TLS/mTLS。然而,在 Istio 控制平面部署中,Dubbo 會自動識別 Istio 傳送的憑證和驗證策略,因此在 Dubbo 端不需要特殊設定。
無論是否使用 Istio 控制平面,請求驗證的 JWT 令牌仍需在 Dubbo 中以程式設計方式指定。
有關特定語言的 API 定義,請參閱各自的 SDK 文件。
範例任務
請瀏覽以下 Dubbo 任務範例 以進行安全策略的實作練習。