技术开发 频道

OpenStack Keystone与只读LDAP集成

  3) Keystone通过只读LDAP验证

  根据上文中提及,企业组织对已有LDAP服务与keystone整合的需求来看,现有的LDAP后端不满足于企业的需求。因此,本文提出通过自定义验证后端的方式,来满足这类用户的实际需求。

  自定义LDAP后端的功能需求

  如前面所述,已有LDAP服务的企业组织,对Keystone的需求可以简化如下:

  •Keystone所有的系统服务账号及特定管理员帐号存储于OpenStack的本地MySQL数据库中,不依赖于现有LDAP服务。

  •Keystone中所需要的用户角色及租户信息存储于OpenStack的本地MySQL数据库中,不依赖于现有LDAP。

  •Keystone中所有常规的用户帐号验证通过现有的LDAP服务进行验证。

  上述简化的需求既可以保证OpenStack系统各组件服务的独立性,也可以通过现有的LDAP服务进行常规用户的验证,实现企业内部统一的身份验证机制。

  自定义LDAP后端的简单实现

  依据上述简化的需求,keystone现有的SQL后端和LDAP后端均可满足部分需求。因此,我们只需基于现有的SQL和LDAP后端定制一个混合的验证后端即可。

  具体实现的思路如下:

  •以现有的SQL验证后端为基础,列出OpenStack各系统服务帐号及特定管理员帐号的列表,在该服务帐号列表中的服务帐号通过SQL验证后端进行本地验证。

  •在服务帐号列表以外的其他帐号,以现有LDAP后端为基础,仅利用现有LDAP后端中的密码验证部分,实现仅通过LDAP服务进行帐号的密码验证功能。

  自定义LDAP后端的验证流程如下:

  1) 用户登陆时,自定义后端会通过现有的SQL后端查询账号是否存在。如果不存在直接返回,如果存在继续2);

  2) 如果账户存在,查询该账号是否属于系统服务账号。如果是系统账号继续a);

  a) 如果账号属于系统账号,则通过SQL后端进行密码验证。密码验证失败,则返回;密码验证成功,则继续4);

  b) 如果不是系统账号,而是普通用户账号,继续3);

  3) 如果账号存在,并且是普通用户账号,则通过LDAP后端进行密码验证。如果密码验证失败,则返回;如果密码验证成功,则继续4)

  4) 继续通过SQL后端进行其他验证步骤。

  注意:建议保留一个系统管理员帐号,用以进行必要的初始化配置。本文中保留的系统管理员帐号为“admin”。

5
相关文章