身份验证
Dubbo 提供了全面的机制来构建安全的微服务通信系统,也称为零信任系统。这包括
- 通过提供身份验证 (Authentication) 和基于 TLS 的加密通信来防止中间人攻击。
- 使用 mTLS 和权限检查等机制控制服务间访问授权 (Authorization)。
本文档将指导您利用 Dubbo 的安全功能为您的微服务构建零信任系统,重点介绍身份验证、透明加密、授权和审计。由于零信任是一种全面的方法,您可能需要其他基础设施,例如证书管理和安全策略控制。
注意:本文档的范围不包括证书生成和分发。我们假设您已经拥有证书管理的基础设施。因此,我们将重点介绍 Dubbo 的身份验证和授权机制以及流程。如果您缺少此类基础设施,我们建议使用 Istio 等服务网格架构来进行证书管理和安全策略。
架构
完整的零信任系统包含多个组件
- 根证书颁发机构 (CA) 用于管理密钥和证书。
- 安全策略管理和分发中心,用于将实时策略发送到数据平面组件
- 身份验证策略
- 授权策略
- 安全命名信息
- 数据平面组件 (Dubbo) 负责身份识别、加密和策略执行。
- 一套工具和生态系统,用于完成安全审计和数据链路监控。
在 Istio 等服务网格部署中,控制平面通常处理安全策略和证书,并与 Kubernetes API Server 等基础设施交互,将配置数据分发到 Dubbo 或其他数据平面组件。
以下是 Dubbo 零信任的综合架构图
身份验证
Dubbo 提供两种身份验证模式
- 通道身份验证:Dubbo 支持基于 TLS 的 HTTP/2 和 TCP 通信。您可以通过通道身份验证 API 或控制平面策略启用 TLS,以进行服务器身份验证和数据链路加密。此外,您可以启用 mTLS 以进行客户端-服务器双向身份验证。这是一种服务到服务的身份验证模式。
- 请求身份验证: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 任务示例,以进行安全策略的实际操作练习。