juno版OpenStack部署流程--添加认证服务(keystone)(2)
2016-06-09 00:00
507 查看
摘要: OpenStack的认证服务模块是Keystone,它为所有OpenStack服务提供身份认证验证和授权,跟踪用户及权限,提供可用服务和API列表。
追踪用户和管理其权限;
提供可访问服务的目录,并提供服务的API端点(API endpoints)。
keystone中的一些基本概念简介
用户(User)
可使用OpenStack云服务的个人、系统或服务的数字化形象。(Digital representation of a person, system, or service who uses OpenStack cloud services. )
证书(Credentials)
用于确认用户身份的数据。
认证(Authentication)
确认一个用户身份的认证过程。
令牌(Token)
一段字母和数字组成的文本,用于访问OpenStack 的API和资源。
租户(Tenant)
一个用来分组或隔离资源的集合。租户还可以用来分组或隔离认证对象。根据不同的服务操作者,一个租户可以对应一个顾客、一个账户、一个组织或一个项目。(A container used to group or isolate resources. Tenants also group or isolate identity objects. Depending on the service operator, a tenant may map to a customer, account, organization, or project.)
服务(Service)
OpenStack的服务,用于Compute(nova),Object Storage(swift)或Image Service(glance)等。它为用户访问资源,实施运作提供了一个或多个端点(endpoint)。
端点(Endpoint)
一个可以通过网络来访问服务的地址,通常是一个URL地址。
角色 (Role)
一种定义好的拥有施行特定操作的权限的个人特征。
keystone客户端(Keystone Client)
一种用于OpenStack认证API的命令行交互界面。
##配置keystone所使用的数据库
使用root身份进入数据库(密码为安装数据库步骤时设立的):
CREATE DATABASE keystone;```
把keystone数据库的访问权限赋予名为keystone,来自任何主机地址的用户,并设定访问密码为KEYSTONE_DBPASS(替换为合适的密码):
[DEFAULT]
...
verbose = True```
在
[token]
...
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.sql.Token```
在
$ export OS_SERVICE_TOKEN=ADMIN_TOKEN```
将endpoint写入环境变量:
$ keystone tenant-create --name admin --description "Admin Tenant"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Admin Tenant |
| enabled | True |
| id | e8cda8def37b4d32b765759f1faa5ed2 |
| name | admin |
+-------------+----------------------------------+
$ keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| email | admin@example.com |
| enabled | True |
| id | 13b460ca8d9e4aa094e8f4f4fff6f087 |
| name | admin |
| username | admin |
+----------+----------------------------------+```
用合适的密码代替ADMIN_PASS。
创建
$ keystone user-role-add --user admin --tenant admin --role admin```
这条命令不会产生输出显示。
创建拥有特定权限的demo租户,demo用户
创建demo租户:
keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| email | demo@example.com |
| enabled | True |
| id | 2a6e8190e26c4f27ba98171235a8b219 |
| name | demo |
| tenantId | ef5783a270d84bb880a2c6fb85eac651 |
| username | demo |
+----------+----------------------------------+```
用合适的密码代替DEMO_PASS
创建
$ keystone service-create --name keystone --type identity
--description "OpenStack Identity"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | d7bbd538857b4caa9f7f9730a74b98ca |
| name | keystone |
| type | identity |
+-------------+----------------------------------+```
创建服务API端点
认证服务会将OpenStack环境中每个服务对应的API端点登记在目录中,这个目录将用来支持各个服务之间的通信。
创建认证服务的API端点:
$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT```
以
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 tenant-list
+----------------------------------+---------+---------+
| id | name | enabled |
+----------------------------------+---------+---------+
| 4f7806287c9a437e9cd912504ff71727 | admin | True |
| d1f7caccc65840b68258997a759da07f | demo | True |
| 5ab4d5c513f543cfbf8e3be97f5df5fb | service | True |
+----------------------------------+---------+---------+
admin```用户密码。
以
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 role-list
+----------------------------------+----------+
| id | name |
+----------------------------------+----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | member |
| 61286483662e40ba8f0a48b05fc8a451 | admin |
+----------------------------------+----------+
admin```用户密码。其中_member_的来历如下,在创建用户时:Using the --tenant option automatically assigns the member role to a user. This option will also create the member role if it does not exist.(创建时使用的命令为keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS)
以
$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS
--os-auth-url http://controller:35357/v2.0 user-list
You are not authorized to perform the requested action: admin_required (HTTP 403)```
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v2.0
demo```用户密码。
**注:**端口35357是为拥有管理权限的操作准备的,端口5000是为普通用户操作准备的。
keystone简介
keystone主要为了实现以下关键功能:追踪用户和管理其权限;
提供可访问服务的目录,并提供服务的API端点(API endpoints)。
keystone中的一些基本概念简介
用户(User)
可使用OpenStack云服务的个人、系统或服务的数字化形象。(Digital representation of a person, system, or service who uses OpenStack cloud services. )
证书(Credentials)
用于确认用户身份的数据。
认证(Authentication)
确认一个用户身份的认证过程。
令牌(Token)
一段字母和数字组成的文本,用于访问OpenStack 的API和资源。
租户(Tenant)
一个用来分组或隔离资源的集合。租户还可以用来分组或隔离认证对象。根据不同的服务操作者,一个租户可以对应一个顾客、一个账户、一个组织或一个项目。(A container used to group or isolate resources. Tenants also group or isolate identity objects. Depending on the service operator, a tenant may map to a customer, account, organization, or project.)
服务(Service)
OpenStack的服务,用于Compute(nova),Object Storage(swift)或Image Service(glance)等。它为用户访问资源,实施运作提供了一个或多个端点(endpoint)。
端点(Endpoint)
一个可以通过网络来访问服务的地址,通常是一个URL地址。
角色 (Role)
一种定义好的拥有施行特定操作的权限的个人特征。
keystone客户端(Keystone Client)
一种用于OpenStack认证API的命令行交互界面。
安装和配置
keystone服务安装在controller节点上。##配置keystone所使用的数据库
使用root身份进入数据库(密码为安装数据库步骤时设立的):
$ mysql -u root -p``` 进入数据库界面后创建属于keystone的数据库:
CREATE DATABASE keystone;```
把keystone数据库的访问权限赋予名为keystone,来自任何主机地址的用户,并设定访问密码为KEYSTONE_DBPASS(替换为合适的密码):
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';``` 可以把KEYSTONE_DBPASS变更为合适的密码。 退出数据库客户端。 ## 安装配置组件 1. 安装keystone包:
apt-get install keystone python-keystoneclient```
编辑```vi /etc/keystone/keystone.conf```文件:
在[DEFAULT]部分,定义initial administration token:
[DEFAULT] ... admin_token = ADMIN_TOKEN``` 其中替换ADMIN_TOKEN为合适的值,可以通过``` # openssl rand -hex 10```来生成。 继续在``` [DEFAULT]```部分开启“输出详细记录日志”的选项:
[DEFAULT]
...
verbose = True```
在
[database]部分,设定数据库访问选项:
[database] ... connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone``` 把KEYSTONE_DBPASS替换为创建keystone数据库时所授权的密码。配置默认使用SQL的数据库连接,需要注释掉或删除。 在``` [token]```部分,配置UUID token provider和SQL driver:
[token]
...
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.sql.Token```
在
[revoke]部分,配置SQL revocation driver:
[revoke] ... driver = keystone.contrib.revoke.backends.sql.Revoke``` 同步认证服务数据库:
keystone-manage db_sync```
完成最后的安装
重启认证服务:# service keystone restart``` 默认Ubuntu会产生SQLite数据库,可以将其删除:
rm -f /var/lib/keystone/keystone.db```
默认情况下,认证服务会无限量地存储过期的token,这将导致数据库占用空间大幅度增加而且会降低认证服务的性能,用以下命令可以定期清除过期的token:# (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/crontabs/keystone``` # 创建租户,用户和角色 ## 配置所需的环境变量 在使用keystone命令操作前,需要先使用临时的administration token(即在``` /etc/keystone/keystone.conf```文件中设定的ADMIN_TOKEN),并手动配置认证服务的地址(endpoint)。 将administration token写入环境变量:
$ export OS_SERVICE_TOKEN=ADMIN_TOKEN```
将endpoint写入环境变量:
$ export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0``` ## 创建租户,用户和角色 1. 创建拥有管理操作职能的管理租户,管理用户和管理角色。 创建``` admin```租户:
$ keystone tenant-create --name admin --description "Admin Tenant"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Admin Tenant |
| enabled | True |
| id | e8cda8def37b4d32b765759f1faa5ed2 |
| name | admin |
+-------------+----------------------------------+
创建``` admin```用户:
$ keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| email | admin@example.com |
| enabled | True |
| id | 13b460ca8d9e4aa094e8f4f4fff6f087 |
| name | admin |
| username | admin |
+----------+----------------------------------+```
用合适的密码代替ADMIN_PASS。
创建
admin角色:
$ keystone role-create --name admin +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | id | 2bf07853b40b420eb9e9e2aa23ff3e9e | | name | admin | +----------+----------------------------------+``` 将``` admin```角色赋予给``` admin```租户和``` admin```用户。
$ keystone user-role-add --user admin --tenant admin --role admin```
这条命令不会产生输出显示。
创建拥有特定权限的demo租户,demo用户
创建demo租户:
$ keystone tenant-create --name demo --description "Demo Tenant" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Demo Tenant | | enabled | True | | id | ef5783a270d84bb880a2c6fb85eac651 | | name | demo | +-------------+----------------------------------+``` 创建属于``` demo```租户的``` demo```用户
keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| email | demo@example.com |
| enabled | True |
| id | 2a6e8190e26c4f27ba98171235a8b219 |
| name | demo |
| tenantId | ef5783a270d84bb880a2c6fb85eac651 |
| username | demo |
+----------+----------------------------------+```
用合适的密码代替DEMO_PASS
OpenStack服务的配置方案
OpenStack的服务都需要被赋予租户,用户和角色的性质来与其他服务进行交互。每个服务都需要创建一个或多个独立的用户,这个用户被赋予admin角色,并且属于
service租户下。
创建
service租户:
$ keystone tenant-create --name service --description "Service Tenant" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Service Tenant | | enabled | True | | id | e4288b01bc084a29ad6133f882a58732 | | name | service | +-------------+----------------------------------+``` # 创建服务实体和API端点(service entity and API endpoint) ## 配置所需的环境变量 具体操作如上一步骤所述。 ## 创建服务实体和API端点 1. 创建服务实体 认证服务会将OpenStack环境中的所有服务登记在目录中,所有服务都通过这个目录来定位环境中的其他服务。 创建认证服务的服务实体:
$ keystone service-create --name keystone --type identity
--description "OpenStack Identity"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | d7bbd538857b4caa9f7f9730a74b98ca |
| name | keystone |
| type | identity |
+-------------+----------------------------------+```
创建服务API端点
认证服务会将OpenStack环境中每个服务对应的API端点登记在目录中,这个目录将用来支持各个服务之间的通信。
创建认证服务的API端点:
$ keystone endpoint-create \ --service-id $(keystone service-list | awk '/ identity / {print $2}') \ --publicurl http://controller:5000/v2.0 \ --internalurl http://controller:5000/v2.0 \ --adminurl http://controller:35357/v2.0 \ --region regionOne +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | adminurl | http://controller:35357/v2.0 | | id | 32fb8b8934024c30bd1f0b7795a51220 | | internalurl | http://controller:5000/v2.0 | | publicurl | http://controller:5000/v2.0 | | region | regionOne | | service_id | d7bbd538857b4caa9f7f9730a74b98ca | +-------------+----------------------------------+``` # 验证操作 1. 复位环境变量:
$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT```
以
admin租户和用户的身份,请求一条authentication token:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \ --os-auth-url http://controller:35357/v2.0 token-get +-----------+----------------------------------+ | Property | Value | +-----------+----------------------------------+ | expires | 2015-11-24T12:37:45Z | | id | 1d5ebdf4e60a4f648240a20a65cbf96e | | tenant_id | 4f7806287c9a437e9cd912504ff71727 | | user_id | fd151acb7cc34bba8d4d9cf391ad0d06 | +-----------+----------------------------------+``` ADMIN_PASS为之前设定的``` admin```用户密码。 3. 以``` admin```租户和用户的身份,列出租户清单:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 tenant-list
+----------------------------------+---------+---------+
| id | name | enabled |
+----------------------------------+---------+---------+
| 4f7806287c9a437e9cd912504ff71727 | admin | True |
| d1f7caccc65840b68258997a759da07f | demo | True |
| 5ab4d5c513f543cfbf8e3be97f5df5fb | service | True |
+----------------------------------+---------+---------+
ADMIN_PASS为之前设定的
admin```用户密码。
以
admin租户和用户的身份,列出用户清单:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \ --os-auth-url http://controller:35357/v2.0 user-list +----------------------------------+-------+---------+-------------------+ | id | name | enabled | email | +----------------------------------+-------+---------+-------------------+ | fd151acb7cc34bba8d4d9cf391ad0d06 | admin | True | admin@example.com | | 812116bcca5b4a01981669fcef09ee11 | demo | True | demo@example.com | +----------------------------------+-------+---------+-------------------+``` ADMIN_PASS为之前设定的``` admin```用户密码。 5. 以``` admin```租户和用户的身份,列出角色清单:
$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS
--os-auth-url http://controller:35357/v2.0 role-list
+----------------------------------+----------+
| id | name |
+----------------------------------+----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | member |
| 61286483662e40ba8f0a48b05fc8a451 | admin |
+----------------------------------+----------+
ADMIN_PASS为之前设定的
admin```用户密码。其中_member_的来历如下,在创建用户时:Using the --tenant option automatically assigns the member role to a user. This option will also create the member role if it does not exist.(创建时使用的命令为keystone user-create --name demo --tenant demo --pass DEMO_PASS --email EMAIL_ADDRESS)
以
demo租户和用户的身份,请求一条authentication token:
$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS \ --os-auth-url http://controller:35357/v2.0 token-get +-----------+----------------------------------+ | Property | Value | +-----------+----------------------------------+ | expires | 2015-11-24T13:06:04Z | | id | 9eca8d1dff374c2da6f358e85f0b60af | | tenant_id | d1f7caccc65840b68258997a759da07f | | user_id | 812116bcca5b4a01981669fcef09ee11 | +-----------+----------------------------------+``` DEMO_PASS为之前设定的``` demo```用户密码。 7. 以``` demo```租户和用户的身份,验证无法执行``` admin```专属命令:
$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS
--os-auth-url http://controller:35357/v2.0 user-list
You are not authorized to perform the requested action: admin_required (HTTP 403)```
创建OpenStack客户端环境脚本
创建脚本
创建文件admin-openrc.sh,并输入以下内容:
export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_AUTH_URL=http://controller:35357/v2.0``` ADMIN_PASS为之前设定的``` admin```用户密码。 2. 创建文件``` demo-openrc.sh```,并输入以下内容:
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v2.0
DEMO_PASS为之前设定的
demo```用户密码。
**注:**端口35357是为拥有管理权限的操作准备的,端口5000是为普通用户操作准备的。
启动客户端环境脚本
根据不同租户和用户,执行$ source admin-openrc.sh或
$ source demo-openrc.sh。
安装时出现的问题及解决方法
安装完keystone后,创建"Admin Tenant"时出现“Unable to establish connection to http://controller:35357/v2.0/tenants”的错误,可能是安装keystone时未完整安装,重新安装并更新。在验证步骤时出现(HTTP 401),有可能是密码等配置错误,导致访问权限受限,重新检查配置文件和各个用户的密码情况。相关文章推荐
- 简单易懂云计算(转自天涯感谢原楼主iamsatisfied)
- XP下使用虚拟机安装配置Solaris[多图]
- VirtualBox虚拟机XP与宿主机Ubuntu互访共享文件夹
- 2011云计算知识库:盘点千奇百怪的云名称
- Linux下三大免费桌面虚拟机评测
- openstack kilo-with-dokcer
- 当存储无可用空间时无法启动虚拟机
- Windows 8虚拟机不能全屏的解决方法
- 使用VMware Workstation虚拟机保护数据
- 用 GNOME Boxes 下载一个操作系统镜像
- 什么是OpenStack 开源的云计算管理平台项目
- android 使用虚拟机安装apk(图文教程)
- Vmware虚拟机的安装及配置方法
- 深入解析java虚拟机
- Java虚拟机JVM性能优化(二):编译器
- 如何配置Apache服务器中的虚拟机
- apache虚拟机配置步骤和修改访问端口的方法(虚拟机端口映射)
- unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)