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:后端微服务(只生产消费消息)
- 创建用户,不设置任何tag(不能登录管理后台)
- 分配对应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 ".*" ".*" ".*"