驗證

提供基於 TLS 的傳輸層驗證和加密通訊,以及基於請求的授權,幫助構建零信任分散式微服務系統。

Dubbo 提供了全面的機制來構建安全的微服務通訊系統,也稱為零信任系統。這包括

  • 透過提供身份驗證 (Authentication) 和基於 TLS 的加密通訊來防止中間人攻擊。
  • 透過 mTLS 和許可權檢查等機制控制服務間訪問授權 (Authorization)。

本文檔將指導您利用 Dubbo 的安全功能為您的微服務構建零信任系統,重點關注驗證、透明加密、授權和審計。由於零信任是一種綜合方法,您可能需要其他基礎設施,例如證書管理和安全策略控制。

注意:本文檔的範圍不包括證書生成和分發。我們假設您已經擁有證書管理的基礎設施。因此,我們將重點關注 Dubbo 的驗證和授權機制和流程。如果您缺乏此類基礎設施,我們建議使用像 Istio 這樣的服務網格架構進行證書管理和安全策略。

架構

一個完整的零信任系統包含多個組件

  • 一個根憑證授權單位 (CA) 來管理金鑰和證書。
  • 一個安全策略管理和分發中心,用於將即時策略發送到數據平面組件
    • 驗證策略
    • 授權策略
    • 安全命名信息
  • 負責識別、加密和策略執行的數據平面組件 (Dubbo)。
  • 一套用於完成安全審計和數據鏈路監控的工具和生態系統。

在像 Istio 這樣的服務網格部署中,控制平面通常處理安全策略和證書,並與 Kubernetes API Server 等基礎設施交互,以將配置數據分發到 Dubbo 或其他數據平面組件。

以下是 Dubbo 零信任的完整架構圖

Authentication

驗證

Dubbo 提供兩種驗證模式

  • 通道驗證(Channel Authentication):Dubbo 支援基於 TLS 的 HTTP/2 和 TCP 通訊。您可以透過通道驗證 API 或控制平面策略啟用 TLS,以進行伺服器身份驗證和數據鏈路加密。此外,您還可以啟用 mTLS 以進行客戶端-伺服器雙向驗證。這是一種服務到服務的驗證模式。
  • 請求驗證(Request Authentication):Dubbo 提供 API 以在請求上下文中附加使用者身份憑證(例如 JWT 令牌)。Dubbo 會自動識別這些身份令牌以進行權限檢查。您也可以自訂這些令牌,例如 OAuth2 授權令牌。這是一種終端使用者驗證模式,代表登入系統的使用者身份。

架構

在 Istio 模式下,Dubbo 的驗證機制會透過 xDS 自動與 Istio 控制平面介接。由 Istio 控制平面產生的憑證和驗證策略會自動傳送到 Dubbo 數據平面,並應用於所有後續的數據通訊。

Authentication

Dubbo mTLS 流程

在 Istio 部署中,您可以透過控制平面策略啟用或停用通道驗證的雙向驗證。雙向驗證的工作流程如下:

  1. Istio 傳送驗證策略以啟用雙向驗證。
  2. Dubbo 客戶端與伺服器建立雙向 TLS 握手,執行安全命名檢查以驗證伺服器的身份。
  3. 在客戶端和伺服器之間建立雙向 mTLS 鏈路以進行加密通訊。
  4. Dubbo 伺服器識別客戶端身份,並檢查其是否有權限存取相應的資源。

驗證策略

對於 Istio 支援的特定規則,Dubbo 完全支援 Istio 定義的驗證策略。

了解更多

授權

Dubbo 已經抽象化了一個授權擴充機制,但目前僅支援 Istio 系統。因此,其授權功能等同於 Istio 官方文件中所述的功能。

了解更多

架構

Dubbo 透過 xDS 從 Istio 控制平面接收使用者設定的授權策略。當請求到達 Dubbo 執行個體時,內建的授權引擎會將請求參數和使用者身份與策略進行比對。如果比對成功,則授予存取權;否則,拒絕存取。

Authorization

授權策略

對於 Istio 支援的特定規則,Dubbo 完全支援 Istio 定義的授權策略。

了解更多

Dubbo 驗證 API

Dubbo 定義了一個驗證 API。對於一般使用案例,開發人員可以透過此 API 啟用 TLS/mTLS。然而,在 Istio 控制平面部署中,Dubbo 會自動識別 Istio 傳送的憑證和驗證策略,因此在 Dubbo 端不需要特殊設定。

無論是否使用 Istio 控制平面,請求驗證的 JWT 令牌仍需在 Dubbo 中以程式設計方式指定。

有關特定語言的 API 定義,請參閱各自的 SDK 文件。

範例任務

請瀏覽以下 Dubbo 任務範例 以進行安全策略的實作練習。


最後修改日期:2023 年 10 月 20 日:翻譯部分核心功能文件 (#2840) (caded9f57f4)