RocketMQNotes

第 24 章:安全治理

zjc 于 2026-01-24 发布

这是《RocketMQ 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 消息平台保存业务事件、账号标识、订单数据和链路日志,安全不是可选项。RocketMQ 安全治理要覆盖网络边界、身份认证、权限控制、传输加密、敏感数据、审计和密钥生命周期。

24.1 威胁模型

常见风险:

风险 后果
无认证集群 任意服务可写 Topic
共享管理员账号 权限失控、审计失效
Topic 越权读写 数据泄露或污染
管理接口暴露 修改路由、删除资源
明文传输 网络窃听
消息体敏感信息泄露 合规风险
死信查询无控制 用户数据暴露
轨迹日志滥用 业务画像泄露

安全设计从“谁能访问什么资源、做什么操作、留下什么证据”开始。

24.2 网络边界

建议:

  1. Broker、NameServer、Controller 部署在受控内网;
  2. 管理端口不暴露公网;
  3. 按环境隔离网络;
  4. 生产、测试、开发使用独立集群;
  5. 办公网络通过堡垒机访问;
  6. Proxy 或网关层统一入口;
  7. 配置防火墙和安全组。

最小暴露原则:

client -> proxy / broker data port
ops -> bastion -> admin port
monitor -> metrics endpoint

24.3 认证与授权

RocketMQ 支持 ACL,具体配置项随版本变化。核心思想:

主体 权限
业务生产者 指定 Topic WRITE
业务消费者 指定 Topic READ
运维账号 管理指定集群
监控账号 只读指标和状态
平台管理员 高权限但需审批

建议账号命名:

order-service-prod
risk-consumer-prod
rocketmq-monitor-prod
rocketmq-admin-prod

禁止所有服务共用一个高权限账号。

24.4 Topic 权限

权限规划:

OrderTopic
  order-api          WRITE
  order-consumer     READ
  risk-consumer      READ
  other-service      DENY

%DLQ%order-consumer
  ops-governance     READ
  order-consumer     DENY

治理规则:

  1. Topic 按业务域命名;
  2. 申请时声明读写方;
  3. 变更需要审批;
  4. 权限定期审计;
  5. 下线服务及时回收;
  6. 系统 Topic 单独管控;
  7. 死信 Topic 默认不给业务消费者。

24.5 传输加密

TLS 可以保护:

  1. 客户端到 Broker;
  2. 客户端到 Proxy;
  3. Broker 内部通信;
  4. 复制流量;
  5. 管理请求。

启用前评估:

  1. CPU 开销;
  2. 握手延迟;
  3. 证书管理;
  4. 客户端兼容;
  5. 证书轮转流程;
  6. 混合协议过渡。

生产建议使用平台统一证书管理,避免证书写死在镜像或代码仓库中。

24.6 消息体安全

敏感字段处理:

字段 建议
密码 不发送
完整银行卡号 脱敏或令牌化
手机号 掩码或加密
身份证号 不进入普通事件
地址 最小化
token 不放消息

示例:

{
  "userId": "U10001",
  "phoneMasked": "138****0001",
  "cardToken": "tok_abc123"
}

如果必须传输敏感数据,应加密消息体,并单独管理密钥和授权。

24.7 密钥管理

原则:

  1. 不把 AK/SK 写入代码;
  2. 使用 KMS 或平台密钥服务;
  3. 支持定期轮转;
  4. 不同环境不同密钥;
  5. 最小权限分发;
  6. 记录密钥使用;
  7. 泄露后立即吊销和轮转。

应用侧通过环境变量、K8s Secret 或托管身份获取凭据,并限制访问范围。

24.8 审计与合规

必须审计:

  1. Topic 创建、修改、删除;
  2. 权限变更;
  3. 位点重置;
  4. 消息查询和导出;
  5. 死信处理;
  6. 集群扩缩容;
  7. 管理员登录;
  8. 备份和恢复。

审计记录包含:

who
when
where
what resource
what action
why
result

定期输出权限、账号、Topic、消费组和敏感消息访问报表。

24.9 常见安全问题

问题 处理
测试和生产共用集群 立即隔离
客户端硬编码凭据 移入密钥管理
Dashboard 无登录 接入认证并限制网络
业务账号可查死信 收敛权限
消息体包含手机号 契约治理和脱敏
权限申请无审批 建立流程
证书过期 监控和轮转演练

本章小结

RocketMQ 安全治理要在网络、认证、授权、加密、消息契约、密钥和审计七个层面同时落地。最小权限是主线:服务只能访问自己的 Topic,运维只能操作自己的环境,管理员操作必须留痕。消息平台一旦被越权写入或读取,影响的不只是技术指标,还有业务数据可信度。

思考题

  1. 为什么业务服务不能共享管理员账号?
  2. 死信 Topic 为什么默认不给业务消费者?
  3. TLS 会带来哪些成本?
  4. 消息体脱敏应该在哪个阶段设计?
  5. 位点重置为什么必须审计?