分享

OpenStack Keystone V3 入门介绍

本帖最后由 easthome001 于 2016-9-20 18:22 编辑
问题导读

1.Tenant与project是什么关系?
2.Keystone V3 API做了哪些改变?
3.Domain 的作用是什么?
4.Group与user的关系是什么?


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 与其它服务的交互
1.png

从以上过程可以看出,用户的角色管理在 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.png
如图 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 的验证信息
    3.png                                                                                                                                                                      用以上 JSON 文件申请 token 并将 token 写入环境变量“OS_TOKEN”中,以便之后的使用。
    图 4. 获取到的 token                                                                                                                                  4.png
  • 创建 Project
    成功获得 token 之后,我们就可以用获取的 token 调用 Keystone V3 的 API 与 Keystone 进行交互了。我们可以新建一个 Project,将其命名为“test_Project”:


    图 5. 新建 Project
    5.png                                                                                                                                                         创建“test_Project”后,调用 api 查看当前的 Projects,可以看到 test_Project 已经被成功创建:
    图 6. 查看当前所有的 Project 信息                                                                                                                6.png
  • 在 Group 中添加 User
    首先查看当前所有的 Group:
    图 7. 查看当前所有的 Group 信息
    7.png                                                                                                                                                           查看所有的 User:
    图 8. 查看当前所有的 User 信息
    8.png                                                                                                                                                                     将名为“test_User”的 User 添加到名为“test_Group”的 Group 中
    图 9. 为 Group 添加 User                                                                                                                                 9.png
  • 为 Group 指定 Role
    查看当前所有的 Role:
    图 10. 查看当前所有的 Role 信息
    10.png                                                                                                                                                                     将名为“admin”的 Role 指派给名为“test_Project”的 Project 中,名为“test_Group”的 Group:
    图 11. 为 Group 指定 Role
    11.png                                                                                                                                                                  查看“test_Project”中“test_Group”的 Role:
    图 12. 查看 Group 的 Role 信息
    12.png                                                                                                                                                                可以看到,已经成功为“test_Project”/“test_Group”指定了名为“admin”的 Role。



总结
本文对 Keystone 进行了简要的介绍,分析并阐述了 Keystone V3 版本的新功能,通过和老版本进行对比,指出了新功能的用途和优势。最后通过具体实例讲解了如何使用新添加的 Domain 和 Group 的功能。







已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条