RabbitMQ 用户角色和权限说明

RabbitMQ 用户分为 角色(tags) + VirtualHost细粒度权限 两套体系。
tags 是控制台管理角色;权限是针对虚拟机、交换机、队列的访问控制。

一、四大内置标签(Tag)

作用:控制 15672管理后台操作权限不控制AMQP生产消费权限

1. administrator 超级管理员

rabbitmqctl set_user_tags username administrator

权限范围:
- 登录管理后台
- 用户管理、权限管理、虚拟机管理、插件管理、查看集群状态
- 完整所有操作权限

2. monitoring 监控者

rabbitmqctl set_user_tags username monitoring
  • 只能看:队列、连接、信道、消息、节点状态
  • 不能创建队列、交换机、不能管理用户、虚拟机
    适合运维监控账号,不能发消息。

3. policymaker 策略制定者

rabbitmqctl set_user_tags username policymaker
  • 拥有 monitoring 全部权限
  • 可以创建/修改 policy(镜像队列、消息过期策略等)
  • 不能新增用户、虚拟机

4. management 普通管理员(最常用业务账号)

rabbitmqctl set_user_tags username management
  • 登录后台,查看自己virtual-host下队列、交换机
  • 创建/删除队列、交换机、绑定关系
  • 无法管理用户、无法查看集群全局信息

业务服务推荐使用这个tag

5. 无tag(no tag)

不分配任何标签:
- 无法登录15672管理页面
- 但是依然可以通过5672 AMQP进行消息生产、消费

生产环境最佳实践:业务账号只用来收发消息,不给tag,禁止登录后台。


二、VirtualHost 细粒度权限

决定能否收发消息

Tag只管后台;真正控制应用连接、读写队列是下面这套权限
命令格式:

rabbitmqctl set_permissions -p /vhost_name user conf write read

三个权限:
1. conf 配置权限:声明队列、交换机、绑定、删除队列交换机(正则匹配)
2. write 写权限:发布消息到交换机
3. read 读权限:消费消息、从队列获取消息

常用配置示例

业务账号完整权限(允许声明队列、收发消息)

rabbitmqctl set_permissions -p /dev rabbit_user ".*" ".*" ".*"

最小权限(队列提前建好,服务只允许收发,不能创建队列)

rabbitmqctl set_permissions -p /dev rabbit_user "" ".*" ".*"

三、业务账号最佳实践

场景1:后端微服务(只生产消费消息)

  1. 创建用户,不设置任何tag(不能登录管理后台)
  2. 分配对应virtual-host读写权限
rabbitmqctl add_user sems_user 密码
rabbitmqctl set_permissions -p /sems_vhost sems_user ".*" ".*" ".*"

场景2:运维人员,需要登录后台查看队列

rabbitmqctl add_user ops ops123
rabbitmqctl set_user_tags ops management
rabbitmqctl set_permissions -p /sems_vhost ops ".*" ".*" ".*"

场景3:超级管理员(运维账号)

rabbitmqctl add_user admin admin123
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"