我们在Windows环境中运行RabbitMQ 3.6.5,并使用LDAP插件。这允许我们的开发人员查看队列和检查消息。默认情况下,RabbitMQ LDAP插件允许“所有用户访问所有vhost中的所有对象”(如此处所述)。这包括直接从LDAP插件发布消息的能力。我们想要做的是拒绝LDAP用户的此权限,同时仍然允许他们查看队列。
根据LDAP插件页面,这是通过将Erlang查询插入RabbitMQ配置来实现的。使用该页面上的示例,我们首先尝试使用此查询授予读取权限(LDAP细节已更改):
{resource_access_query,
{for, [{permission, configure, {in_group, "OU=someGroup,OU=Departments,OU=ABC,DC=ABC,DC=ORG"}},
{permission, read, {constant, true}}
]
}}
当这没有效果时,我们尝试显式拒绝写权限:
{resource_access_query,
{for, [{resource, queue, {for, [{permission, configure,
{in_group, "OU=someGroup,OU=Departments,OU=ABC,DC=ABC,DC=ORG"}
},
{permission, write, {constant, false}},
{permission, read, {constant, true}}
]}},
]}}
不幸的是,这也没有效果。在这两种情况下,LDAP用户仍然能够在LDAP插件中发布消息。
有人知道我们错过了什么吗?
1条答案
按热度按时间dwbf0jvd1#
您还需要阅读RabbitMQ访问控制指南,特别是本节。消息通过
basic.publish
AMQP 0.9.1方法发布到RabbitMQ中的Exchange,而不是Exchange。在本例中,拒绝exchange
资源的write
权限,并授予queue
资源read
权限。一旦您正确配置了LDAP插件,我强烈建议您启用auth cache plugin。否则,在发布或读取每一条消息以及所有其他需要授权的操作时,都会进行LDAP查询。