配置RabbitMQ以拒绝LDAP用户发布消息

时间:2018-03-12 14:12:13

标签: erlang rabbitmq

我们在Windows环境中运行RabbitMQ 3.6.5并使用LDAP插件。这允许我们的开发人员查看队列并检查消息。默认情况下,RabbitMQ LDAP插件允许“所有用户访问所有vhost中的所有对象”(如documented here)。这包括直接从LDAP插件发布消息的功能。我们想要做的是拒绝LDAP用户的这个权限,同时仍允许他们查看队列。

根据LDAP plugin page,这是通过将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 个答案:

答案 0 :(得分:0)

RabbitMQ团队监控this mailing list,有时只回答StackOverflow上的问题。

您还需要阅读RabbitMQ访问控制指南,特别是this section。消息通过basic.publish AMQP 0.9.1方法发布到RabbitMQ中的Exchange,而不是队列。在您的情况下,拒绝write资源的exchange权限,并授予read资源{/ 1}}权限。

正确配置LDAP插件后,我强烈建议您启用auth cache plugin。否则,将在发布或读取每条消息时进行LDAP查询,以及需要授权的所有其他操作。