Skip to content

安全基线

本页结论:消息系统的安全基线是三件套——认证(谁在连接)、授权(能碰哪些 Topic/Queue)、传输加密(链路上不可窃听篡改),四个产品的机制名不同但要求等价(规格 §12.3)。本仓库实验环境按约定不开认证、所有端口仅绑定 127.0.0.1,这是学习环境的豁免,不是生产建议;生产上线时 Demo 默认账号(如 guest/guest)是明确禁止项。

三件套在四产品的落地

产品认证(authN)授权(authZ)传输加密(TLS)
RabbitMQ用户名/密码(SASL PLAIN)、mTLS 证书(EXTERNAL)ACL 规则:按用户限定 vhost/exchange/queue 的 configure/write/readAMQPS 5671;管理接口 15671
KafkaSASL(PLAIN/SCRAM/OAUTHBEARER 等)或 mTLSACL:按 principal 授予 topic/group 的 Read/Write/Create 等权限(kafka-acls 管理)TLS 9093;可含 Broker 间链路
RocketMQAccessKey/SecretKey(ACL)ACL 规则:topic/group 级权限(发布/订阅/管理)Broker 开启 TLS(证书配置)
PulsarJWT token、mTLS 证书、OAuth2 等按 tenant/namespace/topic 授权(produce/consume/admin)TLS 6651(broker)/ 8443(HTTP)

共同要求(与产品无关):

  • 每个服务独立身份:生产者与消费者各用自己的账号/证书,最小授权到具体的 Topic/Queue/Subject——一个全局共享账号等于没有授权。
  • TLS 必须验证服务端身份:仅加密不校验证书等于给中间人开门;双向 TLS(mTLS)作为可选强化。
  • 管理端口与数据端口分离:管理面(RabbitMQ 15672、Kafka 管控 API、RocketMQ dashboard、Pulsar admin)单独限制网络访问,不与数据面混用暴露策略。

§12.3 条目落地

基线条目落地要点
生产启用 TLS、验证服务端身份客户端配置 truststore/CA 并开启 hostname 验证;mTLS 可选
每服务独立身份、按目的地最小授权建 topic 同时建账号与 ACL;权限变更走审计流程
秘密不进仓库/URL/日志/快照账号密码走密钥管理或环境变量注入;连接串不含明文口令;日志脱敏过滤器覆盖 payload
管理端口与数据端口分离管理端口仅内网/堡垒机可达;防火墙与 Broker 监听地址双重限制
Payload 敏感数据分类与脱敏个人信息/凭证/支付数据在消息体内加密或只传引用 ID;信封字段(如 aggregateId)同样评估敏感性
加密边界说明传输加密(TLS)只保护链路;静态加密依赖 Broker 所在存储(磁盘加密/云 KMS),不等于 Broker 原生能力;字段级加密在应用层完成,与两者独立叠加
审计与轮换记录管理操作与权限变更;证书/密钥设轮换周期与到期告警,轮换与客户端 truststore 更新要同时演练
Demo 默认账号禁用guest/guest、匿名访问、PLAINTEXT 默认端口清单进入生产检查表禁止项

实验环境的约定(本仓库豁免项)

规格与 实验约定 规定学习环境的安全形态:

  • 所有 Broker 端口(5672/15672、9092、RocketMQ/Pulsar 对应端口)仅绑定 127.0.0.1,管理界面不暴露公网。
  • RabbitMQ 使用默认 guest/guest——该账号被 Broker 自身限制为仅 localhost 可用;Kafka 实验使用 PLAINTEXT,不开认证。
  • 消息内容为本仓库 fixture(demos/shared/fixtures/),不含真实个人信息。

以上每一条在生产都是禁止项或必须加固项;把实验 Compose 直接搬上生产是最常见的安全事故来源。

常见误区

  • 「内网就不用 TLS」——内网横向移动与误暴露同样存在,基线要求生产一律启用。
  • 「开了认证就有了安全」——认证不配最小授权,等于每个服务都是管理员。
  • 「TLS 加密了日志就安全了」——消息落日志/快照时已解密,payload 脱敏是独立要求。
  • 「密钥轮换只是运维的事」——轮换必须与客户端配置发布联动演练,否则就是计划内故障。

官方资料

以统一实验验证消息系统语义边界