当用户是组中不同组织单位路径的成员时,使用 LDAP 的 PowerFlex 身份验证不起作用
Summary: 在 ScaleIO 群集中启用 LDAP 身份验证后,作为分配给 LDAP 服务配置的通讯组成员的用户无法登录。
Symptoms
情况说明
在具有单个 Active Directory 域的 MDM 群集或网关中为 ScaleIO 配置 LDAP 服务。如果还在同一域内的不同 OU 中配置用户和 ScaleIO 组,则可能会发生此问题。
症状
用户位于 CN=testuser,OU=Users,OU=IT Dept,DC=swlab,DC=local
该组为:CN = Sio_Admin_Role,OU = GlobalGroups,OU = 组,DC = swlab,DC = local
我们可以在 MDM 或网关跟踪日志中找到以下警告消息。
gateway-trace.log中的错误消息是:2017-06-14 11:49:46,587 [http-nio-443-exec-6] 错误 c.e.s.s.w.s.ScaleIOSecurityUtils - 在组中找不到用户 testuser CN = Sio_Admin_Role,OU = GlobalGroups,OU = 组,DC = swlab,DC = local
影响
某些用户无法使用 LDAP 身份验证登录到 ScaleIO 系统或网关。
Cause
根本原因
此问题的根本原因是,将 LDAP 服务添加到 ScaleIO 群集时使用的“--ldap_base_dn”参数处于太低的级别。
有关上述示例问题,请参阅以下配置:
scli --add_ldap_service --ldap_service_uri "ldap://swlab.local" --ldap_base_dn "OU=GlobalGroups,OU=Groups,DC=swlab,DC=local" --ldap_service_name testldap scli --assign_ldap_groups_to_roles --administrator_role_dn "CN=Sio_Admin_Role,OU=GlobalGroups,OU=Groups,DC=swlab,DC=local" --monitor_role_dn "CN=Sio_Admin_Role,OU=GlobalGroups,OU=Groups,DC=swlab,DC=local" --ldap_service_name testldap
这会使基本 dn 在 AD 配置单元架构中开始搜索的位置过低。在“swlab.local/Groups/GlobalGroups”启动时,LDAP 无法查询更高级别的用户。
因此,在这种情况下,“testuser”存在于“swlab.local/IT Dept/Users/testuser”中,因此当查询组“Sio_Admin_Role”时,它会再次尝试在base_dn下找到成员用户。
那里不存在用户,登录也不会成功。
Resolution
解决方法
要解决此问题,请在 ScaleIO 中重新创建 LDAP 服务并使用更高级别的base_dn。在上面的示例中,可以在“add_ldap_service”scli 命令中更改以下内容。
scli --add_ldap_service --ldap_service_uri "ldap://swlab.local" --ldap_base_dn "DC=swlab,DC=local" --ldap_service_name testldap
通过将base_dn更改为域的根,LDAP 可以在任何 OU 或 CN 中查询作为 SIO 角色组成员的相应用户。