身份验证

提供基于 TLS 的传输层身份验证和加密通信,以及基于请求的授权,帮助构建零信任分布式微服务系统。

Dubbo 提供了全面的机制来构建安全的微服务通信系统,也称为零信任系统。这包括

  • 通过提供身份验证 (Authentication) 和基于 TLS 的加密通信来防止中间人攻击。
  • 使用 mTLS 和权限检查等机制控制服务间访问授权 (Authorization)。

本文档将指导您利用 Dubbo 的安全功能为您的微服务构建零信任系统,重点介绍身份验证、透明加密、授权和审计。由于零信任是一种全面的方法,您可能需要其他基础设施,例如证书管理和安全策略控制。

注意:本文档的范围不包括证书生成和分发。我们假设您已经拥有证书管理的基础设施。因此,我们将重点介绍 Dubbo 的身份验证和授权机制以及流程。如果您缺少此类基础设施,我们建议使用 Istio 等服务网格架构来进行证书管理和安全策略。

架构

完整的零信任系统包含多个组件

  • 根证书颁发机构 (CA) 用于管理密钥和证书。
  • 安全策略管理和分发中心,用于将实时策略发送到数据平面组件
    • 身份验证策略
    • 授权策略
    • 安全命名信息
  • 数据平面组件 (Dubbo) 负责身份识别、加密和策略执行。
  • 一套工具和生态系统,用于完成安全审计和数据链路监控。

在 Istio 等服务网格部署中,控制平面通常处理安全策略和证书,并与 Kubernetes API Server 等基础设施交互,将配置数据分发到 Dubbo 或其他数据平面组件。

以下是 Dubbo 零信任的综合架构图

Authentication

身份验证

Dubbo 提供两种身份验证模式

  • 通道身份验证:Dubbo 支持基于 TLS 的 HTTP/2 和 TCP 通信。您可以通过通道身份验证 API 或控制平面策略启用 TLS,以进行服务器身份验证和数据链路加密。此外,您可以启用 mTLS 以进行客户端-服务器双向身份验证。这是一种服务到服务的身份验证模式。
  • 请求身份验证: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)