OpenStack组件keystone与LDAP协议集成(OpenLDAP和Active Directory) | 张恒镭的博客

OpenStack组件keystone与LDAP协议集成(OpenLDAP和Active Directory)

时间:16-02-02 栏目:openstack 作者:longteng 评论:0 点击: 2,865 次

前言: 为什么要集成LDAP或者AD,是因为很多私有云公司内部已经有一套AD了,直接集成能整合入客户的用户数据,方便使用。

但是要注意openstack对AD支持是否完全可靠,需要深度测试。

了解openLDAP 参考 http://www.zhanghenglei.com/learn-openldap-beginner/

 

Openstack环境准备:

请参考 http://openstack.redhat.com/GettingStartedHavana_w_GRE 部署一个OpenStack环境,租户网络为Neutron-OVS-GRE。并确保keystone,nova,neutron,cinder,glance,horizon等各个服务都能正常使用。(注意:RDO生成的随机默认密码可能不满足windows密码复杂度要求,请酌情将各个组件的keystone[KS_PW]和database[DB_PW]密码更改成符合windows server  中Active Directory的密码复杂度要求[大写字符+小写字符+数字]>=8)

以下操作之前,请先备份/etc/keystone/keystone.conf等文件。

Microsoft Active Directory(AD)服务器一台[Windows Server2008]

Linux OpenLDAP服务器一台[CentOS6.4_X86_64]。特别地,假设OpenLDAP主机名hostname为ad,FQDN为ad.stackinsider.cn,那么需要在DNS服务器中配置,使得keystone所在的服务器可以ping通它。

# hostname

ad

# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=ad

# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.1.101.155 ad.stackinsider.cn ad

认识LDAP协议:

http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol

OU的概念,CN的概念和DN的概念等。

目的:使openstack组件keystone与标准Lightweight Directory Access Protocol(以下简称LDAP协议)集成,能够让keystone从第三方的LDAP软件(工具)获取统一管理的用户,来完成对OpenStack的一些操作。集成后keystone依然能对tenant,user,role等概念兼容。

第一部分

keystone与OpenLDAP的集成

一 在Linux主机上安装OpenLDAP服务

参考: http://my.oschina.net/5lei/blog/193484

安装前检查,发现系统默认安装了OpenLDAP,但是没有安装ldap-server和ldap-client。

#find / -name openldap*

/usr/share/doc/openldap-2.4.23

/usr/libexec/openldap

/etc/openldap

使用yum安装:

#su root

#yum install -y openldap openldap-servers openldap-clients

配置:

#cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

#cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

#mv /etc/openldap/slapd.d{,.bak}

修改slapd.conf文件

#vim /etc/openldap/slapd.conf

找到:107         by dn.exact=”cn=Manager,dc=my-domain,dc=com” read

改为:107         by dn.exact=”cn=OpenStack,dc=stackinsider,dc=cn” read

设置目录树后缀

找到:115 suffix          “dc=my-domain,dc=com”

改为:115 suffix          “dc=stackinsider,dc=cn”

设置LDAP管理员DN

找到:117 rootdn          “cn=Manager,dc=my-domain,dc=com”

改为:117 rootdn          “cn=OpenStack,dc=stackinsider,dc=cn”

设置LDAP管理员口令(最好使用明文加密后的密码)

找到:121 # rootpw                secret

改为:121 rootpw          123456

修改相关文件权限

#chown ldap.ldap /etc/openldap/*

#chown ldap.ldap /var/lib/ldap/*

#mkdir /etc/openldap/cacerts

Reboot机器后,启动OpenLDAP服务

#/etc/init.d/slapd start

OpenLDAP默认网络服务端口为389,也可以修改

slapd -f /etc/openldap/slapd.conf -h ldap://389

新建初始化文件init.ldif

#cat init.ldif

dn:dc=stackinsider,dc=cn

objectclass:dcObject

objectclass:organization

o:Stackinsider, Inc.

dc:Stackinsider

dn:cn=OpenStack,dc=stackinsider,dc=cn

objectclass:organizationalRole

cn:OpenStack

导入文件,初始化OpenLDAP服务器

#ldapadd -x -W -D “cn=OpenStack,dc=stackinsider,dc=cn” -f init.ldif           

Enter LDAP Password:  [123456]

查看结果

#ldapsearch -x -LLL -H ldap:/// -b dc=stackinsider,dc=cn dn           

dn: dc=stackinsider,dc=cn

dn: cn=OpenStack,dc=stackinsider,dc=cn [后面会用到]

设置开机自启动,并开放389服务端口

#chkconfig slapd on

#iptables -A INPUT -p tcp –dport 389 -j ACCEPT

#/etc/rc.d/init.d/iptables save

下载并安装windows客户端软件Softerra LDAP Administrator

http://softerra-downloads.com/ldapadmin/ldapadmin-4.11.14302.0-x64-eng.msi

keystone-LDAP-1

连接刚才配置的OpenLDAP服务器[ad.stackinsider.cn],保证客户端windows能ping通它。

鼠标右击Local Servers;选择New;再选择New profile;填入任意连接名(假设为ad.stackinsider.cn);下一步;填写Host为ad.stackinsider.cn;下一步;在principal填入cn=OpenStack,dc=stackinsider,dc=cn Password填入123456并选择save;点击完成。

keystone-LDAP-2

keystone-LDAP-3

二 创建OpenLDAP对象

准备Users OU,并添加相关用户。

创建OU=Users:选中dc=stackinsider鼠标右击;选择New,再选择New Entry;选择Template-Based下一步;选择Organizational Unit 下一步;Type为ou,Value填入Users下一步;完成OU=Users的创建;

为OU=Users添加用户:选中OU=Users鼠标右击;选择New,再选择New Entry;选择Template-Based下一步;选择Organizational Person 下一步;Type为cn,Value为admin 下一步;填入属性sn=admin并填入userPassword 完成。(注意:这里的admin密码要与OpenStack环境中admin密码一致)同样操作可以添加glance,cinder,nova,neutron等用户。

keystone-LDAP-4

keystone-LDAP-5

在cn=OpenStack下面创建Projects OU和Roles OU。

鼠标右击cn=OpenStack;选择New;再选择New Entry;选择Template-Based下一步;选择Organizational Unit 下一步;Type为ou,Value填入Projects下一步;完成OU=Projects的创建;同样的操作创建OU=Roles。

keystone-LDAP-6

然后再在OU=Projects下创建OU=admin和OU=services。目前的OU结构图如下。

keystone-LDAP-7

在OU=Roles下面创建OrgainzationalRole Object,分别是admin和Member。其中admin需要先填入roleOccupant属性值。具体步骤:选中OU=Roles右击鼠标;选择New,再选择New Entry;选择Schema-Based 下一步;找到organizationalRole点击>>添加到右边窗口,点击下一步;选择Type为cn,Value为admin 下一步;找到roleOccupant属性右边的按钮;选择OU=Users下面的admin用户(cn=admin,ou=Users,dc=stackinsider,dc=cn,注意若没看到Users可以再次点击dc=stackinsider);最后点击完成。

keystone-LDAP-8

keystone-LDAP-9

同样操作在OU=Roles下添加cn=Member,其roleOccupant属性可暂时不填。

在ou=admin,ou=Projects,ou=OpenStack,鼠标右击Projects下的admin同样的方法创建organizationalRole,其roleOccupant属性为cn=admin,ou=Users,dc=stackinsider,dc=cn。接着鼠标右击Projects下的admin;选择创建Group(LDAP Group Of Names object)下一步;Type为cn,Value为adminUsers下一步;member属性添加cn=admin,ou=Users,dc=stackinsider,dc=cn。

【说明:Projects下面的admin和services对应到openstack-keystone就是租户的概念,然后经过上一步就是向admin租户中添加了admin用户。】

keystone-LDAP-10

至此LDAP Adminstrator大致结构显示如下:

keystone-LDAP-11

三  配置keystone并测试

备份

# cp keystone.conf keystone.conf.init

配置认证backends为ldap

159 [identity]                                                                                                   

160 # driver = keystone.identity.backends.sql.Identity

161 driver = keystone.identity.backends.ldap.Identity

配置ldap

[ldap]                                                                                                          

url = ldap://ad.stackinsider.cn

user = cn=OpenStack,dc=stackinsider,dc=cn

password = 123456

suffix = dc=stackinsider,dc=cn

use_dumb_member = True

dumb_member = cn=OpenStack,ou=Users,dc=stackinsider,dc=cn

user_tree_dn = ou=Users,dc=stackinsider,dc=cn

user_objectclass = organizationalPerson

user_id_attribute = cn

user_name_attribute = sn

user_mail_attribute = email

user_enabled_attribute = userAccountControl

user_enabled_mask = 2

user_enabled_default = 512

user_attribute_ignore = password,tenant_id,tenants

user_allow_create = False

user_allow_update = False

user_allow_delete = False

tenant_tree_dn = ou=Projects,cn=OpenStack,dc=stackinsider,dc=cn

tenant_objectclass = organizationalUnit

tenant_id_attribute = ou

tenant_member_attribute = member

tenant_name_attribute = ou

tenant_allow_create = True

tenant_allow_update = True

tenant_allow_delete = True

role_tree_dn = ou=Roles,cn=OpenStack,dc=stackinsider,dc=cn

role_objectclass = organizationalRole

role_id_attribute = cn

role_name_attribute = cn

role_member_attribute = roleOccupant

role_allow_create = True

role_allow_update = True

role_allow_delete = True

重启openstack-keystone服务,并查看user,role和tenant

keystone-LDAP-12

四 添加openstack其它服务(以glance为例),通过keystone-ldap认证

确保OU=Users下面已经创建glance用户,并且密码与openstack环境中glance密码一致。

鼠标右击OU=Roles下面的cn=admin;鼠标右击选择All task,再选择Add/Modify Attribute;找到roleOccupant,点击下一步;选择Users=glance(cn=glance,ou=Users,dc=stackinsider,dc=cn),点击完成。

keystone-LDAP-13

keystone-LDAP-14

在OU=Projects下面的services鼠标右击;选择New,再选择New Entry;选择Schema-Based 下一步;找到organizationalRole点击>>添加到右边窗口,点击下一步;选择Type为cn,Value为admin 下一步;找到roleOccupant属性右边的按钮;选择OU=Users下面的admin用户(cn=glance,ou=Users,dc=stackinsider,dc=cn,注意若没看到Users可以再次点击dc=stackinsider);最后点击完成。

在OU=Projects下面的services鼠标右击;选择New,再选择New Entry;选择Template-Based下一步;创建Group(LDAP Group Of Names object)下一步;Type为cn,Value为servicesUsers下一步;member属性添加cn=glance,ou=Users,dc=stackinsider,dc=cn。

添加glance之前

[root@ipv6 ~(keystone_admin)]# glance index

ID                                   Name                           Disk Format          Container Format     Size        

———————————— —————————— ——————– ——————– ————–

Request returned failure status.

Invalid OpenStack Identity credentials.

测试glance服务:

keystone-LDAP-15

同样方法添加cinder,nova,neutron等服务,只需在Roles/admin添加相应用户(cinder,nova,neutron)到roleOccupant属性;在Projects/services/admin添加相应用户到roleOccupant属性;在Projects/services/servicesUsers添加相应用户到member属性。

第二部分

keystone与Microsoft Active Directory(AD)的集成

一  环境准备

安装或在现有的windows server2008,操作Microsoft Acitve Directory(以下简称AD)。欲了解AD请看系列文章[深入浅出Active Directory http://terryli.blog.51cto.com/704315/141686 ]。配置了AD后这台windows server会自成一个DNS服务器。配置相应的hostname和域 ad-ldap.opentest.com ,并且保证装有keystone服务的节点可以ping通它。

若在部署OpenStack环境中各个密码无法达到windows server密码复杂度要求,在此之前请先disable掉AD用户密码复杂度的要求,参考http://tanyanbo2.blog.163.com/blog/static/973391592011222102326909/ 。并且将windows server原始的管理员用户名 Adminstrator更名为admin。修改管理员用户名的步骤是:依次点击开始,管理工具,Active Directory管理中心;选中右边的tab,可以看到opentest(本地);点击Users可以看到右边列出了所有的用户;选中Adminstrator右击鼠标,然后点属性,更改“全名”和“用户”即可。

keystone-LDAP-16

同样可以在此可以创建新的用户,如glance,cinder,nova,neutron等,需要注意创建这些用户的密码一定要与OpenStack环境中相应密码一致;密码选项要选择“其他密码选项”,并设置为“密码永不过期”。

此时也可以使用Softerra LDAP Administrator连接到这个windows server的AD服务。Host为ad-ldap.opentest.com,可以使用Lookup Servers搜索出来,Principal为cn=admin,cn=Users,DC=opentest,DC=com,密码为server admin的密码。

keystone-LDAP-17

接下来的操作可以借助Softerra LDAP Administrator软件,配合windows server 的AD管理和编辑工具,这样效率更高。

二  创建相关的OU,即组织单元/单位

使用AD管理中心工具,找到opentest(本地),鼠标右击;选“新建”,再选择“组织单位[OU]”。名称填OpenStack,点确定完成。同样的操作步骤在OpenStack下面创建Projects和Roles组织单位。

接下来打开AD编辑器(开始,搜索ADSIEDIT.msc即可打开)。展开DC=opentest,DC=com;找到OU=OpenStack,OU=Roles;鼠标右击OU=Roles,选新建,对象;在选择类中找到organizationalRole,点下一步;值填为admin,下一步;再选择更多属性,找到roleOccupant,填入属性值为CN=admin,CN=Users,DC=opentest,DC=com;添加,确定,最后点击完成。(注意roleOccupant的属性值为用户的“组织路径”)

keystone-LDAP-18

keystone-LDAP-19

同样的方法创建organizationalRole=Member,暂时不需要填写“更多属性“。以上步骤也可以在Softerra LDAP Administrator软件中完成,且更方便快捷。

keystone-LDAP-20

同Roels下的organizationalRole=admin类似的操作:在OU=OpenStack,OU=Projects,OU=admin下面创建admin organizationalRole,并且添加roleOccupant属性值为CN=admin,CN=Users,DC=opentest,DC=com。再在OU=OpenStack,OU=Projects,OU=admin下面创建名为adminUsers的 groupOfName[CN];在其member属性中添加admin用户(对应的DN值为:CN=admin,CN=Users,DC=opentest,DC=com)。

同上面的操作在OU=OpenStack,OU=Projects,OU=services下面创建organizationalRole 对象admin和groupOfName 对象servicesUsers。它们的roleOccupant属性值和member属性值可以先不填写。

类似操作可以在Projects下面创建TeantA,接着创建名为Member的 organizationRole对象,roleOccupant属性值为UserA(CN=UserA,CN=Users,DC=opentest,DC=com);创建名为UserAUsers的groupOfName对象,member属性值为UserA,UserB等。

至此以上操作的结果,结构图如下:

keystone-LDAP-21

三  配置keystone

[identity]                                                                                                     

# driver = keystone.identity.backends.sql.Identity

driver = keystone.identity.backends.ldap.Identity

[ldap]

url = ldap://ad-ldap.opentest.com

user = cn=admin,cn=Users,dc=opentest,dc=com

password = password

suffix = dc=opentest,dc=com

use_dumb_member = True

dumb_member = cn=OpenStack,cn=Users,dc=opentest,dc=com

user_tree_dn = cn=Users,dc=opentest,dc=com

user_objectclass = organizationalPerson

user_id_attribute = cn

#user_name_attribute = sn

user_name_attribute = sAMAccountName

user_mail_attribute = email

user_enabled_attribute = userAccountControl

user_enabled_mask = 2

user_enabled_default = 512

user_attribute_ignore = password,tenant_id,tenants

user_allow_create = False

user_allow_update = False

user_allow_delete = False

tenant_tree_dn = ou=Projects,ou=OpenStack,dc=opentest,dc=com

tenant_objectclass = organizationalUnit

tenant_id_attribute = ou

tenant_member_attribute = Member

tenant_name_attribute = ou

tenant_allow_create = True

tenant_allow_update = True

tenant_allow_delete = True

role_tree_dn = ou=Roles,ou=OpenStack,dc=opentest,dc=com

role_objectclass = organizationalRole

role_id_attribute = cn

role_name_attribute = cn

role_member_attribute = roleOccupant

role_allow_create = True

role_allow_update = True

role_allow_delete = True

测试keystone服务,列出windows server AD中的用户,租户和角色。

keystone-LDAP-22

四  集成服务

将cinder,glance,nova,neutron等用户:

加入到OU=OpenStack,OU=Roles,CN=admin里面的roleOccupant属性;

加入到OU=OpenStack,OU=Projects,OU=services,CN=admin里面的roleOccupant属性;

加入到OU=OpenStack,OU=Projects,OU=services,CN=servicesUsers里面的member属性。

选中相应的OU,鼠标右击选择All task,再选择Add/Modify Attribute;找到roleOccupant或member属性,点击下一步;选择/添加/替换用户,点击完成。

测试OpenStack各项服务均正常,由下图可证。

keystone-LDAP-23

第三部分

总结

keystone在Grizzly版本就实现了标准ldap协议的后端用户认证。本文的OpenLDAP和Microsoft Acitve Directory都是标准ldap协议的具体实现工具,并且这两种工具在实际工作或商业环境中广泛使用。

总体上两种工具集成的过程类似,主要是创建用于openstack环境的各种Organizational,Unit,organizationalRole和groupOfName等ldap协议对象,使tenant,role和user与之相对应,详细对应关系在/etc/keystone/keystone.conf文件中的[ldap]中连接ldap服务器并做映射。

经过简单的测试,目前可能还存在一些不同和问题,比如:

1:对用户的管理直接通过OpenLDAP和Microsoft Acitve Directory管理了,不能用keystone的命令和horizon界面操作了。

2:由上一步影响到租户/用的资源配额属性的设定问题,只能通过nova,neutron等服务的命令间接来做配额设置了。

3:对性能方面,有一定的负面影响。

其它:特别是keystone和 Microsoft Active Directory(AD)的集成,按市场需求来看,私有云环境中这个解决方案具体相当的商业价值。欲投商业,请君全面并深度测试,以免给您和您的客户带来麻烦。 OpenStack组件keystone与LDAP协议集成(OpenLDAP和Active <wbr>Directory)

仅供参考,欢迎雅正!

声明: 本文由( longteng )原创编译,转载请保留链接: OpenStack组件keystone与LDAP协议集成(OpenLDAP和Active Directory)

OpenStack组件keystone与LDAP协议集成(OpenLDAP和Active Directory):等您坐沙发呢!

发表评论




------====== 本站公告 ======------
欢迎关注我的博客。

其他