Permissions RabbitMQ用户对预创建队列的发布/订阅权限

Permissions RabbitMQ用户对预创建队列的发布/订阅权限,permissions,rabbitmq,amqp,Permissions,Rabbitmq,Amqp,我有一个用例,需要创建一个用户,并向他授予在现有队列上仅发布/订阅的权限,下面是一个示例: Vhost“mainvhost”(对所有用户都相同) 在vhost内部,我有Q-foo和Q-bar队列 用户“foo”只能发布/订阅到Q-foo 用户“bar”只能发布/订阅到Q-bar 我没有办法设置这样的用户管理策略,我找到的唯一方法是为每个用户创建一个vhost,这样,用户将在自己的vhost中拥有完全访问权限,但有一个很大的缺点:我有一个消费者应用程序,它订阅所有队列并等待用户输入,如果每个用

我有一个用例,需要创建一个用户,并向他授予在现有队列上仅发布/订阅的权限,下面是一个示例:

  • Vhost“mainvhost”(对所有用户都相同)
  • 在vhost内部,我有Q-foo和Q-bar队列
  • 用户“foo”只能发布/订阅到Q-foo
  • 用户“bar”只能发布/订阅到Q-bar

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

一个小问题:您应该发布到exchange,并订阅队列。这就是说,你可能需要一个“前foo”和“前bar”的交换。。。基本上每个用户一个。这可以用不同的方式来做,但这是可行的


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

例如,使用设置权限,可以执行以下操作:

rabbitmqctl设置\u权限-p/myvhost tonyg“^tonyg-.*”.*“.*”

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

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

在您的情况下,您希望设置如下权限:

  • vhost:mainvhost
  • 用户:foo
  • 配置:“
  • 写:“^[ex-foo | Q-foo].*”
  • 改为:“^[ex-foo | Q-foo].”
这将授予
foo
用户对以
ex-foo
Q-foo
开头的任何exchange或队列的读写权限

你也许可以做一些限制性更强的事情,比如

  • 写“^ex foo.*”
  • 阅读:“^Q-foo.*”

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

在直接发布到队列的情况下,应该添加默认exchange的权限amq.default^(amq.default | Q-foo)$这不会阻止同一用户通过直接exchange将消息发送到另一个队列(例如p-foo)。