在 OpenStack 中启用 Keystone LDAP 后端
2015-03-12 21:34
197 查看
开源的 OpenStack 项目为构建公共云和私有云提供了一个基础架构即服务(IaaS)层。企业、服务提供商、增值分销商、中小型企业、研究人员和全球数据中心都使用 OpenStack 来部署大型私有云或公共云。
轻量级目录访问协议(LDAP)是一个客户端/服务器协议,用于访问和管理目录信息。许多企业应用程序都使用 LDAP 作为用户身份验证的基础。(LDAP 的实现包括 IBM® Tivoli® Directory Server、Microsoft® Active Directory 和 OpenLDAP)。本文展示了如何快速、正确地启动和运行一个示例集成 OpenStack/LDAP 环境。学习如何:
使用 DevStack 安装一个 LDAP 服务器,DevStack 是一个用于构建 OpenStack 开发环境的工具。
配置 Keystone,通过 Keystone 的 LDAP 身份驱动程序使用已安装的 LDAP 服务器。
使用 Keystone 兼容的树型结构来填充 LDAP 服务器。
使用 Keystone 的单元测试库来测试基于 LDAP 的 Keystone 服务。
此外,学习如何在不使用 DevStack 的情况下配置 Keystone,使用已经在生产环境中运行的 LDAP 服务器。
自 2013 年 4 月 Grizzly 版本的 OpenStack 发布起,您可以通过标准的 OpenStack 开发环境安装工具 DevStack 将 LDAP 设置为 Keystone 后端。DevStack 是一个经过良好维护和记录的
shell 脚本,用于构建完整的 OpenStack 开发环境。
下载 DevStack 并在 devstack 根目录中创建一个名为 localrc 的文件。在 localrc 中为 OpenStack
配置用户定制内容。为了使 DevStack 能够以您的名义安装 LDAP 服务器,可以将
localrc 中已启用的服务组成的列表中。例如:
您还必须在 localrc 中添加以下代码行,以告知 DevStack 您希望 Keystone 使用其 LDAP 后端身份驱动程序:
如果您希望 DevStack 清除现有的 Keystone LDAP 树并重新开始,那么可以将以下代码行添加到 localrc 文件中:
保存并关闭 localrc。现在运行来自 devstack 根目录的 stack.sh 脚本:
运行完脚本后,您可以看到:
OpenLDAP 已被安装。
Keystone 被配置为使用其 LDAP 后端身份驱动程序。
一个初始 Keystone LDAP 树已被创建,它使用了 devstack\files\ldap\openstack.ldif 中的数据,如清单 1 所示:
清单 1. openstack.ldif 的内容
Keystone LDAP 后端身份驱动程序所用的示例模式假设采用了如图 1 所示的树型结构:
图 1. Keystone LDAP 后端身份驱动程序所用的示例模式
在图 1 的示例 LDAP 树中,
LDAP
回页首
如果在您的环境中已经安装了 LDAP(并且您在没有使用 DevStack 的情况下安装了一个 Keystone 实例),那么您可以直接将 Keystone 重新配置为使用其 LDAP 后端身份驱动程序,而不是使用默认的 SQL 身份驱动程序。为此,可以修改 keystone.conf 文件(默认情况下位于 /etc/keystone 目录下)中的值:
在 keystone.conf 的
更新
LDAP 服务器配置。清单 2 显示了一个示例:
清单 2. keystone.conf 文件中的示例 LDAP 设置
备注:如果您使用了 DevStack,那么将无法直接更新 keystone.conf,因为在每次运行 stack.sh 脚本时,DevStack 都会自动生成一个新的 keystone.conf 文件。
回页首
Keystone 为基于 LDAP 的 Keystone 服务单元测试提供了几个文件。在默认情况下,除了 run_tests.sh 之外,这些文件都驻留在 /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 运行实时测试:
清单 3 显示了实时 LDAP 测试的示例输出:
清单 3. 实时 LDAP 测试的示例输出
运行完整的回归测试集:
清单 4 显示了回归测试的示例输出:
清单 4. 回归测试的示例输出
目前,LDAP 的回归测试使用了一个假的 LDAP 服务器,所以在执行针对 LDAP 的开发工作时,运行实时 LDAP 测试非常重要。
回页首
Keystone 为所有 OpenStack 项目提供了身份服务。除了默认的 SQL 后端之外,Keystone 还支持 LDAP 和可插拔的身份验证模块。本文展示了如何让 LDAP 成为 Keystone 后端,方法是安装新的 LDAP 服务器,或者是通过配置 Keystone 来使用现有的 LDAP 服务器。Keystone 中即将推出的一个特性能够将身份验证和授权分离,从而使得集成生产 LDAP 实例变得更容易。
轻量级目录访问协议(LDAP)是一个客户端/服务器协议,用于访问和管理目录信息。许多企业应用程序都使用 LDAP 作为用户身份验证的基础。(LDAP 的实现包括 IBM® Tivoli® Directory Server、Microsoft® Active Directory 和 OpenLDAP)。本文展示了如何快速、正确地启动和运行一个示例集成 OpenStack/LDAP 环境。学习如何:
使用 DevStack 安装一个 LDAP 服务器,DevStack 是一个用于构建 OpenStack 开发环境的工具。
配置 Keystone,通过 Keystone 的 LDAP 身份驱动程序使用已安装的 LDAP 服务器。
使用 Keystone 兼容的树型结构来填充 LDAP 服务器。
使用 Keystone 的单元测试库来测试基于 LDAP 的 Keystone 服务。
此外,学习如何在不使用 DevStack 的情况下配置 Keystone,使用已经在生产环境中运行的 LDAP 服务器。
使用 DevStack 设置一个 LDAP 后端
自 2013 年 4 月 Grizzly 版本的 OpenStack 发布起,您可以通过标准的 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 服务单元测试提供了几个文件。在默认情况下,除了 run_tests.sh 之外,这些文件都驻留在 /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 服务器,或者是通过配置 Keystone 来使用现有的 LDAP 服务器。Keystone 中即将推出的一个特性能够将身份验证和授权分离,从而使得集成生产 LDAP 实例变得更容易。
相关文章推荐
- 【OpenStack】Openstack Keystone LDAP后端配置
- Ubuntu下LDAP和OpenStack Keystone安装集成小结
- 《转》OpenStack组件keystone与LDAP协议集成(OpenLDAP和Active Directory)
- Install and Configure OpenStack Identity Service (Keystone) for Ubuntu 14.04
- OpenStack实践系列②认证服务Keystone
- OpenStack安装部署之keystone&&Glance
- CentOS 7部署OpenStack(2)―安装keystone服务
- 配置Ceph为openstack后端
- openstack keystone role API详解
- openstack的Juno关于Keystone的middware的鉴权链接URI的改进
- keystone 出错HTTP500,出错Invalid OpenStack Identity credentials
- Openstack不支持LVM作为Cinder后端时的跨节点热迁移
- Keystone, Openstack之魂
- OpenStack 最小化安装配置(五):KeyStone服务配置
- OpenStack Keystone的基本概念理解
- 在OpenStack中启用控制台访问vSphere实例
- openstack keystone 笔记
- [原]Openstack之identity server(keystone)
- OpenStack_Havana_Install_guide的keystone脚本
- Openstack-Keystone-身份验证