文章目录
Keystone
Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务访问规则和服务令牌功能的组件。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone 类似一个服务总线, 或者说是整个 Openstack 框架的注册表,OpenStack 服务通过 Keystone 来注册其 Endpoint(服务访问的URL),任何服务之间的相互调用,都需要先经过 Keystone 的身份验证,获得目标服务的 Endpoint ,然后再调用。
Keystone 的主要功能如下:
- 管理用户及其权限;
- 维护 OpenStack 服务的 Endpoint;
- Authentication(认证)和 Authorization(鉴权)。
基础概念
Authentication
确认用户身份的过程。为了确认传入的请求,keystone会验证用户提供的一组凭证。
最初,这些凭证是用户名和密码,或者用户名和API key。
当keystone验证用户凭证时,它会发出一个认证令牌。用户在随后的请求中提供令牌。
Credentials
确认用户身份的凭证。
例如:
- 用户名和密码
- 用户名和API key
- keystone服务提供的身份token。
Endpoint
网络可访问的地址,通常是URL,通过它您可以访问服务。
Endpoint 分为三类:
- admin url :给admin用户使用,Port:35357
- internal url:OpenStack内部服务使用来跟别的服务通信,Port:5000
- public url:互联网用户可以访问的地址,Port:5000
Domain
域是定义用于管理Identity实体的管理边界的项目和用户的集合。域可以代表个人、公司或运营商拥有的空间。它们直接向系统用户公开管理活动。用户可以被授予域的管理员角色。域管理员可以在域中创建项目、用户和组,并为域中的用户和组分配角色。
Domain 可以认为是 project,user,group 的 namespace。 一个 domain 内,这些元素的名称不可以重复,但是在两个不同的domain内,它们的名称可以重复。因此,在确定这些元素时,需要同时使用它们的名称和它们的 domain 的 id 或者 name。
Group
组是一个Domain部分用户的集合。它可以让管理员快捷地对多个用户赋予相同的角色。例如将groupA赋予roleA,那么groupA中所有的用户都拥有roleA。移除角色亦是如此。
Project
在Domain下唯一。对资源或标识对象进行分组或隔离的容器。根据服务运营商的不同,项目可能映射到客户、帐户、组织或租户。
Region
表示OpenStack部署的总体划分。
如图所示:一个region拥有一套openstack,它们使用同一个keystone。当用户页面访问时,keystone会检测到多个region的存在并显示给用户,使得用户可以选择某一region进行访问。
Role
本身是一堆ACL集合,主要用于权限的划分。Role在Domain下是唯一的。其名称的意义在于policy.json根据role名称判断用户是否拥有执行操作的权限。
policy.json位于/etc/keystone/下,定义了某个role所能进行的操作。可以使用oslopolicy-policy-generator
命令生成。
结合Domain,Project,admin还可以分为system admin,domain admin和project admin。
keystone默认提供三个角色:admin,member,reader。三者关系如下图,如果一个用户被赋予了admin角色,那么他还会拥有member,reader角色;如果被赋予了member角色,也就意味着它还拥有reader角色。
admin角色在相应范围内(system,domian,project)拥有最高权限。
reader角色在相应范围内提供资源的只读权限。
member介于以上两种角色之间。更多的应用于其他服务。在相应范围内提供查询,创建功能。
Service
OpenStack服务(Compute (nova)、Object Storage (swift)、Image service (glance)),提供一个或多个终端,供用户访问资源和执行操作。
Token
一个字母-数字的文本字符串,允许访问OpenStack api和资源。令牌可以在任何时候被撤销,并且在一定的时间内有效。
keystone目前提供两种token:Fernet token和JWS token。默认Fernet token。
User
使用OpenStack云服务的人、系统或服务的数字表示。用户拥有登录权限,可以使用指定的令牌访问资源。用户可以被直接分配到一个特定的project中。
用户表现为一个独立的API消费者。只在Domain下全局唯一。
Keystone在OpenStack中的工作流程
以创建VM为例: