OpenStack keystone组件详解

1.keystone简介

 Keystone是 OpenStack中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone来处理。Keystone类似一个服务总线,其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身份验证,来获得目标服务的Endpoint来找到目标服务。

2.keystone基本概念


用户与认证
管理用户以及进行 Authentication(认证)和 Authorization(鉴权)
服务目录
维护 OpenStack Services 的 Endpoint,为每个组件服务提供一个可用的服务目录和相应的API入口端点。

下图是一个简单认证流程:
这里写图片描述
下图是一个的详细认证流程:
这里写图片描述

2.1 Authentication认证

 Authentication 是 Keystone 验证 User 身份的过程,认证User 访问 OpenStack 时向 Keystone 提交用户名和密码形式的 Credentials,Keystone 验证通过后会给 User 签发一个 Token 作为后续访问的 Credential。

2.2 Credentials证书、凭证

 Credentials 是 User 用来证明自己身份的信息。例如,用户名和密码, 用户名和API key,或Identity服务提供的身份验证令牌token。credentials示意图:
这里写图片描述

2.3 Domain域

 Identity Service API v3实体。域是项目和用户的集合,用于定义管理身份实体的管理边界。域可以代表个人,公司或运营商拥有的空间。它们直接向系统用户公开管理活动。可以为用户授予域的管理员角色。域管理员可以在域中创建项目,用户和组,并将角色分配给域中的用户和组。

2.4 Endpoint

 Endpoint 是一个网络上可访问的地址,通常是一个 URL,Service 通过 Endpoint 暴露自己的 API。
可以使用下面的命令来查看 Endpoint:

[root@controller ~]# . admin-openrc 
[root@controller ~]# openstack catalog list
+-----------+-----------+------------------------------------------------------------------------+
| Name      | Type      | Endpoints                                                              |
+-----------+-----------+------------------------------------------------------------------------+
| neutron   | network   | RegionOne                                                              |
|           |           |   public: http://controller:9696                                       |
|           |           | RegionOne                                                              |
|           |           |   admin: http://controller:9696                                        |
|           |           | RegionOne                                                              |
|           |           |   internal: http://controller:9696                                     |
|           |           |                                                                        |
| cinderv2  | volumev2  | RegionOne                                                              |
|           |           |   admin: http://controller:8776/v2/9a8169bc534e4705816e97bff4d2866b    |
|           |           | RegionOne                                                              |
|           |           |   public: http://controller:8776/v2/9a8169bc534e4705816e97bff4d2866b   |
|           |           | RegionOne                                                              |
|           |           |   internal: http://controller:8776/v2/9a8169bc534e4705816e97bff4d2866b |
|           |           |                                                                        |
| keystone  | identity  | RegionOne                                                              |
|           |           |   admin: http://controller:35357/v3/                                   |
|           |           | RegionOne                                                              |
|           |           |   public: http://controller:5000/v3/                                   |
|           |           | RegionOne                                                              |
|           |           |   internal: http://controller:5000/v3/                                 |
|           |           |                                                                        |
| placement | placement | RegionOne                                                              |
|           |           |   internal: http://controller:8778                                     |
|           |           | RegionOne                                                              |
|           |           |   admin: http://controller:8778                                        |
|           |           | RegionOne                                                              |
|           |           |   public: http://controller:8778                                       |
|           |           |                                                                        |
| cinderv3  | volumev3  | RegionOne                                                              |
|           |           |   public: http://controller:8776/v3/9a8169bc534e4705816e97bff4d2866b   |
|           |           | RegionOne                                                              |
|           |           |   admin: http://controller:8776/v3/9a8169bc534e4705816e97bff4d2866b    |
|           |           | RegionOne                                                              |
|           |           |   internal: http://controller:8776/v3/9a8169bc534e4705816e97bff4d2866b |
|           |           |                                                                        |
| nova      | compute   | RegionOne                                                              |
|           |           |   internal: http://controller:8774/v2.1                                |
|           |           | RegionOne                                                              |
|           |           |   admin: http://controller:8774/v2.1                                   |
|           |           | RegionOne                                                              |
|           |           |   public: http://controller:8774/v2.1                                  |
|           |           |                                                                        |
| glance    | image     | RegionOne                                                              |
|           |           |   public: http://controller:9292                                       |
|           |           | RegionOne                                                              |
|           |           |   admin: http://controller:9292                                        |
|           |           | RegionOne                                                              |
|           |           |   internal: http://controller:9292                                     |
|           |           |                                                                        |
+-----------+-----------+------------------------------------------------------------------------+

Service与Endpoint关系:
(1):在openstack中,每一个service中都有三种Endpoint:Admin、Public、Internal(创建完service后需要为其创建API Endpoint)
(2):Admin使用者为管理员,能够修改User Project(Tenant)
(3):public使用者为客户端,使用者在外网管理自己云服务器
(4):internal使用者为内部组件间相互调用
(5):三种Endpoint在网络上开放的权限也不同,Admin通常只能对内网开放,public通常可以对外网开放,internal只能对有安装openstack服务的机器开放

2.5 Group组

 Identity Service API v3实体。组是域拥有的用户的集合。授予域或项目的组角色适用于组中的所有用户。向组中添加用户或从组中删除用户会将其角色和身份验证授予或撤消到关联的域或项目。组的概念为了更好的管理用户

2.6 OpenStackClient

 多个OpenStack服务的命令行界面,包括Identity API。例如,用户可以运行 openstack服务create和 openstack端点create命令来在其OpenStack安装中注册服务。

2.7 Project项目

 Project 用于将 OpenStack 的资源(计算、存储和网络)进行分组和隔离。 根据 OpenStack 服务的对象不同,Project 可以是一个客户(公有云,也叫租户)、部门或者项目组(私有云)。
这里请注意:
1. 资源的所有权是属于 Project 的,而不是 User。
2. 在 OpenStack 的界面和文档中,Tenant / Project / Account 这几个术语是通用的,但长期看会倾向使用 Project
3. 每个 User(包括 admin)必须挂在 Project 里才能访问该 Project 的资源。 一个User可以属于多个 Project。
4. admin 相当于 root 用户,具有最高权限
openstack界面项目如下图:
这里写图片描述
通过管理成员将 User 添加到 Project中:
这里写图片描述

2.8 Region区域

 Identity Service API v3实体。表示OpenStack部署中的一般部门。您可以将零个或多个子区域与区域相关联,以形成树状结构化层次结构。虽然区域没有地理内涵,但部署可以使用区域的地理名称,例如us-east。
region异地机房认证流程如下图:
这里写图片描述

2.9 Role角色

 具有一组已定义的用户权限和特权的个性,用于执行特定的操作集。Identity服务向用户发出包含角色列表的令牌。当用户调用服务时,该服务解释用户角色集,并确定每个角色授予访问权限的操作或资源。
 安全包含两部分:Authentication(认证)和 Authorization(鉴权) Authentication 解决的是“你是谁?”的问题 Authorization 解决的是“你能干什么?”的问题
Keystone 是借助 Role 来实现 Authorization 的,查看Keystone中定义Role:

[root@controller ~]# openstack role list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 5dadd0205e644ed8b99c0842ba8f02b4 | admin |
| 8e50219ae4a44daea5fba43dc3a3bdbc | user  |
+----------------------------------+-------+

可以为 User 分配一个或多个 Role ,Horizon 的菜单查看角色:
这里写图片描述
 Service 决定每个 Role 能做什么事情 Service 通过各自的 policy.json 文件对 Role 进行访问控制,通过配置这个文件,keystone实现了对User基于Role的权限管理,下面是 Nova 服务/etc/nova/policy.json 中的示例:
这里写图片描述
 上面配置的含义是:对于 create、attach_network 和 attach_volume 操作,任何Role的 User 都可以执行; 但只有 admin 这个 Role 的 User 才能执行 forced_host 操作。
OpenStack 默认配置只区分 admin 和非 admin Role。 如果需要对特定的 Role 进行授权,可以修改 policy.json。Policy就是用来控制User对Project(tenant)中资源的操作权限

2.10 Service服务

 OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等,每个 Service 都会提供若干个 Endpoint,User 通过 Endpoint 访问资源和执行操作。

2.11 Token令牌

 一个由字母和数字组成的字符串,可以访问OpenStack API和资源。令牌可以在任何时间被撤销,并且在有限的持续时间内有效,User 成功 Authentication 后由 Keystone 分配给 User。
1. Token 用做访问 Service 的 Credential
2. Service 会通过 Keystone 验证 Token 的有效性
3. Token 的有效期默认是 24 小时
token获取大致流程:
这里写图片描述

2.12 User用户

 使用OpenStack云服务的个人,系统或服务的数字表示。身份服务验证传入请求是由声称正在进行呼叫的用户做出的。用户具有登录名,可以使用分配的令牌访问资源。用户可以直接分配到特定项目,其行为就像它们包含在该项目中一样。
这里写图片描述
 当 User 请求访问 OpenStack 时,Keystone 会对其进行验证,openstack界面用户如下:
这里写图片描述
 除了 admin 和 demo,OpenStack 也为 nova、cinder、glance、neutron 服务创建了相应的 User,admin 也可以管理这些 User。

3. 实例创建过程分析

 以创建一个VM为例分析认证流程:
这里写图片描述
1.用户/API 想创建一个实例,首先会将自己的credentials发给keystone。认证成功后,keystone会颁给用户/API一个临时的令牌(Token)和一个访问服务的Endpoint。 PS:Token没有永久的
2.用户/API 把临时Token提交给keystone,keystone并返回一个Tenant(Project)
3.用户/API 向keystone发送带有特定租户的凭证,告诉keystone用户/API在哪个项目中,keystone收到请求后,会发送一个项目的token到用户/API PS:第一个Token是来验证用户/API是否有权限与keystone通信,第二个Token是来验证用户/API是否有权限访问我keystone的其它服务。用户/API 拿着token和Endpoint找到可访问服务
4.服务向keystone进行认证,Token是否合法,它允许访问使用该服务(判断用户/API中role权限)?
5.keystone向服务提供额外的信息。用户/API是允许方法服务,这个Token匹配请求,这个Token是用户/API的
6.服务执行用户/API发起的请求,创建实例
7.服务会将状态报告给用户/API。最后返回结果,实例已经创建

参考:
https://www.cnblogs.com/charles1ee/p/6293387.html
http://www.cnblogs.com/CloudMan6/p/5365474.html

猜你喜欢

转载自blog.csdn.net/networken/article/details/80969714