RabbitMQ使用ldap插件过滤用户访问权限

时间:2016-03-18 00:22:20

标签: rabbitmq ldap-query rabbitmq-exchange

我目前在Rabbit中使用ldap插件,它将登录我域中的任何用户。这是问题,它是为每个用户做的。

我希望能够限制Rabbitmq管理门户访问AD中的1个或2个特定组。更进一步,我希望只有这两个组才能在Rabbit Portal中完全控制(创建交换/ vhosts /队列/无论如何。)下面我只是尝试用1组进行此操作。我怎么能用2组来做到这一点?我是否为第二个添加了另一个{resource_access_query,}块?

这是我当前的配置:

    [
     {rabbit, [{auth_backends, [rabbit_auth_backend_ldap]}]},
     {rabbitmq_auth_backend_ldap,
      [ {servers,               ["dc.domain.com"]},
         {dn_lookup_attribute,   "sAMAccountName"},
         {dn_lookup_base,        "CN=Prod_Group,OU=ProductGroups,OU=Security Groups,OU=Production,OU=domain,DC=hq,DC=domain,DC=com"},
         {user_dn_pattern,       "${username}@domain.com"},
         {use_ssl,               false},
         {port,                  389},
         {log,                   true},
         {resource_access_query,
          {for, [{permission, configure, {in_group, "CN=Prod_Group,OU=ProductGroups,OU=Security Groups,OU=Production,OU=domain,DC=hq,DC=domain,DC=com"}},
                 {permission, write,
                  {for, [{resource, queue,    {in_group, "CN=Prod_Group,OU=ProductGroups,OU=Security Groups,OU=Production,OU=domain,DC=hq,DC=domain,DC=com"}},
                         {resource, exchange, {constant, true}}]}},
                 {permission, read,
                  {for, [{resource, exchange, {in_group, "CN=Prod_Group,OU=ProductGroups,OU=Security Groups,OU=Production,OU=domain,DC=hq,DC=domain,DC=com"}},
                         {resource, queue,    {constant, true}}]}}
       ]
          }},
         {tag_queries,           [{administrator, {constant, true}},
                                  {management,    {constant, true}}]}

       ]
      }
    ].

即使这样,它仍然在DC=hq,DC=domain,DC=com的基数dn登录任何人......就像它没有看到我提供的DN路径一样。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,你需要使用嵌套组来查看你的

在嵌套组查询中

{in_group_nested,Pattern} {in_group_nested,Pattern,AttributeName} {in_group_nested,Pattern,AttributeName,Scope}

与in_group查询类似,但也遍历组层次结构,例如如果登录用户是该组的成员,该组是另一个组的成员。根据成员属性或任何命名属性检查成员身份。在group_lookup_base配置键定义的DN中搜索组,如果前者为none,则搜索thedn_lookup_base变量。如果两个查找基础变量都设置为none,则查询将始终返回false。搜索范围可以设置为eithersubtree或single_level。

子树搜索查找base下包含的所有对象.lele_level搜索直接包含在查找baseDefault值中的组,范围是subrtee查询正在使用从用户到目标组的深入搜索。搜索过程将检测并跳过循环路径。如果用户是许多组的成员,则该查询可能耗费时间和内存,这些组也是许多组的成员。在成员层次结构的组时使用此查询。仍然建议尽可能使用普通的{in_group,...}查询:嵌套组可能难以理解。

示例:

[ {group_lookup_base, "ou=groups,dc=example,dc=com"}, {vhost_access_query, {in_group_nested, "cn=${vhost}-groups,ou=groups,dc=example,dc=com"}, "member", single_level}]

当用户是由membneltribute值定义的组层次结构中的成员并位于theou = groups,dc = example,dc = com目录中时,这将授予对虚拟主机的访问权。