三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

RocketMQ ACL配置实战:从零到生产,手把手教你配置用户权限与Dashboard安全访问

RocketMQ ACL配置实战:从零到生产,手把手教你配置用户权限与Dashboard安全访问

RocketMQ ACL配置实战:从零到生产,手把手教你配置用户权限与Dashboard安全访问

在消息队列的生产环境部署中,安全性往往是最容易被忽视却至关重要的环节。去年某电商平台就曾因RocketMQ未配置ACL导致订单消息被恶意消费,造成数百万损失。本文将带您从零开始,构建一套完整的RocketMQ生产级安全防护体系。

1. ACL基础配置与核心原理

RocketMQ的ACL机制通过plain_acl.yml文件实现细粒度的权限控制。这个配置文件采用YAML格式,支持热加载——这意味着您无需重启Broker即可生效新的权限策略。

1.1 账户体系与权限模型

每个账户需要配置三个核心属性:

  • accessKey:相当于用户名
  • secretKey:相当于密码
  • admin:布尔值,标记是否为管理员

权限分为四个层级控制:

权限层级配置项示例值说明
全局IP白名单globalWhiteRemoteAddresses192.168.1.*绕过ACL检查的IP段
默认主题权限defaultTopicPermDENY未明确配置时的默认值
默认消费组权限defaultGroupPermSUB未明确配置时的默认值
特定主题权限topicPermsorder_topic=PUB精确控制每个主题
accounts: - accessKey: producer_app secretKey: 9w8ef7a6s5d admin: false defaultTopicPerm: DENY defaultGroupPerm: DENY topicPerms: - order_topic=PUB - payment_topic=PUB

1.2 权限类型组合策略

权限支持多种组合方式,通过|符号连接:

  • PUB:发布权限
  • SUB:订阅权限
  • DENY:显式拒绝
  • PUB|SUB:同时具备发布和订阅权限

注意:RocketMQ 4.x版本存在一个已知问题——管理员账户的默认权限可能不生效,建议显式配置defaultTopicPerm: PUB|SUB

2. Broker安全配置全流程

2.1 启用ACL的核心参数

broker.conf中必须设置以下参数:

# 启用ACL鉴权 aclEnable=true # 禁止自动创建Topic autoCreateTopicEnable=false # 禁止自动创建消费组 autoCreateSubscriptionGroup=false

2.2 推荐的生产环境配置

# 网络隔离配置 listenPort=10911 brokerIP1=内网IP # 存储配置 mapedFileSizeCommitLog=1073741824 diskMaxUsedSpaceRatio=85 # 主从配置 brokerRole=SYNC_MASTER flushDiskType=SYNC_FLUSH

2.3 权限验证方法

使用mqadmin命令验证配置:

# 测试发布权限 ./mqadmin sendMessage -n 127.0.0.1:9876 \ -t test_topic -k producer_app -s 9w8ef7a6s5d # 测试订阅权限 ./mqadmin consumeMessage -n 127.0.0.1:9876 \ -t test_topic -g test_group -k consumer_app -s d4f5g6h7j8k

3. Dashboard安全加固实战

3.1 关键安全配置项

application.yml中必须修改:

rocketmq: config: loginRequired: true # 启用登录验证 accessKey: "admin" # 对接Broker的ACL账户 secretKey: "securePassword123"

users.properties配置示例:

# 格式:username=password[,role] admin=Admin@123,1 auditor=Audit#456,0

3.2 安全部署建议

  1. 网络层面

    • 将Dashboard部署在内网
    • 通过Nginx配置HTTPS反向代理
    • 限制访问IP范围
  2. 账户策略

    • 管理员账户使用强密码(12位以上,含特殊字符)
    • 定期轮换secretKey
    • 为审计人员创建只读账户
  3. 监控措施

    # 监控登录失败日志 tail -f /logs/rocketmq-dashboard.log | grep "Login failed"

4. 生产环境权限设计模式

4.1 典型角色权限划分

角色主题权限消费组权限管理权限
订单服务order.*=PUBorder_consumer=SUB
支付服务payment.*=PUBpayment_consumer=SUB
数据团队*=DENYanalytics_*=SUB
运维团队*=PUBSUB*=PUB

4.2 灰度发布权限方案

accounts: # 旧版本服务 - accessKey: service_v1 secretKey: old_secret topicPerms: - important_topic=DENY # 逐步下线 # 新版本服务 - accessKey: service_v2 secretKey: new_secret topicPerms: - important_topic=PUB - important_topic_v2=PUB

4.3 应急处理流程

  1. 快速禁用问题账户:

    # 在plain_acl.yml中添加 - accessKey: compromised_app secretKey: changed_immediately defaultTopicPerm: DENY defaultGroupPerm: DENY
  2. 查看当前连接:

    ./mqadmin consumerConnection -n 127.0.0.1:9876 \ -g problematic_group
  3. 重置消费位点:

    ./mqadmin resetOffsetByTime -n 127.0.0.1:9876 \ -t compromised_topic -g recovery_group -s now

在实际项目中,我们曾遇到一个典型场景:某金融服务客户在凌晨收到告警,发现异常消费行为。通过预先配置的ACL权限日志,快速定位到是某个离职员工的测试账户未及时禁用。通过动态更新plain_acl.yml,在30秒内阻断了异常访问,同时保留了完整的审计痕迹。

← 返回列表