OpenStack系列二之认证服务Keystone

1.Keystone认证服务

Keystone是Identity Service认证服务的Alias。为一个架构组件或服务或抽象对象取别名或项目名,在我看来就是老外的一个代码组织习惯,尤其常见于开源项目。Openstack学习之路从认识每一个功能组件开始,当然这会引入许多可能陌生的概念,在学习的过程中认识、理解、Kill all this,这是将会非常有意思的事情。

官档:The OpenStack Identity service provides a single point of integration for managing authentication, authorization, and service catalog services. Other OpenStack services use the Identity service as a common unified API. Additionally, services that provide information about users but that are not included in OpenStack (such as LDAP services) can be integrated into a pre-existing infrastructure.
In order to benefit from the Identity service, other OpenStack services need to collaborate with it. When an OpenStack service receives a request from a user, it checks with the Identity service whether the user is authorized to make the request.

粗译:Openstack身份认证服务提供了一个整合管理身份认证、授权、服务目录point(Keystone组件基本就是围绕着这个point来展开)。其他的Openstack服务会使用Identity service的这个point来作为统一的API(这些API会被存放带一个服务目录中)。除此之外,Identity service还能够提供用户的相关信息,但这个信息并不会被包含在Openstack中,这些用户信息会被预先整合到一个基础架构中(例如LDAP service或SQL Database这些能够提供用户集中管理服务的组件)。
Identity service带来的好处在于,其他的Openstack需要通过Identity service来进行集中协调。当一个Openstack服务接收到一个用户的请求时,那么Openstack就会通过Identity service来检查这个用户是否有权限来发出这个请求。

**总而言之**Keystone这个子项目为Openstack通过了Account、Authentication、Authorization服务——简称3A。在安装OpenStack Identity service后,其他的OpenStack service必须要在Identity service中注册才能被使用。Identity可以追踪每一个OpenStack service的安装,并在系统网络中定位这个service的位置。

有了Identity service,Openstack就能够很好的对多个不同组件或者不同的用户进行协调和管理,在一个复杂的大型SOA软件系统中,需要Keystone这样的角色来支撑系统的松耦合架构设计。

Identity service功能列表

  • 身份认证(Authentication):令牌的发放和校验
  • 用户授权(Authorization):授予用户在一个服务中所拥有的权限
  • 用户管理(Account)
  • 服务目录(Service Catalog):包含可用服务的API point

身份服务包含这些组件:

  • 服务器
    一个中心化的服务器使用RESTful 接口来提供认证和授权服务。
  • 驱动
    驱动或服务后端被整合进集中式服务器中。它们被用来访问OpenStack外部仓库的身份信息, 并且它们可能已经存在于OpenStack被部署在的基础设施(例如,SQL数据库或LDAP服务器)中。
  • 模块
    中间件模块运行于使用身份认证服务的OpenStack组件的地址空间中。这些模块拦截服务请求,取出用户凭据,并将它们送入中央是服务器寻求授权。中间件模块和OpenStack组件间的整合使用Python Web服务器网关接口。

1.1Keystone认证服务中的概念

User(用户):一个People or System or Service在OpenStack中的数字表示。用于身份认证,也能够通过为登录到Openstack的用户分配令牌环,以此获得访问资源的权限。同一个用户可以被关联到给若干个租户,就像用户可以隶属于若干个不同的组。

Tenant(租户):一个资源或对象的抽象表示。租户可以包含多个用户,不同租户之间相互隔离。根据service运行的需求,租户可以映射为账户、组织、项目或服务。

Role(角色):可定制化的包含有特定用户权限的权限集合,可以关联到若干个User-Tenant对,来为User-Tenant对赋予权限。

Token(令牌):用于限定User-Tenant对进行OpenStack API和资源访问的字符串表示。一个临牌会持续一段时间有效,也可以随时撤销。

Credentials(凭证):用于确认用户身份的数据,例如:Username/Password

Authentication(检验):是确定用户身份的过程。

Service(服务):Openstack service,即Openstack中运行的组件服务。

Endpoint(端点):一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL。使用RESTful的设计思想,详见RESTful_URI资源 。

Keystone Client(Keystone CLI):Keystone的命令行工具,可以完成诸如创建用户,角色,服务和端点等绝大多数的Leystone管理功能,是非常常用的CLI接口。

2.OpenStack安装认证服务Keystone

2.1安装和配置

2.1.1先决条件

在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌。

1)完成下面的步骤以创建数据库:

  • 用数据库连接客户端以 root 用户连接到数据库服务器:
[root@controller ~]# mysql -uroot -p123456
  • 创建 keystone 数据库:
CREATE DATABASE keystone;
  • 对“keystone“数据库授予恰当的权限:
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
  IDENTIFIED BY 'KEYSTONE_DBPASS';
  • 退出数据库客户端。

2)生成一个随机值在初始的配置中作为管理员的令牌

openssl rand -hex 10   ##提供密码,不是必须的

2.1.2安装和配置Keystoen

1)运行以下命令来安装包。

[root@controller ~]# yum install openstack-keystone httpd mod_wsgi -y

2)编辑文件 /etc/keystone/keystone.conf 并完成如下动作:

cp /etc/keystone/keystone.conf{,.bak}
grep '^[a-Z\[]' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf
  • ``[DEFAULT]``部分,定义初始管理令牌的值:
[DEFAULT]
...
admin_token = ADMIN_TOKEN

使用前面步骤生成的随机数替换“ADMIN_TOKEN“ 值,不是必须的。

  • 在 [database] 部分,配置数据库访问:
[database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

将“KEYSTONE_DBPASS“替换为你为数据库选择的密码。

  • 在“[token]“部分,配置Fernet UUID令牌的提供者
[token]
...
provider = fernet

文件 /etc/keystone/keystone.conf的内容如下

[root@controller ~]# cat /etc/keystone/keystone.conf
[DEFAULT]
admin_token = ADMIN_TOKEN
[assignment]
[auth]
[cache]
[catalog]
[cors]
[cors.subdomain]
[credential]
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[domain_config]
[endpoint_filter]
[endpoint_policy]
[eventlet_server]
[eventlet_server_ssl]
[federation]
[fernet_tokens]
[identity]
[identity_mapping]
[kvs]
[ldap]
[matchmaker_redis]
[memcache]
[oauth1]
[os_inherit]
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[paste_deploy]
[policy]
[resource]
[revoke]
[role]
[saml]
[shadow_users]
[signing]
[ssl]
[token]
provider = fernet
[tokenless_auth]
[trust]
  • md5值如下
[root@controller ~]# md5sum /etc/keystone/keystone.conf
d5acb3db852fe3f247f4f872b051b7a9 /etc/keystone/keystone.conf

3)初始化身份认证服务的数据库,并检查数据库

初始化自动创建表

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@controller ~]# mysql -uroot -p123456 -e "use keystone;show tables;"
+------------------------+
| Tables_in_keystone     |
+------------------------+
| access_token           |
| assignment             |
| config_register        |
| consumer               |
| credential             |
| domain                 |
| endpoint               |
| endpoint_group         |
| federated_user         |
| federation_protocol    |
| group                  |
| id_mapping             |
| identity_provider      |
| idp_remote_ids         |
| implied_role           |
| local_user             |
| mapping                |
| migrate_version        |
| password               |
| policy                 |
| policy_association     |
| project                |
| project_endpoint       |
| project_endpoint_group |
| region                 |
| request_token          |
| revocation_event       |
| role                   |
| sensitive_config       |
| service                |
| service_provider       |
| token                  |
| trust                  |
| trust_role             |
| user                   |
| user_group_membership  |
| whitelisted_config     |
+------------------------+

4)初始化Fernet keys:

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
#检查是否成功
[root@controller ~]# ls /etc/keystone/fernet-keys/ #是否有这个目录
0 1

3.配置 Apache HTTP 服务器

1)编辑“/etc/httpd/conf/httpd.conf“ 文件,配置“ServerName“ 选项为控制节点:

[root@controller ~]# sed -i '95a ServerName controller' /etc/httpd/conf/httpd.conf

2)用下面的内容创建文件 /etc/httpd/conf.d/wsgi-keystone.conf

[root@controller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

3.1完成安装

  • 启动 Apache HTTP 服务并配置其随系统启动:
[root@controller ~]# systemctl enable httpd.service
[root@controller ~]# systemctl start httpd.service
  • 检查keystone相关配置5000服务调用端口,35357管理端口
[root@controller ~]# netstat -lntp|grep "httpd"
tcp6         0         0 :::5000         :::*          LISTEN         22171/httpd 
tcp6         0         0 :::80           :::*          LISTEN         22171/httpd 
tcp6         0         0 :::35357        :::*          LISTEN         22171/httpd

4.创建服务实体和API端点

身份认证服务提供服务的目录和他们的位置。每个你添加到OpenStack环境中的服务在目录中需要一个 service 实体和一些 API endpoints

4.1先决条件

默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。你必须使用:doc:keystone-install 章节中为身份认证服务创建的临时身份验证令牌用来初始化的服务实体和API端点。

你必须使用“os-token“参数将认证令牌的值传递给:command:openstack 命令。类似的,你必须使用“–os-url“ 参数将身份认证服务的 URL传递给 openstack 命令或者设置OS_URL环境变量。本指南使用环境变量以缩短命令行的长度。

1)配置认证令牌:

[root@controller ~]# export OS_TOKEN=ADMIN_TOKEN

将“ADMIN_TOKEN“替换为你在 :doc:`keystone-install`章节中生成的认证令牌。例如:

#如果之前使用openssl产生的随机数那么使用如下命令
$ export OS_TOKEN=294a4c8a8a475f9b9836

2)配置端点URL:

[root@controller ~]# export OS_URL=http://controller:35357/v3

3)配置认证 API 版本:

[root@controller ~]# export OS_IDENTITY_API_VERSION=3

补充上述命令快速执行通道

export OS_TOKEN=ADMIN_TOKEN
export OS_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3

4)检查是否成功

[root@controller ~]# env|grep OS
HOSTNAME=controller
OS_IDENTITY_API_VERSION=3
OS_TOKEN=ADMIN_TOKEN
OS_URL=http://controller:35357/v3

4.2开始创建服务实体和API端点

1)在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。

创建服务实体和身份认证服务:

[root@controller ~]# openstack service create \
 --name keystone --description "OpenStack Identity" identity
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Identity               |
| enabled     | True                             |
| id          | bf3be01318d24c3aba709844bb7de4fb |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+

2)身份认证服务管理了一个与您环境相关的 API 端点的目录。服务使用这个目录来决定如何与您环境中的其他服务进行通信。

OpenStack使用三个API端点变种代表每种服务:admin,internal和public。默认情况下,管理API端点允许修改用户和租户而公共和内部APIs不允许这些操作。在生产环境中,处于安全原因,变种为了服务不同类型的用户可能驻留在单独的网络上。对实例而言,公共API网络为了让顾客管理他们自己的云在互联网上是可见的。管理API网络在管理云基础设施的组织中操作也是有所限制的。内部API网络可能会被限制在包含OpenStack服务的主机上。此外,OpenStack支持可伸缩性的多区域。为了简单起见,本指南为所有端点变种和默认“RegionOne“区域都使用管理网络。

创建认证服务的 API 端点:

[root@controller ~]# openstack endpoint create --region RegionOne \
 identity public http://controller:5000/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 56499eb404fa4d7fbc26c5f4506289d7 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bf3be01318d24c3aba709844bb7de4fb |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v3        |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne \
 identity internal http://controller:5000/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | e50e7a9aac1047e187720be3dc447bde |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bf3be01318d24c3aba709844bb7de4fb |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v3        |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne \
 identity admin http://controller:35357/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | fc7d265a36f6482d99ab917e82ec6ec2 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | bf3be01318d24c3aba709844bb7de4fb |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:35357/v3       |
+--------------+----------------------------------+

3)验证是否成功

[root@controller ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                        |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
| 56499eb404fa4d7fbc26c5f4506289d7 | RegionOne | keystone     | identity     | True    | public    | http://controller:5000/v3  |
| e50e7a9aac1047e187720be3dc447bde | RegionOne | keystone     | identity     | True    | internal  | http://controller:5000/v3  |
| fc7d265a36f6482d99ab917e82ec6ec2 | RegionOne | keystone     | identity     | True    | admin     | http://controller:35357/v3 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+

#补充说明,删除命令
openstack endpoint delete +ID 
如果需要删除service需要删除endpoint,重新创建

5.创建域、项目、用户和角色

OpenStack支持多用户,用户里面再去分不同的域,不同的域下面还有项目

身份认证服务为每个OpenStack服务提供认证服务。认证服务使用 T domains, projects (tenants), :term:`users<user>`和 :term:`roles<role>`的组合。

1)创建域“default“:

[root@controller ~]# openstack domain create --description "Default Domain" default
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Default Domain                   |
| enabled     | True                             |
| id          | 30c495cbb6e145cd9e70ffb825c0c710 |
| name        | default                          |
+-------------+----------------------------------+

2)在你的环境中,为进行管理操作,创建管理的项目、用户和角色:

  • 创建 admin 项目:
[root@controller ~]# openstack project create --domain default \
 --description "Admin Project" admin
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Admin Project                    |
| domain_id   | 30c495cbb6e145cd9e70ffb825c0c710 |
| enabled     | True                             |
| id          | 61cd0cf561bb47fdbfc903f6fb53e623 |
| is_domain   | False                            |
| name        | admin                            |
| parent_id   | 30c495cbb6e145cd9e70ffb825c0c710 |
+-------------+----------------------------------+
  • 创建 admin 用户:
#非交互式创建admin用户
[root@controller ~]# openstack user create --domain default --password ADMIN_PASS admin
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 30c495cbb6e145cd9e70ffb825c0c710 |
| enabled   | True                             |
| id        | 80f3ce85301d43e3b653c0c3e05b4c61 |
| name      | admin                            |
+-----------+----------------------------------+
  • 创建 admin 角色:
[root@controller ~]# openstack role create admin
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 6ad97cd5fbc3476a98f8ccc7835a7217 |
| name      | admin                            |
+-----------+----------------------------------+
  • 添加“admin“ 角色到 admin 项目和用户上:
[root@controller ~]# openstack role add --project admin --user admin admin

3)验证是否成功

openstack user list
openstack domain list
openstack project list
openstack role list
  • 显示结果如下
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 80f3ce85301d43e3b653c0c3e05b4c61 | admin |
+----------------------------------+-------+
[root@controller ~]# openstack domain list
+----------------------------------+---------+---------+----------------+
| ID                               | Name    | Enabled | Description    |
+----------------------------------+---------+---------+----------------+
| 30c495cbb6e145cd9e70ffb825c0c710 | default | True    | Default Domain |
+----------------------------------+---------+---------+----------------+
[root@controller ~]# openstack project list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 61cd0cf561bb47fdbfc903f6fb53e623 | admin |
+----------------------------------+-------+
[root@controller ~]# openstack role list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 6ad97cd5fbc3476a98f8ccc7835a7217 | admin |
+----------------------------------+-------+

4)创建server服务项目

本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建“service“项目:

[root@controller ~]# openstack project create --domain default \
 --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | 30c495cbb6e145cd9e70ffb825c0c710 |
| enabled     | True                             |
| id          | c8d7342336c4480f87243d4206fb8304 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | 30c495cbb6e145cd9e70ffb825c0c710 |
+-------------+----------------------------------+

5)常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。

  • 创建“demo“ 项目:
[root@controller ~]# openstack project create --domain default \
 --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | 30c495cbb6e145cd9e70ffb825c0c710 |
| enabled     | True                             |
| id          | 52f15bb8a62f4d31b39e834dd7906f05 |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | 30c495cbb6e145cd9e70ffb825c0c710 |
+-------------+----------------------------------+
  • 创建“demo“ 用户:
[root@controller ~]# openstack user create --domain default --password DEMO_PASS demo
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 30c495cbb6e145cd9e70ffb825c0c710 |
| enabled   | True                             |
| id        | 1273330670a44844b1726a0d49d16ebf |
| name      | demo                             |
+-----------+----------------------------------+
  • 创建 user 角色:
[root@controller ~]# openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | b1c08a167bb44527b6db7b7a17102c8e |
| name      | user                             |
+-----------+----------------------------------+
  • 添加 user``角色到 ``demo 项目和用户:
[root@controller ~]# openstack role add --project demo --user demo user
  • 验证服务
openstack user list
openstack project list
openstack role list
  • 验证结果内容如下
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 1273330670a44844b1726a0d49d16ebf | demo  |
| 80f3ce85301d43e3b653c0c3e05b4c61 | admin |
+----------------------------------+-------+
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 52f15bb8a62f4d31b39e834dd7906f05 | demo    |
| 61cd0cf561bb47fdbfc903f6fb53e623 | admin   |
| c8d7342336c4480f87243d4206fb8304 | service |
+----------------------------------+---------+
[root@controller ~]# openstack role list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 6ad97cd5fbc3476a98f8ccc7835a7217 | admin |
| b1c08a167bb44527b6db7b7a17102c8e | user  |
+----------------------------------+-------+
[root@controller ~]# openstack domain list
+----------------------------------+---------+---------+----------------+
| ID                               | Name    | Enabled | Description    |
+----------------------------------+---------+---------+----------------+
| 30c495cbb6e145cd9e70ffb825c0c710 | default | True    | Default Domain |
+----------------------------------+---------+---------+----------------+

6.验证操作

在安装其他服务之前确认身份认证服务的操作

1)因为安全性的原因,关闭临时认证令牌机制:

编辑 /etc/keystone/keystone-paste.ini 文件,从“[pipeline:public_api]“,[pipeline:admin_api]“和“[pipeline:api_v3]“部分删除“admin_token_auth 。

此步骤暂时不用执行

2)重置“OS_TOKEN“和“OS_URL“ 环境变量:

[root@controller ~]# unset OS_TOKEN OS_URL

3)作为 admin 用户,请求认证令牌:

[root@controller ~]# openstack --os-auth-url http://controller:35357/v3 \
 --os-project-domain-name default --os-user-domain-name default \
 --os-project-name admin --os-username admin token issue
Password: ADMIN_PASS
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                        |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2018-07-17T00:03:10.000000Z                                                                                                                  |
| id         | gAAAAABbTSQukz2j4O7bKCAeY26-y6adu8OnDj5XowfJ2JxVUdKO_9WMC0kmVrhs8frNQeBd_iE9sfmAFzO7FUX_QIZUWZJ3VCa-                                         |
|            | 0DRCFoK3DpZyxRxVFLFqT4VHwXYnpgf9LtTB3BThxzG1p1xSb2i1P2j2R1mOE_tm6CUuES6U9po1ENbqAXk                                                          |
| project_id | 61cd0cf561bb47fdbfc903f6fb53e623                                                                                                             |
| user_id    | 80f3ce85301d43e3b653c0c3e05b4c61                                                                                                             |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------

4)作为“demo“ 用户,请求认证令牌:

[root@controller ~]# openstack --os-auth-url http://controller:5000/v3 \
 --os-project-domain-name default --os-user-domain-name default \
 --os-project-name demo --os-username demo token issue
Password: DEMO_PASS
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                        |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2018-07-17T00:07:30.000000Z                                                                                                                  |
| id         | gAAAAABbTSUzpo9Z1Ze3KWnmQCwkbJwLuty7WaHAGu4A8mGfmTpfX7vd_Gl0TgARLXhi-mVWRFsSkegn66ZjJ-O5wbv8Fj4cVMr-                                         |
|            | L2HYh75RyyGPsOj3BvYMVRss5TxY7YGqXzKEsXUC9_bG2x4pfKpJEn4-kkaEaoX4YzkMTU4WcTIasOkVG-I                                                          |
| project_id | 52f15bb8a62f4d31b39e834dd7906f05                                                                                                             |
| user_id    | 1273330670a44844b1726a0d49d16ebf                                                                                                             |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+

7.创建 OpenStack 客户端环境脚本

使用环境变量来替代认证令牌的一些参数。

前一节中使用环境变量和命令选项的组合通过“openstack“客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件。这些脚本通常包含客户端所有常见的选项,当然也支持独特的选项。更多信息,请参考`OpenStack End User Guide <http://docs.openstack.org/user-guide/common/

7.1创建脚本

创建 admin 和 “demo“项目和用户创建客户端环境变量脚本。本指南的接下来的部分会引用这些脚本,为客户端操作加载合适的的凭证。

1)编辑文件 admin-openrc 并添加如下内容:

[root@controller ~]# vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

将 ADMIN_PASS 替换为你在认证服务中为 admin 用户选择的密码

2)编辑文件 demo-openrc并添加如下内容:

[root@controller ~]# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

将 DEMO_PASS 替换为你在认证服务中为 demo 用户选择的密码。

7.2使用脚本进行验证

使用特定租户和用户运行客户端,你可以在运行之前简单地加载相关客户端脚本。例如:

1)加载“admin-openrc“文件来身份认证服务的环境变量位置和“admin“项目和用户证书:

[root@controller ~]# source admin-openrc 
#加载的环境变量
[root@controller ~]# env|grep OS
HOSTNAME=controller
OS_USER_DOMAIN_NAME=default
OS_IMAGE_API_VERSION=2
OS_PROJECT_NAME=admin
OS_IDENTITY_API_VERSION=3
OS_PASSWORD=ADMIN_PASS
OS_AUTH_URL=http://controller:35357/v3
OS_USERNAME=admin
OS_PROJECT_DOMAIN_NAME=default
#请求认证令牌不需要密码执行
[root@controller ~]# openstack token issue
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                        |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2018-07-17T00:40:49.000000Z                                                                                                                  |
| id         | gAAAAABbTS0CHOh31nBsM2rbq6Tzpypb3oJm9KzYpf0NmY9VZhunWdNvD23hLEZvnO7gM8vPIZDz5KOBipNLyZEreFH_pTG75SmF2-z7qdx4nercFG5jd5iXh28AdPYM8sVBVt4Pv6Rh |
|            | WLXAAuPfVFcSWOp75ZejDfsuQ4bkzkxoRrY2ghmyAo4                                                                                                  |
| project_id | 61cd0cf561bb47fdbfc903f6fb53e623                                                                                                             |
| user_id    | 80f3ce85301d43e3b653c0c3e05b4c61                                                                                                             |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------+

 

1
如无特殊说明,文章均为本站原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到