欢迎来到CloudService文涵的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

一、OpenStack的Keystone组件详解

一、简介

1.作用

1.用户管理:验证用户身份信息合法性

2.认证服务:提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。

3.Keystone是Openstack用来进行身份验证(authN)及高级授权(authZ)的身份识别服务,目前支持基于口令的authN和用户服务授权。

2.概念

(1)租户(Project):个人或服务所拥有的资源集合。在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源。

(2)用户(User):访问OpenStack的对象。用户拥有证书(credentials),且可能分配给一个或多个租户。经过验证后,会为每个单独的租户提供一个特定的令牌。

(3)证书(Credentials):确认用户身份的凭证。可以是用户名和密码、用户名和API Key和Token。

(4)令牌(Token):一个字符串表示,作为访问资源的令牌。Token包含了在指定范围和有效时间内可以被访问的资源,具有时效性。

(5)角色(Role):用于划分权限。可以通过给User指定Role,使User获得Role对应的操作权限。Keystone返回给User的Token包含了Role列表,被访问的Services会判断访问它的User和User提供的Token中所包含的Role。

(6)Policy:用来控制User对Project中资源(包括Services)的操作权限。对于Keystone service来说,Policy就是一个JSON文件,默认是/etc/keystone/policy.json。

(7)Authentication:确定用户身份的过程

(8)服务(Service):Openstack中运行的组件服务

(9)Endpoint:通过网络来访问和定位某个Openstack service的地址,通常是一个URL。分为三类:

  • admin url —>管理员用户使用 ,Port:35357

  • internal url —>openstack内部组件间互相通信(内部访问), Port:5000 (组件之间通信基于Restful api)

  • public url —> 其他用户访问地址(全局访问),Port:5000

二、架构

1.工作原理

(1)首先User向Keystone提供自己的Credentials(凭证:用于确认用户身份的数据,EG. username/password)。

(2)Keystone根据User提供的Credentials从SQL Database中进行身份和权限校验,验证通过返回User一个Token和Endpoint 。

(3)User得到授权(Token)和Endpoint后根据自身权限操作OpenStack的资源

2.在各个组件中的作用

(1)User通过命令行或者API的方式登录后,提供自己的Credentials(凭证:用于确认用户身份的数据,EG. username/password)。

(2)Keystone根据User提供的Credentials从SQL Database中进行身份和权限校验,验证通过返回User一个Token和Endpoint。

(3)此后User所有的Request都会使用该Token进行身份验证。

(4)从以上过程可以看出,用户的角色管理在 Keystone 中是很重要的工作。在Keystone V3之前,用户的权限管理以每一个用户为单位,需要对每一个用户进行角色分配,并不存在一种对一组用户进行统一管理的方案,这给系统管理员带来了额外的工作和不便。此外,Keystone V3之前的版本中,资源分配是以 Tenant 为单位的,这不太符合现实世界中的层级关系。如一个公司在 Openstack 中拥有两个不同的项目,他需要管理两个Tenant来分别对应这两个项目,并对这两个 Tenant 中的用户分别分配角色。由于在 Tenant 之上并不存在一个更高层的概念,无法对 Tenant 进行统一的管理,所以这给多 Tenant 的用户带来了不便。为了解决这些问题,Keystone V3 提出了新的概念Domain和Group。

3.访问流程

(1)User/API 想创建一个实例,首先会将自己的Credentials发给Keystone。认证成功后,keystone会颁给User/API一个临时的令牌(Token)和一个访问服务的Endpoint。

(2)User/API 把临时Token提交给Keystone,Keystone返回一个Tenant(Project)。

(3)User/API 向Keystone发送带有特定租户的凭证(交互权限),告诉Keystone User/API在哪个项目中,Keystone收到请求后,会发送一个项目的Token到User/API (访问权限),User/API 拿着Token和Endpoint找到可访问服务。

(4)服务向keystone进行认证,Token是否合法,它允许访问使用该服务(判断用户/API中role权限)?

(5)Keystone向服务提供额外的信息。User/API是允许方法服务,这个Token匹配请求,这个Token是User/API的

(6)服务执行User/API发起的请求,创建实例

(7)服务会将状态报告给用户/API。最后返回结果,实例已经创建

三、常用操作

参考于https://www.cnblogs.com/mh20131118/p/12942346.html

posted on 2022-05-08 22:08  Cloudservice  阅读(528)  评论(0编辑  收藏  举报