keystone(v3) 简介
核心概念
User(用户)
:服务的用户,可以是人、系统或服务,只要是openstack服务的对象都可以称为用户。
Tenant(租户)
:可以理解为人、项目或者组织拥有资源的集合,在一个租户中可以拥有很多个用户,这些用户可以根据权限划分使用租户的资源。
Role(角色)
:用于分配操作的权限,角色可以指定给用户,用户会获得对应该
角色的权限。
Token(认证)
:指的是一串比特值或者字符串,用来作为访问资源的记号。token中含有可访问资源的范围
keystone交互过程
首先用户向Keystone提供自己的身份验证信息,如用户名和密码。Keystone 会从数据库中读取数据对其验证,如验证通过,会向用户返回一个 token,此后用户所有的请求都会使用该token进行身份验证。如用户向 Nova 申请虚拟机服务,nova 会将用户提供的 token 发给 Keystone 进行验证,Keystone会根据token判断用户是否拥有进行此项操作的权限,若验证通过那么nova会向其提供相对应的服务。其它组件和 Keystone 的交互也是如此。
在 Keystone V3 之前,用户的权限管理以每一个用户为单位,需要对每一个用户进行角色分配,并不存在一种对一组用户进行统一管理的方案,这给系统管理员带来了额外的工作和不便。此外,Keystone V3 之前的版本中,资源分配是以 Tenant 为单位的,这不太符合现实世界中的层级关系。如一个公司在 Openstack 中拥有两个不同的项目,他需要管理两个 Tenant 来分别对应这两个项目,并对这两个 Tenant 中的用户分别分配角色。
keystone v3
为了更加符合现实世界和云服务的映射,将 Tenant 改为 Project 并在其上添加 Domain 的概念
graph TD
A[Tenant] -->|改为| B(Project)
B --> C(Domain)
B --> D(Group)
graph LR;
A–>B;
A–>C;
B–>D;
C–>D;
V3 利用 Domain 实现真正的多租户(multi-tenancy)架构,Domain 担任 Project 的高层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个 Projects、Users、Groups 和 Roles。通过引入 Domain,云服务客户可以对其拥有的多个 Project 进行统一管理,而不必再向过去那样对每一个 Project 进行单独管理。
域(Domain):比Project更高级的容器,云服务客服是Domain的拥有者,一个Domain可以创建多Project、Users、Groups和Roles。通过
Domain对所拥有的多个Project统一管理,不必对每个Project单独管理。
组(Group):是一组User容器,通过给Group分配角色,在用一组的用户就有Group所有角色的权限
keystone v3 各组件关系
UUID FRENET