博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【RabbitMQ doc】rabbitmq的访问控制
阅读量:6226 次
发布时间:2019-06-21

本文共 2275 字,大约阅读时间需要 7 分钟。

hot3.png

Access Control (Authentication, Authorisation) in RabbitMQ

 

 

本文档描述了访问控制的认证和授权机制。身份验证后端不应和AMQP 0-9-1中的认证机制混淆。

术语和定义

通常人们会混淆认证和授权。这在RabbitMQ中是分开的,对其并不适用。为了简化描述,我们定义认证是“识别用户是谁”,定义授权为“确定用户可以做什么,不能做什么”

默认虚拟主机和用户

服务端开始运行后,如果检测到数据库未进行初始化或者已经被删除,它会使用以下资源初始化一个新的数据库:

  • 名称为/的虚拟主机
  • 密码为guest的guest用户,且对/虚拟主机拥有所有权限

建议删除guest用户,或者修改密码,尤其在broker可以公开访问的情况下。

“guest”用户仅允许localhost连接

默认情况下,guest用户不允许远程连接,仅可以使用lookback接口连接。其它用户没有此限制。

这是由配置文件中的lookback_users条目控制的。

如果你希望guest用户远程可以访问,需要将配置条目lookback_users设置为[]。完整的如下:

[{rabbit, [{loopback_users, []}]}].

权限控制作用原理

RabbitMQ客户端连接到一个服务端的时候,在它的操作指令中指定了一个虚拟主机。服务端首先检查是否有访问该虚拟主机的权限,没有权限的会拒绝连接。

对于exchanges和queues等资源,位于某个虚拟主机内;不同虚拟主机内即便名称相同也代表不同的资源。当特定操作在资源上执行时第二级访问控制开始生效。

RabbitMQ在某个资源上区分了配置、写和读操作。

配置操作创建或者销毁资源,或者更改资源的行为。写操作将消息注入进资源之中。读操作从资源中获取消息。

要执行特定操作用户必须授予合适的权限。下表表明要执行所有的AMQP命令需要什么资源。

AMQP 0-9-1 Operation   configure write read
exchange.declare (passive=false) exchange    
exchange.declare (passive=true)      
exchange.declare (with ) exchange exchange (AE) exchange
exchange.delete   exchange    
queue.declare (passive=false) queue    
queue.declare (passive=true)      
queue.declare (with ) queue exchange (DLX) queue
queue.delete   queue    
exchange.bind     exchange (destination) exchange (source)
exchange.unbind     exchange (destination) exchange (source)
queue.bind     queue exchange
queue.unbind     queue exchange
basic.publish     exchange  
basic.get       queue
basic.consume       queue
queue.purge       queue

 

Permissions are expressed as a triple of regular expressions - one each for configure, write and read - on per-vhost basis. The user is granted the respective permission for operations on all resources with names matching the regular expressions. (Note: For convenience RabbitMQ maps AMQP's default exchange's blank name to 'amq.default' when performing permission checks.)

The regular expression '^$', i.e. matching nothing but the empty string, covers all resources and effectively stops the user from performing any operation. Standard AMQP resource names are prefixed with amq. and server generated names are prefixed with amq.gen. For example, '^(amq\.gen.*|amq\.default)$' gives a user access to server-generated names and the default exchange. The empty string, '' is a synonym for '^$'and restricts permissions in the exact same way.

 

转载于:https://my.oschina.net/u/259976/blog/740940

你可能感兴趣的文章
Eclipse / Android : “Errors running builder 'Android Pre Compiler' on project…”
查看>>
P1219 N皇后
查看>>
Codeforces Round #449 (Div. 2) C. DFS
查看>>
通用后台管理系统(3)-测试环境是否成功
查看>>
以Drools5.5为例说明“规则引擎在业务系统中应用”---实例
查看>>
[Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容(转)
查看>>
Monkey and Banana(基础DP)
查看>>
leetcode-686-Repeated String Match(重复多少次A能够找到B)
查看>>
github page+jekyll构建博客的解决方案
查看>>
2013-7-22 确定鼠标与控件位置关系
查看>>
列、约束重命名,原数据不丢失
查看>>
【笔记】老程序员从头开始学JQuery的读书笔记02
查看>>
单点登录系统(一)
查看>>
[转]性能测试之性能计数器和监测工具
查看>>
HZAU1098: Yifan and War3(区间dp)
查看>>
html
查看>>
关于ajax中async: false的作用
查看>>
GitHub帮助文档翻译1——helloWorld
查看>>
文件的下载,随机验证码(无验证)登录注册
查看>>
第27章 java I/O输入输出流
查看>>