验证Keystone服务

创建服务实体和 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 |
+------------+----------------------------------+

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
永久连接: http://www.nfvschool.cn/?p=194
标签:

发表评论