keystone知識點
keystone主要功能:
- 認證 (Authentication)
- 授權
- 用戶管理
- 服務目錄管理
1. 用戶管理(User Management)
1.1 相關概念
在V2中,結構比較簡單,用一個三角形就可以明白
Keystone V3中的概念就比較多了,也相對復雜,文檔較少,比較推薦下面的文章:
2. 認證(Authentication )
Keystone有四種Token分別是 UUID、PKI、PKIZ、Fernet
四種token的生成方式演化過程:
比較各種方式的優缺點:
Token 類型 | UUID | PKI | PKIZ | Fernet |
---|---|---|---|---|
大小 | 32 Byte | KB 級別 | KB 級別 | 約 255 Byte |
支持本地認證 | 不支持 | 支持 | 支持 | 支持 |
Keystone 負載 | 大 | 小 | 小 | 大 |
存儲于數據庫 | 是 | 是 | 是 | 否 |
攜帶信息 | 無 | user, catalog 等 | user, catalog 等 | user 等 |
涉及加密方式 | 無 | 非對稱加密 | 非對稱加密 | 對稱加密 |
是否支持壓縮 | 否 | 否 | 是 | 否 |
版本支持 | D | G | J | K |
優點 | 生成的Token,長度較短,使用方便。url使用方便,回收的方式,就是從后端刪除即可,實現邏輯較為清晰。 | 使用證書及私鑰生成,可以線下驗證(不需要走keystone認證服務) | 較PKI長度上縮小了很多 | 設計的邏輯,引入序列化,負載格式加以控制,基于此進行加密,長度比PKI、PKIZ要短。 |
缺點 | 需要持久化后端存儲,每次訪問需要keystone相關服務進行認證。 | 長度負載重,不推薦用于生產部署,經常由于長度超長引起錯誤。 | 長度負載較重,同上PKI | 對稱加密算法,安全性低,需要周期性更換秘鑰 |
Token 類型的選擇涉及多個因素,包括 Keystone server 的負載、region 數量、安全因素、維護成本以及 token 本身的成熟度。region 的數量影響 PKI/PKIZ token 的大小,從安全的角度上看,UUID 無需維護密鑰,PKI 需要妥善保管 Keystone server 上的私鑰,Fernet 需要周期性的更換密鑰。
3. 授權(Authorization)
對于訪問控制Access Control,發現有多種http://en.wikipedia.org/wiki/Access_control,而Openstack采用的是Role Based Access Control RBAC。
其中在V2中采用的每個Service下面的policy.json文件,訪問控制是每個Service自己決策的。后來在V3中,除了policy.json文件,還可以將Policy在數據庫中創建,實現了keystone的統一管理。
推薦下面的文章:
Mandatory Access Control (MAC)在Openstack中也有應用,就是對Libvirt對Host文件的訪問控制AppArmor。當你使用virsh命令進行操作的時候,如果發現自己是root,但是還沒有權限,八成就是它的原因了。
推薦
4. 服務目錄管理
4.1 概念
Service 服務:一個 OpenStack 服務,比如Nova、Swift或者Glance等。每個服務提供一個或者多個 endpoint 供用戶訪問資源以及進行操作。
-
Endpoint 端點:一個網絡可訪問的服務地址,通過它你可以訪問一個服務,通常是個 URL 地址。不同 region 有不同的service endpoint。endpoint告訴也可告訴 OpenStack service 去哪里訪問特定的 servcie。比如,當 Nova 需要訪問 Glance 服務去獲取 image 時,Nova 通過訪問 Keystone 拿到 Glance 的 endpoint,然后通過訪問該 endpoint 去獲取Glance服務。我們可以通過Endpoint的 region 屬性去定義多個 region。Endpoint 該使用對象分為三類:
- adminurl 給 admin 用戶使用
- internalurl 給 OpenStack 內部服務使用來跟別的服務通信
- publicurl 可以給外部用戶訪問