OpenStack安装向导之配置identity服务(Jesse翻译,原文来自icehouse的OpenStack的文档)
Identity Service内容
Identity服务执行以下功能:
用户管理,跟踪用户和他们的权限
服务目录,提供一个有效地服务目录(用他们的API)
为了更好的理解Identity服务,你必须理解以下内容:
User——一个人,系统,或者服务的数字代表(使用OpenStack云服务)。识别服务验证接入请求(由用户发起的)。用户有一个login且被分派访问资源的令牌。用户可以直接特别的tenant,是否他们包含在tenant中。
Credentials——验证用户的凭证数据。在identity服务中,例如用户名和密码,用户名和API key或者一个认证令牌(由identity服务)
Authentication——identity服务通过验证系列的用户凭证来确认一个进入的请求。
Token——一个随意bit文本被用于去访问资源。每一个令牌有一个范围(描述那个资源可以用它来访问)
Tenant——一个用于分组和隔离资源和/或识别对象容器。依赖于服务操作者,一个tenant可以映射到一个客户,账户,组织或工程项目。
Service——一个OpenStack服务,例如计算机,对象存储,或者image服务。提供一个或更多的endpoint(哪个用户可以访问资源和执行操作)
Endpoint——一个网络访问地址,通常描述为url。
Role——一个用户去执行特定的操作集。
安装identity服务
在控制器节点上,安装OpenStack识别服务,一起安装python-keystneclient
#yum install openstack-keystone python-keystoneclient
识别服务使用一个数据库去存储信息。指定配置文件中的数据库的位置。在这个向导中,我们在控制器节点上(用户名为keystone)使用MySQL数据库。用实际的数据库用户密码替代KEYSTONE_DBPASS.
#openstack-config –set /etc/keystone/keystone.conf \
Database connectmysql://keystone:KEYSTONE_DBPASS@controller/
keystone
使用你先前设置的root密码登陆。创建一个keystone数据库用户。
$ mysql-u root -p
mysql>CREATE DATABASE keystone;
mysql>GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIEDBY 'KEYSTONE_DBPASS';
mysql>GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIEDBY 'KEYSTONE_DBPASS';
mysql>exit
为identity服务创建数据库表
#su –s /bin/sh –c “keystone-manage db_sync” keystone
定义一个授权令牌(作为一个共享密钥),在identity服务和其他Openstack服务之间通信所用的共享密钥。使用openssl去产生一个随机的令牌和存储它到配置文件中。
# ADMIN_TOKEN=$(openssl rand -hex 10)
# echo $ADMIN_TOKEN
# openstack-config --set /etc/keystone/keystone.confDEFAULT \
admin_token $ADMIN_TOKEN
默认,keystone使用PKI令牌。创建签名key和认证和授权的访问到产生的数据中
# keystone-manage pki_setup --keystone-user keystone--keystone-group
keystone
# chown -R keystone:keystone /etc/keystone/ssl
# chmod -R o-rwx /etc/keystone/ssl
启动识别服务和设置为自启动
#service openstack-keystone start
#chkconfig openstack-keystone on
默认,识别服务存储过期的令牌到数据库中(不定期的)。我们推荐配置一个周期任务使用cron去清除过期的令牌(以小时计)。
运行以下命令去清空过期的令牌每小时,且记录输出到/var/log/keystone/keystone-tokenflush.log
#(crontab –l –u keystone 2>&1 | grep –q token-flush)|| \
echo '@hourly /usr/bin/keystone-manage token_flush>/var/log/keystone/
keystone-tokenflush.log 2>&1' >>/var/spool/cron/keystone
定义用户,tenants和角色
安装identity服务之后,设置users,tenants,角色去认证。这些被用于去允许访问服务。
一般情况下,你将需要一个用户和密码去认证identity服务。如果你没有创建任何用户,你将不得不使用认证令牌(前步中创建的令牌)。你也可以使用—os-token选项跳过或者设置OS_SERVICE_TOKEN环境变量。
$export OS_SERVICE_TOKEN=ADMIN_TOKEN
$exportOS_SERVICE_ENDPOINT=http://controller:35357/v2.0
创建一个管理员
使用以下步骤去创建一个管理员用户,角色和tenant。你将使用这个账户来与OpenStack云进行管理交互操作。
默认,识别服务创建一个特别的_member_角色。OpenStack仪表板自动授权访问给具有这个角色的用户。你可以给admin用户把该角色给其他的admin角色。
注意:你创建的任何角色必须映射给指定的角色(在policy.json文件中)包含在每一个OpenStack服务中。大多数的服务的默认的策略文件授权管理员访问给admin角色。
创建admin用户
$ keystone user-create --name=admin--pass=ADMIN_PASS --email=ADMIN_EMAIL
用实际的密码和email替代对应的ADMIN_PASS,ADMIN_EMAIL
创建admin角色
$ keystone role-create --name=admin
创建admin tenant
$ keystone tenant-create --name=admin--description="Admin Tenant"
你必须使用user-role-add将admin用户,角色,tenant链接在一起
$ keystone user-role-add --user=admin--tenant=admin --role=admin
连接admin用户,_member_角色,admin tenant:
$ keystone user-role-add --user=admin--role=_member_ --tenant=admin
创建一个普通用户
使用以下步骤去创建一个普通用户,tenant,连接他们打哦特定的_member_角色。你将使用这个账户进行日常非管理的交互操作(与云)。你也可以使用这个步骤去创建其他的云用户(使用不同的用户名和密码)。当创建这些用户的时候提过tenant创建步骤。
创建demo用户
$ keystone user-create --name=demo--pass=DEMO_PASS--email=DEMO_EMAIL
创建demo tenant
$ keystone tenant-create --name=demo--description="Demo Tenant"
连接demo用户,_member_角色和demo tenant
$ keystone user-role-add --user=demo --role=_member_--tenant=demo
创建一个服务tenant
OpenStack服务在访问其他的OpenStack服务时,也要求一个用户名,tenant,角色。在基本的安装中,OpenStack服务通常共享一个service(名字叫service) tenant。当然你也可以创建其他的用户名和角色(一旦你安装和配置每一个服务时)。
创建service tenant
$ keystonetenant-create --name=service --description="Service Tenant"
定义服务和API接口
为了Identity服务可以跟踪每个已安装的OpenStack服务,他们位于网络的位置,你必须注册在你OpenStack安装中的每个服务。为了注册服务,运行以下命令:
Keystone service-create描述服务
Keystone endpoint-create关联服务的API接口
你也必须注册identity服务本身。使用OS_SERVICE_TOKEN环境变量(与前面认证设置相同)。
为identity服务创建一个服务条目
$ keystoneservice-create --name=keystone --type=identity \
--description="OpenStackIdentity"
+-------------+----------------------------------+
| Property |Value |
+-------------+----------------------------------+
| description |OpenStack Identity |
| id |15c11a23667e427e91bc31335b45f4bd |
| name |keystone |
| type |identity |
|
|
通过使用返回的服务ID为identity服务指定一个API接口。当你制定一个接口,你提供URL给公共的API,内部的API和管理API。在这个向导中,controller主机名被使用。注意identity服务使用一个不同端口(为管理api)
$keystone endpoint-create \
--service-id=$(keystoneservice-list | awk '/ identity / {print $2}') \
--publicurl=http://controller:5000/v2.0\
--internalurl=http://controller:5000/v2.0\
--adminurl=http://controller:35357/v2.0
+-------------+-----------------------------------+
|Property | Value |
+-------------+-----------------------------------+
|adminurl | http://controller:35357/v2.0 |
| id |11f9c625a3b94a3f8e66bf4e5de2679f |
|internalurl | http://controller:5000/v2.0 |
|publicurl | http://controller:5000/v2.0 |
| region| regionOne |
|service_id | 15c11a23667e427e91bc31335b45f4bd |
+-------------+-----------------------------------+
注意:你需要为每一个添加到你的OpenStack环境中的服务创建一个额外的接口。
验证Identity服务的安装
验证Identity服务是否正确的安装和配置,清空OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT环境变量:
$unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
这些变量用于去注册identity服务,不再需要。
你现在可以使用合法的用户名的认证。
$ keystone --os-username=admin --os-password=ADMIN_PASS\
--os-auth-url=http://controller:35357/v2.0 token-get
在回应中,你接受到一个令牌对(对应你的用户ID),这验证了你的Identity服务运行在预期的接口上;你的用户账户被启用(用期望的凭证)
验证授权行为是预期的。在一个tenant上请求认证。
$ keystone --os-username=admin --os-password=ADMIN_PASS\
--os-tenant-name=admin --os-auth-url=http://controller:35357/v2.0 \
token-get
你也可以设置你的—os--*变量到你的环境变量中去简化命令行习惯。设置一个admin-openrc.sh文件(用admin凭证和admin接口)
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0
Source环境变量
Source admin-openrc.sh
验证你的admin-openrc.sh文件配置是正确的。运行相同的命令(不带—os-*)
$ keystone token-get
验证你的admin账户有权限执行管理命令
$keystone user-list
+----------------------------------+-------+---------+-------------------+
| id |name | enabled | email |
+----------------------------------+-------+---------+-------------------+
| afea5bde3be9413dbd60e479fddf9228 | admin | True |[email protected] |
|32aca1f9a47540c29d6988091f76c934 | demo | True | [email protected] |
+----------------------------------+-------+---------+-------------------
$ keystone user-role-list --user admin--tenant admin
+----------------------------------+----------+----------------------------------+----------------------------------+
| id | name | user_id
|tenant_id |
+----------------------------------+----------+----------------------------------+----------------------------------+
| 9fe2ff9ee4384b1894a90878d3e92bab |_member_ |
afea5bde3be9413dbd60e479fddf9228| e519b772cb43474582fa303da62559e5 |
| 5d3b60b66f1f438b80eaae41a77b5951 | admin|
afea5bde3be9413dbd60e479fddf9228 |e519b772cb43474582fa303da62559e5 |
+----------------------------------+----------+----------------------------------+----------------------------------+
看keystone user-list命令的输出中的id匹配keystone user-role-list命令的user_id,列出的admin角色以及与之关联的tenant,这也就验证了你的用户账户有admin角色。