keystone知識點
keystone主要功能:
- 認證 (Authentication)
- 授權
- 用戶管理
- 服務目錄管理
1. 用戶管理(User Management)
1.1 相關概念
在V2中凡资,結構比較簡單,用一個三角形就可以明白
Keystone V3中的概念就比較多了怠益,也相對復雜综芥,文檔較少牵囤,比較推薦下面的文章:
2. 認證(Authentication )
Keystone有四種Token分別是 UUID斗塘、PKI古瓤、PKIZ止剖、Fernet
四種token的生成方式演化過程:
比較各種方式的優(yōu)缺點:
Token 類型 | UUID | PKI | PKIZ | Fernet |
---|---|---|---|---|
大小 | 32 Byte | KB 級別 | KB 級別 | 約 255 Byte |
支持本地認證 | 不支持 | 支持 | 支持 | 支持 |
Keystone 負載 | 大 | 小 | 小 | 大 |
存儲于數(shù)據(jù)庫 | 是 | 是 | 是 | 否 |
攜帶信息 | 無 | user, catalog 等 | user, catalog 等 | user 等 |
涉及加密方式 | 無 | 非對稱加密 | 非對稱加密 | 對稱加密 |
是否支持壓縮 | 否 | 否 | 是 | 否 |
版本支持 | D | G | J | K |
優(yōu)點 | 生成的Token,長度較短落君,使用方便穿香。url使用方便,回收的方式绎速,就是從后端刪除即可皮获,實現(xiàn)邏輯較為清晰。 | 使用證書及私鑰生成纹冤,可以線下驗證(不需要走keystone認證服務) | 較PKI長度上縮小了很多 | 設計的邏輯购公,引入序列化,負載格式加以控制宏浩,基于此進行加密将宪,長度比PKI绘闷、PKIZ要短。 |
缺點 | 需要持久化后端存儲较坛,每次訪問需要keystone相關服務進行認證。 | 長度負載重丑勤,不推薦用于生產(chǎn)部署,經(jīng)常由于長度超長引起錯誤法竞。 | 長度負載較重耙厚,同上PKI | 對稱加密算法,安全性低岔霸,需要周期性更換秘鑰 |
Token 類型的選擇涉及多個因素薛躬,包括 Keystone server 的負載呆细、region 數(shù)量、安全因素絮爷、維護成本以及 token 本身的成熟度。region 的數(shù)量影響 PKI/PKIZ token 的大小岖寞,從安全的角度上看柜蜈,UUID 無需維護密鑰仗谆,PKI 需要妥善保管 Keystone server 上的私鑰淑履,F(xiàn)ernet 需要周期性的更換密鑰鳖谈。
3. 授權(Authorization)
對于訪問控制Access Control阔涉,發(fā)現(xiàn)有多種http://en.wikipedia.org/wiki/Access_control捷绒,而Openstack采用的是Role Based Access Control RBAC。
其中在V2中采用的每個Service下面的policy.json文件暖侨,訪問控制是每個Service自己決策的崇渗。后來在V3中,除了policy.json文件葫掉,還可以將Policy在數(shù)據(jù)庫中創(chuàng)建跟狱,實現(xiàn)了keystone的統(tǒng)一管理俭厚。
推薦下面的文章:
Mandatory Access Control (MAC)在Openstack中也有應用驶臊,就是對Libvirt對Host文件的訪問控制AppArmor。當你使用virsh命令進行操作的時候扛门,如果發(fā)現(xiàn)自己是root纵寝,但是還沒有權限,八成就是它的原因了店雅。
推薦
4. 服務目錄管理
4.1 概念
Service 服務:一個 OpenStack 服務,比如Nova沮明、Swift或者Glance等窍奋。每個服務提供一個或者多個 endpoint 供用戶訪問資源以及進行操作。
-
Endpoint 端點:一個網(wǎng)絡可訪問的服務地址琳袄,通過它你可以訪問一個服務,通常是個 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 可以給外部用戶訪問