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)。