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。

    1. 获取 token

      创建 JSON 文件填写必要的验证信息,token-request.json 文件中的内容如下所示:

      图 3. 获取 token 的验证信息

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

      图 4. 获取到的 token

    2. 创建 Project

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

      图 5. 新建 Project

      创建“test_Project”后,调用 api 查看当前的 Projects,可以看到 test_Project 已经被成功创建:

      图 6. 查看当前所有的 Project 信息

    3. 在 Group 中添加 User

      首先查看当前所有的 Group:

      图 7. 查看当前所有的 Group 信息

      查看所有的 User:

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

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

      图 9. 为 Group 添加 User

    4. 为 Group 指定 Role

      查看当前所有的 Role:

      图 10. 查看当前所有的 Role 信息

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

      图 11. 为 Group 指定 Role

      查看“test_Project”中“test_Group”的 Role:

      图 12. 查看 Group 的 Role 信息  转载自http://www.ibm.com/developerworks/cn/cloud/library/1506_yuwz_keystonev3/index.html

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

[转]OpenStack Keystone V3的更多相关文章

  1. OpenStack Keystone V3 简介

    Keystone V3 简介 Keystone 中主要涉及到如下几个概念:User.Tenant.Role.Token.下面对这几个概念进行简要说明. User:顾名思义就是使用服务的用户,可以是人. ...

  2. OpenStack Keystone v3 API新特性

    原连接 http://blog.chinaunix.net/uid-21335514-id-3497996.html keystone的v3 API与v2.0相比有很大的不同,从API的请求格式到re ...

  3. Openstack Keystone V3 利用 curl 命令获取 token

    curl -i \ -H "Content-Type: application/json" \ -d ' { "auth": { "identity& ...

  4. 在Keystone V3基础上改进的分布式认证体系

    目标 使用java实现keystone v3相关功能与概念: api client authentication service discovery distributed multi-tenant ...

  5. 【openStack】Libcloud 如何支持 keystone V3?

    Examples This section includes some examples which show how to use the newly available functionality ...

  6. OpenStack Keystone安装部署流程

    之前介绍了OpenStack Swift的安装部署,采用的都是tempauth认证模式,今天就来介绍一个新的组件,名为Keystone. 1. 简介 本文将详细描述Keystone的安装部署流程,并给 ...

  7. [转]Setting Keystone v3 domains

    http://www.florentflament.com/blog/setting-keystone-v3-domains.html The Openstack Identity v3 API, p ...

  8. 使用openstackclient调用Keystone v3 API

    本文内容属于个人原创,转载务必注明出处:  http://www.cnblogs.com/Security-Darren/p/4138945.html 考虑到Keystone社区逐渐弃用第二版身份AP ...

  9. Openstack keystone组件详解

    OpenStack Keystone Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证.服务规则和服务令牌功能的模块.用户访问资源 ...

随机推荐

  1. 一篇关于apache commons类库的详解[转]

    1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta C ...

  2. Excel破解密码代码

    Option ExplicitPublic Sub AllInternalPasswords()' Breaks worksheet and workbook structure passwords. ...

  3. 'AndroidManifest.xml' must have a minimum of 2 segments.

    Manifest下必须有二级域名 <manifest xmlns:android="http://schemas.android.com/apk/res/android" p ...

  4. Scala2.11.8 spark2.3.1 mongodb connector 2.3.0

    import java.sql.DriverManager import com.mongodb.spark._ import org.apache.spark.SparkConf import or ...

  5. 【Intel AF 2.1 学习笔记二】AF中的页面——Panel

    Panel Panel控件是你的app中的独立内容的区域控件.它是af UI的核心.Panel div 元素实际上承载了app中你管理和显示的界面元素和内容. 创建panel控件是相当地容易的:在id ...

  6. ios模拟器已安装但xcode无法显示

    最近把系统抹盘重装了, 然后用Time Machine恢复到原始状态, 一切安好, 但是使用xcode的时候发现一个模拟器都没有了: 各种折腾, 重装SDK啊, 重装xcode啊,最后发现, 如果你的 ...

  7. iview框架select默认选择一个option的值

    给select加v-model,绑定的值为默认要显示的option的value值,展示的则为option的标签之间的内容,并且如果option的value是双引号,这里绑定的值也要双引号,否则不能正常 ...

  8. Html5新特性之文档声明和头部信息

    Html5推出的新内容比较多,本文我们来介绍两个重点内容,文档类型声明和头部信息. 无论是Html4.01还是XHtml1.0,所有文档的开头都会有文档声明<!DOCTYPE>标签来声明它 ...

  9. js中===与==区别

    本文出自:http://www.cnblogs.com/yiki/archive/2012/05/08/2489687.html 1.对于string,number等基础类型,==和===是有区别的 ...

  10. Java按钮控件数组实现计算器界面

    编写程序,通过按钮数组来管理界面中的所有按钮控件,从而使用最少的代码实现模拟的计算器界面. 思路如下: 创建一个类,通过extends使其继承窗体类JFrame: 创建一个JFrame对象,使用JFr ...