RabbitMQ用户对预先创建的队列上的pub / sub的权限

时间:2015-09-03 15:14:37

标签: permissions rabbitmq amqp

我有一个用例,我需要创建一个用户并授予他在现有队列中只有pub / sub的权限,这是一个例子:

  • Vhost" mainvhost" (对所有用户都一样)
  • 在vhost中,我有Q-foo和Q-bar队列
  • 用户" foo"只能发布/发送到Q-foo
  • 用户" bar"只能发布/分到Q-bar

我没有办法设置这样的用户管理策略,我找到的唯一方法是为每个用户创建一个vhost,这样,用户将在自己的vhost中拥有完全访问权限但是有一个很大的缺点:我有一个订阅所有队列和等待用户输入的消费者应用程序,如果每个用户都有自己的vhost,那么我需要每个vhost有1个消费者,因为我没有办法从多个vhost使用相同的连接消费to rabbitmq。

1 个答案:

答案 0 :(得分:12)

小清晰度:您应该发布到交换,并订阅队列。话虽这么说,你可能想要一个" ex-foo"和"前栏"对于你的交流...每个用户一个,基本上。它可以以不同的方式完成,但这可行。

添加权限时,您可以使用正则表达式来设置允许用户执行的操作。

例如,使用the rabbitmqctl command line设置权限,您可以执行以下操作:

rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*"

  

此命令指示RabbitMQ代理授予名为tonyg的用户访问名为/ myvhost的虚拟主机的权限,并对名称以" tonyg - "开头的所有资源配置权限,以及写入和读取权限所有资源。

请注意三个"引号中的权限顺序"是:配置,写入,读取。

在您的情况下,您需要设置如下权限:

  • vhost:mainvhost
  • user:foo
  • 配置:""
  • 写:" ^ [ex-foo | Q-foo]。*"
  • 阅读:" ^ [ex-foo | Q-foo]。*"

这将授予foo用户读取和写入以ex-fooQ-foo

开头的任何交换或队列的权限

你可能能够摆脱更具限制性的东西,比如

  • 写:" ^ ex-foo。*"
  • 读:" ^ Q-foo。*"

我不确定在通过交换发布时是否需要对队列的写权限。我还没有必要在我的安全性中设置这种级别的粒度。