您的位置:首页 > 运维架构

在 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 服务器。


使用 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