RabbitMQ权限控制
一、权限说明
在rabbitmq中,可以创建被称为虚拟主机(vhost)的虚拟消费服务器。每个vhost逻辑上是一个独立的消息服务器,拥有自己独立的交换器、队列和绑定等资源。
vhost提供了隔离机制,使得用户可以在同一套rabbitmq服务器上创建多个vhost,并对不同对应用使用不同对vhost,不同的vhost之间相互隔离,这在业务复杂的大型应用中会比较有用。
二、相关命令
#创建vhost
rabbitmqctl add_vhost {vhost}
#查看vhost
rabbitmqctl list_vhosts
#删除vhost
rabbitmqctl delete_vhost {vhost}
#创建用户
rabbitmqctl add_user {username} {password}
#赋予角色
rabbitmqctl set_user_tags {username} {tag}
tag包含:none、management、policymaker、monitoring、administrator
1、none 不能访问 management plugin
2、management 用户可以通过AMQP做的任何事情外
l 列出自己可以通过AMQP登入的virtual hosts
l 查看自己的virtual hosts中的queues, exchanges 和 bindings
l 查看和关闭自己的channels 和 connections
l 查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
3、policymaker management可以做的任何事外加:
l 查看、创建和删除自己的virtual hosts所属的policies和parameter
4、monitoring management可以做的任何事外加:
l 列出所有virtual hosts,包括他们不能登录的virtual hosts
l 查看其他用户的connections和channels
l 查看节点级别的数据如clustering和memory使用情况
l 查看真正的关于所有virtual hosts的全局的统计信息
5、administrator policymaker和monitoring可以做的任何事外加:
l 创建和删除virtual hosts
l 查看、创建和删除users
l 查看创建和删除permissions
l 关闭其他用户的connections
#删除用户
rabbitmqctl delete_user {username}
#为用户授权
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
l -p 为可选项,指定vhost;
l user指定用户;
l {conf}{write}{read}分别指定用户可以在哪些资源上做配置、读、和写的权限。它们都是一个正则表达式,如果资源名称与指定的正则匹配,则用户对该资源有对应操作权限。需要说明{conf}是指可以对队列、交换器等做创建、删除之类等管理操作,{write}是指可以发布消息,{read}是指可以消费消息。
7、查看权限
查看vhost权限
rabbitmqctl list_permissions [-p vhost]
查看用户权限
rabbitmqctl list_user_permissions {username}
8、清除权限
与授权相同,清除用户权限也是以vhost为单位对,即一次性清除用户在某个vhost上设置对所有权限。
清除权限命令为: rabbitmqctl clear_permissions [-p vhost] {username}
9、设置topic权限
set_topic_permissions [-p vhost] {username} {exchange} {write} {read}
l vhost:授予用户访问权的虚拟主机的名称,默认为“/”。
l user:目标虚拟主机中的权限适用的用户的名称。
l exchange:主题交换授权检查名称将应用于。
l write:与发布的消息的路由键匹配的正则表达式。
l read:与消费消息的路由键匹配的正则表达式。
clear_topic_permissions [-p vhost] {username} [exchange]
list_topic_permissions [-p vhost]
list_user_topic_permissions {username}
用户可以用哪个交换机 的交换策略(交换机 以某种策略去读写)
1、测试用户是否可以创建exchange 即不设置conf
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
不配置conf 生产者报错 发布出去消息
conf为新增删除等一些权限
2、测试读写权限
set_topic_permissions [-p vhost] {username} {exchange} {write} {read}
三、示例:
1、创建/dev_order_vhost虚拟主机的读权限用户dev_order_read与写权限用户dev_order_write
#创建写用户dev_order_write 即生产者用户
rabbitmqctl add_user dev_order_write password
#创建读用户dev_order_read 即消费者用户
rabbitmqctl add_user dev_order_write password
#创建/dev_order_vhost虚拟主机
rabbitmqctl add_vhost /dev_order_vhos
#赋予读用户dev_order_read在/dev_order_vhost虚拟主机读的权限
rabbitmqctl set_permissions -p /dev_order_vhost dev_order_read ".*" "" ".*"
#赋予写用户dev_order_write在/dev_order_vhost虚拟主机写的权限
rabbitmqctl set_permissions -p /dev_order_vhost dev_order_write ".*" ".*" ""
#赋予用户A在/dev_order_vhost虚拟主机写的读写权限
rabbitmqctl set_permissions -p /dev_order_vhost A ".*" ".*" ".*"
说明:需要配置conf,并且需要创建exchange queue 并绑定
2、针对topic_per用户在/vhost虚拟主机中的testexcheange交换机控制只有路由符合pre开头的才可以生产消费
rabbitmqctl set_topic_permissions -p /vhost topic_per testxchange "^pre" "^pre"