OpenStack Keystone 介绍

本系列文章同步发布於笔者网站


上一篇介绍了历史最悠久的 OpenStack 元件 Nova,这篇要来介绍目前 OpenStack 中算是最核心的元件,Keystone

Keystone 是什麽?

官方文件中是这样叙述的:

Keystone 是一个 OpenStack 服务,通过实现 OpenStack 的 Identity API 来提供 API 客户端认证、服务发现 (service discovery) 和分散式多租户授权 (distributed multi-tenant authorization)。

简单来讲,你可以把它当成 OpenStack 中的认证服务,并且记录了所有 OpenStack API 的所在位置 (endpoint)。

Keystone 架构

Keystone 是由多个不同的内部服务 (internal service) 组成,而这些服务通常是组合在一起使用。例如:一个认证的请求首先会透过 Identity 服务验证使用者提供的 credentials,成功後透过 Token 服务生成一个 token 给使用者。

Keystone 包含了以下服务:

  • Identity
  • Resource
  • Assignment
  • Token
  • Catalog

我们将一一介绍这些服务的功能。

Identity

Identiy 服务提供使用者和群组 credential 的验证服务。在最基本的状况下这些 credential 资料会由 Identity 服务储存在後端的资料库,在比较复杂的情况下使用者可以选择利用不同的後端来提供服务,例如 LDAP 等。

使用者 (Users)

使用者基本上代表了一个独立的 API 用户。使用者必须在特定的 domain 底下,预设会在 default,而所有使用者的名称并不是全域唯一的,但是在相同 domain 下是。

群组 (Groups)

群组顾名思义就是一群使用者个集合。同样的群组也是必须在 domain 底下,并且不是全域唯一的,而在相同 domain 下才是。

资源 (Resource)

资源服务提供有关 project 和 domain 的资料。

Projects

Projects 代表代表 OpenStack 中所有权的基本单位,因为 OpenStack 中的所有资源都应由特定 project 拥有。与使用者和群组相同 Project 本身必须由特定 domain 拥有,因此所有 Project 名称都不是全局唯一的,而是其 domain 中唯一的。

Domains

Domain 是 projects, user 跟群组的上层容器。 每个上述资源都由一个 domain 拥有。 每个 domain 定义一个 namespace,其中存在 API 可见的 name attribute。 Keystone 提供了一个预设 Domain,Default。Keystone 中大部分的属性 (attributes) 都只有在其 domain 下为唯一。

Domain 的概念相对复杂一点,通常在比较小型的部属都只会使用 default Domain,但是在比较大型的部属可能会使用多个 domain 区分权限。

Assignment

Assignment 服务提供 role 跟 role assignments 的资料,达成 OpenStack 的 RBAC (Role Based Access Control)。
实际的权限管理可以在各个 OpenStack 元件的 policy.yaml 设定档进行管理。

角色 (Roles)

角色决定了使用者可以获得的授权级别。 可以在 domain 或 project level 授予角色。角色可以授予给使用者或是群组,而群组中的使用者会继承群角色所拥有的权限。

Role Assignments

记录实际角色跟资源关系的资料,是个具有角色,资源,和身分 (Identity) 的 3 元组 (tuple)。

Token

在使用者经过验证後会发予一个 token,後续对服务的群取会透过 token 做权限验证。Token 服务就是管理跟验证 token 的服务。

Catalog

Catalog 服务提供了一个用於端点发现 (endpoint discovey) 的端点注册表 (registry)。基本上记录了群集中所有 OpenStack 服务的端点。

小结

今天介绍了 OpenStack 服务的核心 Keystone,Keystone 蛮多概念都稍稍抽象一点,但在实际使用过後会比较好懂。下一篇将会介绍 OpenStack Neutron,也就是提供网路的服务。


<<:  [GAS] GBC上运作的Hello world!

>>:  Day-9 Excel筛选大秘辛

JavaScript Array | 与其他程序语言很不同的阵列(下)

今天接续昨天的Array方法 那我们开始吧!! splice() 可以新增删减阵列项目,也能指定位置...

Day 06 JavaScript/Rails AJAX

阿修的说文解字 AJAX 的全名是 Asynchronous JavaScript and XML ...

JavaScript入门 Day27_while回圈

今天要讲的是while回圈的另外一个用法 来看看下面的code吧 var i = 1; do { d...

3. 关於那些重要但无法帮助升迁的工作

前言 这篇真的是非常有意思的反思演讲,强烈推荐大家去听原演讲或看文字稿。 讲者主要讲述的是技术发展...

DE2_115(DAY1)以niosii去控制板子上的led灯

从学校拿到一块DE2_115,之前修DCLAB的时候只有接触Verilog的部分,现在想要学习板子上...