在OpenStack中启用Keystone LDAP后端

开源OpenStack项目提供了一个基础架构即服务(IaaS)层,用于构建公共云和私有云。 公司,服务提供商,增值经销商,中小型企业,研究人员和全球数据中心都使用OpenStack来部署大型私有或公共云。

轻型目录访问协议(LDAP)是用于访问和管理目录信息的客户端/服务器协议。 许多企业应用程序使用LDAP作为用户身份验证的基础。 (LDAP的实现包括IBM®Tivoli®Directory Server,Microsoft®Active Directory和OpenLDAP。)本文显示了如何使集成OpenStack / LDAP环境示例快速启动并正确运行。 了解如何:

  • 通过使用DevStack(用于构建OpenStack开发环境的工具)安装LDAP服务器。
  • 通过Keystone的LDAP身份驱动程序将Keystone配置为使用已安装的LDAP服务器。
  • 使用符合Keystone的树结构填充LDAP服务器。
  • 使用Keystone的单元测试库来测试基于LDAP的Keystone服务。

另外,了解如何在不使用DevStack的情况下配置Keystone,以使用已经在生产环境中运行的LDAP服务器。

使用DevStack设置LDAP后端

从OpenStack的2013年4月Grizzly版本开始,您可以通过标准的OpenStack开发环境安装工具DevStack将LDAP设置为Keystone后端。 DevStack是一个维护良好并有文档证明的Shell脚本,用于构建完整的OpenStack开发环境。

下载DevStack并在devstack根目录中创建一个名为localrc的文件。 在localrc中为OpenStack配置用户自定义。 要使DevStack能够代表您安装LDAP服务器,请将ldap添加到localrc中已启用服务的列表中。 例如:

ENABLED_SERVICES=key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,
c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,mysql,rabbit,ldap

您还必须向localrc添加以下行,以通知DevStack您希望Keystone使用其LDAP后端身份驱动程序:

KEYSTONE_IDENTITY_BACKEND = ldap

如果您希望DevStack清除现有的Keystone LDAP树并重新开始,请将此行添加到localrc文件:

KEYSTONE_CLEAR_LDAP=yes

保存并关闭localrc。 现在从devstack根目录运行stack.sh脚本:

./stack.sh

脚本完成后,您可以看到:

  • 已安装OpenLDAP。
  • Keystone已配置为使用其LDAP后端身份驱动程序。
  • 创建了一个初始的Keystone LDAP树,该树使用devstack \ files \ ldap \ openstack.ldif中的数据,如清单1所示:
    清单1. openstack.ldif的内容
    dn: dc=openstack,dc=org
    dc: openstack
    objectClass: dcObject
    objectClass: organizationalUnit
    ou: openstack
    
    dn: ou=Groups,dc=openstack,dc=org
    objectClass: organizationalUnit
    ou: Groups
    
    dn: ou=Users,dc=openstack,dc=org
    objectClass: organizationalUnit
    ou: Users
    
    dn: ou=Roles,dc=openstack,dc=org
    objectClass: organizationalUnit
    ou: Roles
    
    dn: ou=Projects,dc=openstack,dc=org
    objectClass: organizationalUnit
    ou: Projects
    
    dn: cn=9fe2ff9ee4384b1894a90878d3e92bab,ou=Roles,dc=openstack,dc=org
    objectClass: organizationalRole
    ou: _member_
    cn: 9fe2ff9ee4384b1894a90878d3e92bab

LDAP树

Keystone LDAP后端身份驱动程序使用的示例架构假定如图1所示的树结构:

图1. Keystone LDAP后端身份驱动程序使用的示例架构
树形结构上方显示的模式(带/表示行的结尾)

在图1的示例LDAP树中, UsersUserGroupsProjectsRoles都是使用标准LDAP ObjectClass自己的子树。 在“ Users子树中,例如, ObjectClass=inetOrgPerson

配置生产Keystone实例以使用现有的LDAP服务器

如果您的环境中已经安装了LDAP(并且您在不使用DevStack的情况下安装了Keystone实例),则可以直接将Keystone重新配置为使用其LDAP后端身份驱动程序,而不是默认SQL身份驱动程序。 为此,请修改keystone.conf文件中的值(默认情况下位于/ etc / keystone目录中):

  1. 在keystone.conf的[identity]部分中,将driver = keystone.identity.backends.sql.Identity替换为driver = keystone.identity.backends.ldap.Identity
  2. 更新[ldap]部分以反映您的LDAP服务器配置。 清单2显示了一个示例:
    清单2. keystone.conf文件中的示例LDAP设置
    [ldap]
    url = ldap://localhost
    user = dc=Manager,dc=openstack,dc=org
    password = yourpassword
    suffix = dc=openstack,dc=org
    user_tree_dn = ou=Users,dc=openstack,dc=org
    user_objectclass = inetOrgPerson
    user_id_attribute = cn
    user_mail_attribute = mail
    tenant_tree_dn = ou=Projects,dc=openstack,dc=org
    tenant_objectclass = groupOfNames
    tenant_id_attribute = cn
    tenant_desc_attribute = description
    use_dumb_member = True
    role_tree_dn = ou=Roles,dc=openstack, dc=org
    role_objectclass = organizationalRole
    role_id_attribute = cn
    role_member_attribute = roleOccupant

注意 :如果使用的是DevStack,则直接更新keystone.conf无效,因为每次运行stack.sh脚本时,DevStack都会自动生成一个新的keystone.conf文件。

单元测试LDAP代码

Keystone提供了几个文件,用于对基于LDAP的Keystone服务进行单元测试。 这些文件默认位于/ opt / stack / keystone / tests中,但run_tests.sh文件除外,该文件位于/ opt / stack / keystone /目录中。 这些文件是:

  • tests_backend.py:包含适用于SQL和LDAP后端的测试。
  • test_backend_ldap.py:包含特定于LDAP的测试。
  • run_tests.sh:运行完整的回归测试。 在更新代码之前,请始终运行此文件。
  • _ldap_livetest.py:进行特定于LDAP的代码更改的开发人员应通过运行此文件中的代码来使用实时LDAP测试更改。 此测试假定开发环境中已安装LDAP服务器(例如,OpenLDAP)。
  • backend_liveldap.conf:提供运行实时LDAP测试所需的配置数据。 如果使用DevStack安装了LDAP,则可以通过设置正确的密码值按原样使用此文件。 如果您具有不同的LDAP配置,请确保此文件的配置数据反映您的LDAP配置。
  • backend_ldap.conf:提供在没有LDAP服务器的情况下运行完整回归测试所需的配置数据。

接下来是一些测试示例。 在运行测试之前,请切换到Keystone安装目录(默认为/ opt / stack / keystone /)。

实时LDAP测试

要运行LDAP的实时测试:

./run_tests.sh _ldap_livetest.py

清单3显示了实时LDAP测试的示例输出:

清单3.实时LDAP测试的示例输出
LiveLDAPIdentity
    test_add_duplicate_role_grant                                OK  
    test_add_role_grant_to_user_and_project_404                  SKIP
    test_add_role_to_user_and_project_404                        OK  
    .................
    .................
    test_wrong_ldap_scope                                        OK  
Slowest 5 tests took 11.49 secs:
    2.99    LiveLDAPIdentity.test_create_user_invalid_name_fails
    2.83    LiveLDAPIdentity.test_create_user_invalid_enabled_type_string
    2.10    LiveLDAPIdentity.test_delete_role_with_user_and_group_grants
    2.07    LiveLDAPIdentity.test_delete_user_with_project_association
    1.49    LiveLDAPIdentity.test_user_filter
----------------------------------------------------------------------
Ran 142 tests in 97.297s
OK (SKIP=29)

全面回归测试

要运行全套回归测试:

./run_tests.sh

清单4显示了回归测试的示例输出:

清单4.回归测试的示例输出
AuthBadRequests
    test_authenticate_blank_auth                           OK  
    test_authenticate_blank_request_body                   OK  
    test_authenticate_invalid_auth_content                 OK  
    .................
    .................
MiddlewareTest
    test_mask_password                                     OK  
    test_middleware_bad_request                            OK  
    test_middleware_exception_error                        OK  
    test_middleware_local_config                           OK    
    test_middleware_request                                OK  
    test_middleware_response                               OK  
    test_middleware_type_error                             OK  

Slowest 5 tests took 21.66 secs:
    5.57    TestAuthJSON.test_user_and_group_roles_scoped_token
    5.35    Kc11TestCase.test_admin_requires_adminness
    4.04    KcEssex3TestCase.test_admin_requires_adminness
    3.81    KcMasterTestCase.test_admin_requires_adminness
    2.88    IdentityTestCase.test_filtered_role_assignments
----------------------------------------------------------------------
Ran 1363 tests in 315.451s

OK (SKIP=82)

目前,针对LDAP的回归测试使用的是伪造的LDAP服务器,因此在为LDAP开发时,运行实时LDAP测试很重要。

结论

Keystone为所有OpenStack项目提供身份服务。 除默认SQL后端外,Keystone还支持LDAP和可插入身份验证模块。 本文介绍了如何通过安装新的LDAP服务器或将Keystone配置为使用现有的LDAP服务器来将LDAP用作Keystone后端。 Keystone中即将推出的功能将提供将身份验证与授权分开的功能,从而使与生产LDAP实例的集成更加容易。


翻译自: https://www.ibm.com/developerworks/cloud/library/cl-ldap-keystone/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值