在OpenStack中启用Keystone LDAP后端

    技术2024-05-27  81

    开源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树中, Users , UserGroups , Projects和Roles都是使用标准LDAP ObjectClass自己的子树。 在“ Users子树中,例如, ObjectClass=inetOrgPerson 。

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

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

    在keystone.conf的[identity]部分中,将driver = keystone.identity.backends.sql.Identity替换为driver = keystone.identity.backends.ldap.Identity 。 更新[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

    相关资源:openstack对接只读LDAP
    Processed: 0.014, SQL: 10