创建服务实体和 API 端点
认证服务提供服务目录和位置。在目录中,您添加到OpenStack环境的每个服务需要一个服务实体和多个API端点。
配置前的准备
缺省情况下,认证服务数据库不包含支持通用的认证和目录服务的信息。您必须使用一个 “安装和配置”一节 中创建临时的认证令牌为认证服务初始化服务实体和API端点。
您必须使用–os-token 参数或设置OS_TOKEN环境变量传递认证令牌的值给命令openstack。类似的,您必须传递使用参数 –os-url 或设置OS_URL环境变量传递认证服务URL给命令openstack。本教程使用环境变量缩短命令行的长度。
[警告]
因为安全的原因,,除非做必须的认证服务初始化,不要长时间使用临时认证令牌。
配置认证令牌:
export OS_TOKEN=ADMIN_TOKEN
将其中的 ADMIN_TOKEN 替换为您在 “安装和配置”一节 中生成的管理员令牌。例如:
$ export OS_TOKEN=294a4c8a8a475f9b9836
配置端点URL:
export OS_URL=http://controller:35357/v2.0
创建服务实体和API端点
在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。
创建服务实体和身份认证服务:
openstack service create \ --name keystone --description "OpenStack Identity" identity +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Identity | | enabled | True | | id | 4ddaae90388b4ebc9d252ec2252d8d10 | | name | keystone | | type | identity | +-------------+----------------------------------+
[注意]
OpenStack 是动态生成 ID 的,因此您看到的输出会与示例中的命令行输出不相同。
身份认证服务管理了一个与您环境相关的 API 端点的目录。服务使用这个目录来决定如何与您环境中的其他服务进行通信。
OpenStack 为每个服务提供了三个 API 端点的值:admin、internal 和 public。admin API 端点默认允许修改用户和租户,而 public 和 internal API 不允许。在生产环境中,出于安全考虑,这些变量可能设置在服务于不同类型用户的隔离网络中。例如,public API 网络也许可以从外部云被管理工具访问到,admin API 网络会被保护,而 internal API 网络是连接到每台主机上的。而且,OpenStack 为了可扩展性,支持多个区域。简单来说,这个配置给所有端点变量和 regionOne 区域使用管理网络。
openstack endpoint create \ --publicurl http://controller:5000/v2.0 \ --internalurl http://controller:5000/v2.0 \ --adminurl http://controller:35357/v2.0 \ --region RegionOne identity +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | adminurl | http://controller:35357/v2.0 | | id | 4a9ffc04b8eb4848a49625a3df0170e5 | | internalurl | http://controller:5000/v2.0 | | publicurl | http://controller:5000/v2.0 | | region | RegionOne | | service_id | 4ddaae90388b4ebc9d252ec2252d8d10 | | service_name | keystone | | service_type | identity | +--------------+----------------------------------+
[注意]
在认证服务中,您添加到OpenStack环境的每个服务需要一个或多个服务实体和一个API端点。
创建项目(租户)、用户和角色
认证服务为每一个Openstack服务提供认证。认证服务使用domains, projects (tenants), users, 和roles的组合。
[注意]
为简单起见,默认使用 缺省 域。
1、在你的环境中,为进行管理操作,创建admin的项目、用户和角色:
a、创建 admin 项目:
openstack project create --description "Admin Project" admin +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Admin Project | | enabled | True | | id | cf12a15c5ea84b019aec3dc45580896b | | name | admin | +-------------+----------------------------------+
[注意]
OpenStack 是动态生成 ID 的,因此您看到的输出会与示例中的命令行输出不相同。
创建 admin 用户:
openstack user create --password-prompt admin User Password: Repeat User Password: +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | email | None | | enabled | True | | id | 4d411f2291f34941b30eef9bd797505a | | name | admin | | username | admin | +------------+----------------------------------+
b、创建 admin 角色:
openstack role create admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | cd2cb9a39e874ea69e5d4b896eb16128 | | name | admin | +-------+----------------------------------+
c、添加admin角色给admin项目和用户;
openstack role add --project admin --user admin admin +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | cd2cb9a39e874ea69e5d4b896eb16128 | | name | admin | +-------+----------------------------------+
[注意]
所有角色都会映射到某个Openstack服务所在文件夹的policy.json文件中,默认的规则下,admin 角色可以访问大多是服务,关于项目与用户管理了解更多信息.
2、本教程使用一个service项目,服务项目为每个添加到环境的服务包含一个唯一的用户
创建service项目
openstack project create --description "Service Project" service +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Service Project | | enabled | True | | id | 55cbd79c0c014c8a95534ebd16213ca1 | | name | service | +-------------+----------------------------------+
3、常规(非管理)任务应该使用一个非特权项目和用户。比如,本手册创建demo 项目和用户。
创建一个demo项目
openstack project create --description "Demo Project" demo +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Demo Project | | enabled | True | | id | ab8ea576c0574b6092bb99150449b2d3 | | name | demo | +-------------+----------------------------------+
创建 demo 用户:
openstack user create --password-prompt demo User Password: Repeat User Password: +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | email | None | | enabled | True | | id | 3a81e6c8103b46709ef8d141308d4c72 | | name | demo | | username | demo | +------------+----------------------------------+
创建user角色:
openstack role create user +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | 9fe2ff9ee4384b1894a90878d3e92bab | | name | user | +-------+----------------------------------+
添加user角色到 demo 项目和用户:
openstack role add --project demo --user demo user +-------+----------------------------------+ | Field | Value | +-------+----------------------------------+ | id | 9fe2ff9ee4384b1894a90878d3e92bab | | name | user | +-------+----------------------------------+
验证操作
在安装其他服务之前确认身份认证服务的操作。
因为安全性的原因,关闭临时认证令牌机制:
编辑文件/etc/keystone/keystone-paste.ini,从 [pipeline:public_api], [pipeline:admin_api], and [pipeline:api_v3]中移除admin_token_auth 。
取消临时的OS_TOKEN 和OS_URL 环境变量的设置:
unset OS_TOKEN OS_URL
作为admin用户,通过Identity2.0版API请求一个认证令牌:
openstack --os-auth-url http://controller:35357 \ --os-project-name admin --os-username admin --os-auth-type password \ token issue Password: +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | expires | 2015-03-24T18:55:01Z | | id | ff5ed908984c4a4190f584d826d75fed | | project_id | cf12a15c5ea84b019aec3dc45580896b | | user_id | 4d411f2291f34941b30eef9bd797505a | +------------+----------------------------------+
Identity 3.0版API增加了对包含项目与用户的域的支持。项目与用户可以再不同的域中使用相同的名字。因此,要使用3.0版的API,请求中至少必须显性包含 default 域或者是用户ID。为简化起见,本指南中显性指定default域,这样示例中可以使用用户名而不是ID。
openstack --os-auth-url http://controller:35357 \ --os-project-domain-id default --os-user-domain-id default \ --os-project-name admin --os-username admin --os-auth-type password \ token issue Password: +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | expires | 2015-03-24T18:55:01Z | | id | ff5ed908984c4a4190f584d826d75fed | | project_id | cf12a15c5ea84b019aec3dc45580896b | | user_id | 4d411f2291f34941b30eef9bd797505a | +------------+----------------------------------+
[注意]
上面命令使用admin用户的密码。
作为admin用户,列出各项目来验证admin用户可以执行限admin用户使用的命令行接口命令;
openstack --os-auth-url http://controller:35357 \ --os-project-name admin --os-username admin --os-auth-type password \ project list Password: +----------------------------------+---------+ | ID | Name | +----------------------------------+---------+ | 55cbd79c0c014c8a95534ebd16213ca1 | service | | ab8ea576c0574b6092bb99150449b2d3 | demo | | cf12a15c5ea84b019aec3dc45580896b | admin | +----------------------------------+---------+
作为admin用户,列出各用户来验证身份认证服务
openstack --os-auth-url http://controller:35357 \ --os-project-name admin --os-username admin --os-auth-type password \ user list Password: +----------------------------------+-------+ | ID | Name | +----------------------------------+-------+ | 4d411f2291f34941b30eef9bd797505a | admin | | 3a81e6c8103b46709ef8d141308d4c72 | demo | +----------------------------------+-------+
作为 the admin 用户,列出所有角色验证认证服务
openstack --os-auth-url http://controller:35357 \ --os-project-name admin --os-username admin --os-auth-type password \ role list Password: +----------------------------------+-------+ | ID | Name | +----------------------------------+-------+ | 9fe2ff9ee4384b1894a90878d3e92bab | user | | cd2cb9a39e874ea69e5d4b896eb16128 | admin | +----------------------------------+-------+
作为 demo用户,从认证3.0 AP请求一个认证令牌
openstack --os-auth-url http://controller:5000 \ --os-project-domain-id default --os-user-domain-id default \ --os-project-name demo --os-username demo --os-auth-type password \ token issue Password: +------------+----------------------------------+ | Property | Value | +------------+----------------------------------+ | expires | 2014-10-10T12:51:33Z | | id | 1b87ceae9e08411ba4a16e4dada04802 | | project_id | 4aa51bb942be4dd0ac0555d7591f80a6 | | user_id | 7004dfa0dda84d63aef81cf7f100af01 | +------------+----------------------------------+
作为demo 用户,尝试列出用户以验证它不能执行只有管理员能执行的命令行
openstack --os-auth-url http://controller:5000 \ --os-project-domain-id default --os-user-domain-id default \ --os-project-name demo --os-username demo --os-auth-type password \ user list Password: ERROR: openstack You are not authorized to perform the requested action, admin_required. (HTTP 403)
创建 OpenStack 客户端环境脚本
前面的操作都是通过命令参数传递一些认证与端点信息,为了使得操作更加方便高效,Openstack提供通过设置环境变量的方式传递这些信息。把这些环境变量写在一个脚本里面,就是所谓的openrc文件。
创建脚本
编辑 admin-openrc.sh 文件并添加下列内容
export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=admin export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_AUTH_URL=http://controller:35357/v3
将其中的 ADMIN_PASS 替换为您在身份认证服务中为 admin 用户设置的密码。
编辑 demo-openrc.sh 文件并添加下列内容:
export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=demo export OS_TENANT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v3
将其中的 DEMO_PASS 替换为您在身份认证服务中为 demo 用户设置的密码。
加载客户端环境脚本
使用特定租户和用户运行客户端,你可以在运行之前简单地加载相关客户端脚本。例如:
运行 admin-openrc.sh 脚本,配置认证服务的位置、admin 租户和用户凭证的环境变量:
source admin-openrc.sh
请求认证令牌:
openstack token issue +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | expires | 2015-03-25T01:45:49.950092Z | | id | cd4110152ac24bdeaa82e1443c910c36 | | project_id | cf12a15c5ea84b019aec3dc45580896b | | user_id | 4d411f2291f34941b30eef9bd797505a | +------------+----------------------------------+