这是《RocketMQ 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 消息平台保存业务事件、账号标识、订单数据和链路日志,安全不是可选项。RocketMQ 安全治理要覆盖网络边界、身份认证、权限控制、传输加密、敏感数据、审计和密钥生命周期。
24.1 威胁模型
常见风险:
| 风险 | 后果 |
|---|---|
| 无认证集群 | 任意服务可写 Topic |
| 共享管理员账号 | 权限失控、审计失效 |
| Topic 越权读写 | 数据泄露或污染 |
| 管理接口暴露 | 修改路由、删除资源 |
| 明文传输 | 网络窃听 |
| 消息体敏感信息泄露 | 合规风险 |
| 死信查询无控制 | 用户数据暴露 |
| 轨迹日志滥用 | 业务画像泄露 |
安全设计从“谁能访问什么资源、做什么操作、留下什么证据”开始。
24.2 网络边界
建议:
- Broker、NameServer、Controller 部署在受控内网;
- 管理端口不暴露公网;
- 按环境隔离网络;
- 生产、测试、开发使用独立集群;
- 办公网络通过堡垒机访问;
- Proxy 或网关层统一入口;
- 配置防火墙和安全组。
最小暴露原则:
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
治理规则:
- Topic 按业务域命名;
- 申请时声明读写方;
- 变更需要审批;
- 权限定期审计;
- 下线服务及时回收;
- 系统 Topic 单独管控;
- 死信 Topic 默认不给业务消费者。
24.5 传输加密
TLS 可以保护:
- 客户端到 Broker;
- 客户端到 Proxy;
- Broker 内部通信;
- 复制流量;
- 管理请求。
启用前评估:
- CPU 开销;
- 握手延迟;
- 证书管理;
- 客户端兼容;
- 证书轮转流程;
- 混合协议过渡。
生产建议使用平台统一证书管理,避免证书写死在镜像或代码仓库中。
24.6 消息体安全
敏感字段处理:
| 字段 | 建议 |
|---|---|
| 密码 | 不发送 |
| 完整银行卡号 | 脱敏或令牌化 |
| 手机号 | 掩码或加密 |
| 身份证号 | 不进入普通事件 |
| 地址 | 最小化 |
| token | 不放消息 |
示例:
{
"userId": "U10001",
"phoneMasked": "138****0001",
"cardToken": "tok_abc123"
}
如果必须传输敏感数据,应加密消息体,并单独管理密钥和授权。
24.7 密钥管理
原则:
- 不把 AK/SK 写入代码;
- 使用 KMS 或平台密钥服务;
- 支持定期轮转;
- 不同环境不同密钥;
- 最小权限分发;
- 记录密钥使用;
- 泄露后立即吊销和轮转。
应用侧通过环境变量、K8s Secret 或托管身份获取凭据,并限制访问范围。
24.8 审计与合规
必须审计:
- Topic 创建、修改、删除;
- 权限变更;
- 位点重置;
- 消息查询和导出;
- 死信处理;
- 集群扩缩容;
- 管理员登录;
- 备份和恢复。
审计记录包含:
who
when
where
what resource
what action
why
result
定期输出权限、账号、Topic、消费组和敏感消息访问报表。
24.9 常见安全问题
| 问题 | 处理 |
|---|---|
| 测试和生产共用集群 | 立即隔离 |
| 客户端硬编码凭据 | 移入密钥管理 |
| Dashboard 无登录 | 接入认证并限制网络 |
| 业务账号可查死信 | 收敛权限 |
| 消息体包含手机号 | 契约治理和脱敏 |
| 权限申请无审批 | 建立流程 |
| 证书过期 | 监控和轮转演练 |
本章小结
RocketMQ 安全治理要在网络、认证、授权、加密、消息契约、密钥和审计七个层面同时落地。最小权限是主线:服务只能访问自己的 Topic,运维只能操作自己的环境,管理员操作必须留痕。消息平台一旦被越权写入或读取,影响的不只是技术指标,还有业务数据可信度。
思考题
- 为什么业务服务不能共享管理员账号?
- 死信 Topic 为什么默认不给业务消费者?
- TLS 会带来哪些成本?
- 消息体脱敏应该在哪个阶段设计?
- 位点重置为什么必须审计?