一:简介
一、作用
1. 用户管理:验证用户身份信息合法性
2. 认证服务:提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。
3. Keystone是Openstack用来进行身份验证(authN)及高级授权(authZ)的身份识别服务,目前支持基于口令的authN和用户服务授权。
二、概念
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。分为三类:
1. admin url —>管理员用户使用 ,Port:35357
2. internal url —>openstack内部组件间互相通信(内部访问), Port:5000 (组件之间通信基于Restful api)
3. public url —> 其他用户访问地址(全局访问),Port:5000
二:架构
一、工作原理
1. 首先User向Keystone提供自己的Credentials(凭证:用于确认用户身份的数据,EG. username/password)。
2. Keystone根据User提供的Credentials从SQL Database中进行身份和权限校验,验证通过返回User一个Token和Endpoint 。
3. User得到授权(Token)和Endpoint后根据自身权限操作OpenStack的资源
二、在各个组件中的作用
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。
三、访问流程
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。最后返回结果,实例已经创建
三:常用操作