上一篇介紹了歷史最悠久的 OpenStack 元件 Nova,這篇要來介紹目前 OpenStack 中算是最核心的元件,Keystone
Table of Contents
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,也就是提供網路的服務。
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.