OpenStack入门以及一些资料之(三、Keystone)
2014-05-06 21:48
337 查看
注:本文内容均来自网络,我只是在此做了一些摘抄和整理的工作,来源均有注明。
Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证、服务规则和服务令牌的功能,
它实现了OpenStack的Identity API。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。
功能:
用户信息管理:user/tenant基本信息管理;认证服务:登陆认证,各个组件API的权限控制;
架构:
既然keystone为各个模块提供认证服务,所以各个模块与keystone都有所交互。其中登录认证体现在用户访问各个组件的API时,调用了WSGI框架的authtoken filter,该filter最调用keystoneclient
,最终通过keystone验证token,完成对用户的登录认证。如果认证失败,用户将不能访问该API。
以nova为例,authtoken filter在/etc/paste.ini目录中(如果不熟悉WSGI框架,暂且忽略之)
![](http://img.blog.csdn.net/20140304234643796)
![](http://img.blog.csdn.net/20140304234933796)
keystone在openstack的位置如下:
![](http://img.blog.csdn.net/20140304232125453)
User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。
2. Tenant
Tenant即租户,早期版本又称为project,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Quantum中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上,用户访问租户的资源前,必须与该租户关联,并且指定该用户在该租户下的角色。
3. Role
Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的 或 租户内的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。
4. Service
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。在上文中谈到的Role,实际上也是可以绑定到某个service的。例如,当swift需要一个管理员权限的访问进行对象创建时,对于相同的role我们并不一定也需要对nova进行管理员权限的访问。为了实现这个目标,我们应该创建两个独立的管理员role,一个绑定到swift,另一个绑定到nova,从而实现对swift进行管理员权限访问不会影响到Nova或其他服务。
5. Endpoint
Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候我们可以在conf文件夹下看到这个文件),这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public
url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。
6. Token
Token即是信物、令牌,用户通过用户名和密码获取在某个租户下的token,通过token,可以实现单点登录。
7. Credentials
与user关联的认证凭据。一个user可能有一个或多个credential,一个credential与某一个project关联。该术语可以简单的理解为用户和密码。
8. Domains
表示一组tenants和users的集合。每一个tenants或user只能属于一个domain,但user可以属于多个tenants。domain有命名空间的概念,即在一个命名空间内的名称是否是全局唯一。
(The
intent of domain is to define the administrative boundaries for management of Keystone entities. A domain can represent an individual, company, or operator owned space.)
对象之间的关系(旧版本未更新):
![](http://img.my.csdn.net/uploads/201302/02/1359738631_2634.png)
下面举例进行理解:
keystone 里面的概念很多,有:User,Credentials,Authentication,Token,Tenant,Service,Endpoint,Role。在这么多概念中,其实最主要的就是 User 和 Tenant 。由于一些安全,服务问题,才引发了其它的概念。
那什么叫做 User ,Tenant 呢?这里我举个比较好理解的例子。我们去宾馆住的时候,
如果把宾馆比作为Tenant,住宿的人就是User ,而宾馆就是 Tenant,宾馆可以提供多种诸如住宿、娱乐、饮食等多种服务(Service),具体来说,住宿是一种具体的服务(Endpoint)。就住宿而言,有普通间和总统套房,如果你的VIP等级(Role)高,你可以享受到豪华的总统套房。入住前,我们需要拿身份证开房(Credential),认证身份证不是冒牌货后(Authenticaiton),会给你一个房卡(Token),然后你拿着房卡,就可以进入房间和享受各种服务。
keystone - 运行keystone-admin和keystone-service
keystone-admin - 操作keystone的管理API
keystone-service - 用于验证的,面向用户的API
keystone-manage - 管理keystone的命令行接口
Keystone还包括WSGI中间件以为Nova和Swift提供验证服务。
Keystone使用一个内置的SQLite数据库 - 为验证用户,将来也可能使用一个外部LDAP服务来代替存储证书
中间件(Middleware)
Keystone中间件位于OpenStack服务前面,处理进来的请求验证。中间件的设计遵循如下的规范。
中间件的源代码位于Keystone/middleware。
中间件支持两个接口:WSGI和REST/HTTP。
REST & HTTP API
如果进来一个未经认证的调用,中间件将响应一个401 Unautorized错误。根据每HTTP的标准,它也会返回一个WWW-Authenticate包头以通知调用者支持哪个协议。对于Keystone验证,响应的语法格式如下:
WWW-Authenticate: Keystone uri="url to Keystone server"The client can then make the necessary calls to the Keystone server, obtain a token, and retry the call with the token.
令牌使用 X-Auth-Toke包头传递。
WSGI API(包头)
当成功验证后中间件经为下行的WSGI应用发送如下包头:
X-Identity-Status
提供请求是否被验证的信息。
X-Tenant
提供了租户ID(在Keystone中以URL的形式出现)。在Keysotne转为采用ID/Name模式之前,它为租户提供了对任意遗留实现的支持。
X-Tenant-Id
唯一不变的租户ID。
X-Tenant-Name
唯一但可变的租户名字。
X-User
用于登录的用户名。
X-Roles
分配给用户的角色。
1)用户Alice通过自己的户名和密码向keystone申请token,keystone认证用户名和密码后,返回token1
2)Alice通过token1发送keystone查询他所拥有的租户,keystone验证token1成功后,返回Alice的所有Tenant
3) Alice选择一个租户,通过用户名和密码申请token,keystone认证用户名、密码、tenant后,返回token2。(其实1、2步仅仅是为了查询tenant,如果已经知道tenant,可以忽略1、2步)
4)Alice通过token2发送创建server的请求,keystone验证token2(包括该token是否有效,是否有权限创建虚拟机等)成功后,然后再把请求下发到nova,最终创建虚拟机
![](http://docs.openstack.org/admin-guide-cloud/content/figures/4/figures/SCH_5002_V00_NUAC-Keystone.png)
下面看一个更详细点的时序图,是一张老图,Neutron还叫Quantum:
![](http://images.cnitblog.com/blog/128843/201301/04115500-3c66e2b69f7a41eabf8426415481da8e.png)
[openstack][G版]keystone源码学习:/article/8460808.html
openstack policy 鉴权过程分析:http://blog.chinaunix.net/uid-20940095-id-4144300.html
OpenStack Identity(Keystone)身份服务-体系结构与中间件: /article/3489242.html
openstack keystone整体架构与功能: /article/7847285.html
OpenStack Keystone的基本概念理解: /article/7097052.html
【OpenStack】OpenStack的G版Keystone对象模型: /article/7761097.html
[openstack][G版]keystone源码学习: /article/8460808.html
openstack policy 鉴权过程分析 : http://blog.chinaunix.net/uid-20940095-id-4144300.html
将openstack的Token认证信息存储在memcache中: /article/4316842.html
0、简介及架构
简介:Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证、服务规则和服务令牌的功能,
它实现了OpenStack的Identity API。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。
功能:
用户信息管理:user/tenant基本信息管理;认证服务:登陆认证,各个组件API的权限控制;
架构:
既然keystone为各个模块提供认证服务,所以各个模块与keystone都有所交互。其中登录认证体现在用户访问各个组件的API时,调用了WSGI框架的authtoken filter,该filter最调用keystoneclient
,最终通过keystone验证token,完成对用户的登录认证。如果认证失败,用户将不能访问该API。
以nova为例,authtoken filter在/etc/paste.ini目录中(如果不熟悉WSGI框架,暂且忽略之)
keystone在openstack的位置如下:
1、基本概念
1. UserUser即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。
2. Tenant
Tenant即租户,早期版本又称为project,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Quantum中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上,用户访问租户的资源前,必须与该租户关联,并且指定该用户在该租户下的角色。
3. Role
Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的 或 租户内的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。
4. Service
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。在上文中谈到的Role,实际上也是可以绑定到某个service的。例如,当swift需要一个管理员权限的访问进行对象创建时,对于相同的role我们并不一定也需要对nova进行管理员权限的访问。为了实现这个目标,我们应该创建两个独立的管理员role,一个绑定到swift,另一个绑定到nova,从而实现对swift进行管理员权限访问不会影响到Nova或其他服务。
5. Endpoint
Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候我们可以在conf文件夹下看到这个文件),这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public
url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。
6. Token
Token即是信物、令牌,用户通过用户名和密码获取在某个租户下的token,通过token,可以实现单点登录。
7. Credentials
与user关联的认证凭据。一个user可能有一个或多个credential,一个credential与某一个project关联。该术语可以简单的理解为用户和密码。
8. Domains
表示一组tenants和users的集合。每一个tenants或user只能属于一个domain,但user可以属于多个tenants。domain有命名空间的概念,即在一个命名空间内的名称是否是全局唯一。
(The
intent of domain is to define the administrative boundaries for management of Keystone entities. A domain can represent an individual, company, or operator owned space.)
对象之间的关系(旧版本未更新):
![](http://img.my.csdn.net/uploads/201302/02/1359738631_2634.png)
下面举例进行理解:
keystone 里面的概念很多,有:User,Credentials,Authentication,Token,Tenant,Service,Endpoint,Role。在这么多概念中,其实最主要的就是 User 和 Tenant 。由于一些安全,服务问题,才引发了其它的概念。
那什么叫做 User ,Tenant 呢?这里我举个比较好理解的例子。我们去宾馆住的时候,
如果把宾馆比作为Tenant,住宿的人就是User ,而宾馆就是 Tenant,宾馆可以提供多种诸如住宿、娱乐、饮食等多种服务(Service),具体来说,住宿是一种具体的服务(Endpoint)。就住宿而言,有普通间和总统套房,如果你的VIP等级(Role)高,你可以享受到豪华的总统套房。入住前,我们需要拿身份证开房(Credential),认证身份证不是冒牌货后(Authenticaiton),会给你一个房卡(Token),然后你拿着房卡,就可以进入房间和享受各种服务。
User | 住宾馆的人 |
Credentials | 身份证 |
Authentication | (认证身份证)宾馆为了拒绝不必要的人进出宾馆,专门设置的机制,只有拥有钥匙的人才能进出 |
Token | 房卡 |
Tenant | 宾馆 |
Service | 宾馆可以提供的服务类别,比如,饮食类,娱乐类 |
Endpoint | 具体的一种服务,比如吃烧烤,打羽毛球 |
Role | VIP 等级,VIP越高,享有越高的权限 |
2、组件
Keystone包含一个命令行接口,可以与Keystone API交互以管理keystone和相关服务。keystone - 运行keystone-admin和keystone-service
keystone-admin - 操作keystone的管理API
keystone-service - 用于验证的,面向用户的API
keystone-manage - 管理keystone的命令行接口
Keystone还包括WSGI中间件以为Nova和Swift提供验证服务。
Keystone使用一个内置的SQLite数据库 - 为验证用户,将来也可能使用一个外部LDAP服务来代替存储证书
中间件(Middleware)
Keystone中间件位于OpenStack服务前面,处理进来的请求验证。中间件的设计遵循如下的规范。
中间件的源代码位于Keystone/middleware。
中间件支持两个接口:WSGI和REST/HTTP。
REST & HTTP API
如果进来一个未经认证的调用,中间件将响应一个401 Unautorized错误。根据每HTTP的标准,它也会返回一个WWW-Authenticate包头以通知调用者支持哪个协议。对于Keystone验证,响应的语法格式如下:
WWW-Authenticate: Keystone uri="url to Keystone server"The client can then make the necessary calls to the Keystone server, obtain a token, and retry the call with the token.
令牌使用 X-Auth-Toke包头传递。
WSGI API(包头)
当成功验证后中间件经为下行的WSGI应用发送如下包头:
X-Identity-Status
提供请求是否被验证的信息。
X-Tenant
提供了租户ID(在Keystone中以URL的形式出现)。在Keysotne转为采用ID/Name模式之前,它为租户提供了对任意遗留实现的支持。
X-Tenant-Id
唯一不变的租户ID。
X-Tenant-Name
唯一但可变的租户名字。
X-User
用于登录的用户名。
X-Roles
分配给用户的角色。
3、访问流程
以创建一个虚拟机(server)为例,结合下图简述下keystone在openstack的访问流程。1)用户Alice通过自己的户名和密码向keystone申请token,keystone认证用户名和密码后,返回token1
2)Alice通过token1发送keystone查询他所拥有的租户,keystone验证token1成功后,返回Alice的所有Tenant
3) Alice选择一个租户,通过用户名和密码申请token,keystone认证用户名、密码、tenant后,返回token2。(其实1、2步仅仅是为了查询tenant,如果已经知道tenant,可以忽略1、2步)
4)Alice通过token2发送创建server的请求,keystone验证token2(包括该token是否有效,是否有权限创建虚拟机等)成功后,然后再把请求下发到nova,最终创建虚拟机
![](http://docs.openstack.org/admin-guide-cloud/content/figures/4/figures/SCH_5002_V00_NUAC-Keystone.png)
下面看一个更详细点的时序图,是一张老图,Neutron还叫Quantum:
![](http://images.cnitblog.com/blog/128843/201301/04115500-3c66e2b69f7a41eabf8426415481da8e.png)
4、进阶
待深入:[openstack][G版]keystone源码学习:/article/8460808.html
openstack policy 鉴权过程分析:http://blog.chinaunix.net/uid-20940095-id-4144300.html
参考:
OpenStack 官方文档: http://docs.openstack.org/admin-guide-cloud/content/keystone-concepts.htmlOpenStack Identity(Keystone)身份服务-体系结构与中间件: /article/3489242.html
openstack keystone整体架构与功能: /article/7847285.html
OpenStack Keystone的基本概念理解: /article/7097052.html
【OpenStack】OpenStack的G版Keystone对象模型: /article/7761097.html
[openstack][G版]keystone源码学习: /article/8460808.html
openstack policy 鉴权过程分析 : http://blog.chinaunix.net/uid-20940095-id-4144300.html
将openstack的Token认证信息存储在memcache中: /article/4316842.html
相关文章推荐
- OpenStack入门以及一些资料之(零,nova计算)
- OpenStack入门以及一些资料之(一、cinder,swift存储)
- OpenStack入门以及一些资料之(四、Heat)
- OpenStack入门以及一些资料之(六、通用)
- [置顶] 第二篇 KinectV2结合opencv入门开发以及一些相关的学习资料
- 关于DBN以及RBM的一些资料汇总
- linux入门到精通一:文件目录,磁盘以及一些命令
- 大连对日外包程序员如何提高自己基础水平以及一些C#的资料链接
- 从协议网上搜集的SMTP协议的一些资料以及命令
- 分享一些ArcGIS入门资料
- OpenStack入门修炼之Keystone服务部署与测试(8)
- Ant, JUnit以及Sonar的安装+入门资料
- 一些ADO数据库入门例子与资料
- OpenStack入门之 OpenStack Cloud Administrator Guid(二)Keystone,horizon
- 收集了一些vuforia的入门资料。为了防止找不回来,先放链接,迟点完整转载。
- OpenStack流行的部署模式以及一些基本概念
- oracle入门的一些资料
- EPC的一些英文资料以及相关工具
- openstack利用spice播放高清视频的一些资料