您的位置:首页 > 运维架构

OpenStack Keystone V3 简介

2016-12-13 14:50 302 查看
http://www.ibm.com/developerworks/cn/cloud/library/1506_yuwz_keystonev3/index.html

Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone V3 版本做出了许多变化和改进,引入了 Domain 和 Group 等新概念,本文将对 V3 版本的新功能进行介绍并通过实验进行演示。

Keystone V3 简介

Keystone 中主要涉及到如下几个概念:User、Tenant、Role、Token。下面对这几个概念进行简要说明。User:顾名思义就是使用服务的用户,可以是人、服务或者是系统,只要是使用了 Openstack 服务的对象都可以称为用户。

Tenant:租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。

Role:角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。

Token:指的是一串比特值或者字符串,用来作为访问资源的记号。Token 中含有可访问资源的范围和有效时间。

下面通过图 1 来说明 Keystone 和其它 OpenStack 服务之间是如何交互和协同工作的。首先用户向 Keystone 提供自己的身份验证信息,如用户名和密码。Keystone 会从数据库中读取数据对其验证,如验证通过,会向用户返回一个 token,此后用户所有的请求都会使用该 token 进行身份验证。如用户向 Nova 申请虚拟机服务,nova 会将用户提供的 token 发给 Keystone 进行验证,Keystone 会根据 token 判断用户是否拥有进行此项操作的权限,若验证通过那么 nova 会向其提供相对应的服务。其它组件和 Keystone 的交互也是如此。图 1. Keystone 与其它服务的交互


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

Keystone V3 API 新特性

Keystone V3 做出了许多变化和改进,我们选取其中较为重要的进行阐述:将 Tenant 改称为 Project

引入 Domain 的概念

引入 Group 的概念

将 Tenant 改为 Project 并在其上添加 Domain 的概念,这更加符合现实世界和云服务的映射。V3 利用 Domain 实现真正的多租户(multi-tenancy)架构,Domain 担任 Project 的高层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个 Projects、Users、Groups 和 Roles。通过引入 Domain,云服务客户可以对其拥有的多个 Project 进行统一管理,而不必再向过去那样对每一个 Project 进行单独管理。Group 是一组 Users 的容器,可以向 Group 中添加用户,并直接给 Group 分配角色,那么在这个 Group 中的所有用户就都拥有了 Group 所拥有的角色权限。通过引入 Group 的概念,Keystone V3 实现了对用户组的管理,达到了同时管理一组用户权限的目的。这与 V2 中直接向 User/Project 指定 Role 不同,使得对云服务进行管理更加便捷。图 2. Domain、Group、Project、User 和 Role 的关系图


如图 2 所示,在一个 Domain 中包含 3 个 Projects,可以通过 Group1 将 Role Sysadmin直接赋予 Domain,那么 Group1 中的所有用户将会对 Domain 中的所有 Projects 都拥有管理员权限。也可以通过 Group2 将 Role Engineer 只赋予 Project3,这样 Group2 中的 User 就只拥有对 Project3 相应的权限,而不会影响其它 Projects。回页首

Keystone V3 API 调用

下面我们通过实例操作来演示 Keystone V3 API 的使用:当前 Openstack 中存在一个名为“default”的 Domain,和一个名为“test_Group”的 Group。我们要在“default Domain”中新建一个 Project,并在“test_Group”中添加一个用户“test_User”,然后将“test_Group”中的所有 User 指定为新建 Project 的某个 Role。获取 token
创建 JSON 文件填写必要的验证信息,token-request.json 文件中的内容如下所示:图 3. 获取 token 的验证信息


用以上 JSON 文件申请 token 并将 token 写入环境变量“OS_TOKEN”中,以便之后的使用。图 4. 获取到的 token


创建 Project成功获得 token 之后,我们就可以用获取的 token 调用 Keystone V3 的 API 与 Keystone 进行交互了。我们可以新建一个 Project,将其命名为“test_Project”:

图 5. 新建 Project


创建“test_Project”后,调用 api 查看当前的 Projects,可以看到 test_Project 已经被成功创建:图 6. 查看当前所有的 Project 信息


在 Group 中添加 User首先查看当前所有的 Group:图 7. 查看当前所有的 Group 信息


查看所有的 User:图 8. 查看当前所有的 User 信息


将名为“test_User”的 User 添加到名为“test_Group”的 Group 中图 9. 为 Group 添加 User


为 Group 指定 Role查看当前所有的 Role:图 10. 查看当前所有的 Role 信息


将名为“admin”的 Role 指派给名为“test_Project”的 Project 中,名为“test_Group”的 Group:图 11. 为 Group 指定 Role


查看“test_Project”中“test_Group”的 Role:图 12. 查看 Group 的 Role 信息


可以看到,已经成功为“test_Project”/“test_Group”指定了名为“admin”的 Role。
回页首

总结

本文对 Keystone 进行了简要的介绍,分析并阐述了 Keystone V3 版本的新功能,通过和老版本进行对比,指出了新功能的用途和优势。最后通过具体实例讲解了如何使用新添加的 Domain 和 Group 的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  keystone