OpenStack工作原理——Token進(jìn)階

Keystone 負(fù)責(zé) OpenStack 的認(rèn)證和授權(quán)管理。當(dāng)用戶的 Credentials 被驗(yàn)證后,keystone 會(huì)給用戶分配一個(gè) Authentication token 作為用戶憑據(jù)去訪問其他組件的 API。

Token 分類

OpenStack Token 按授權(quán)范圍分有以下幾種:

  • Unscoped tokens
    * contains neither a service catalog, any roles, a project scope, nor a domain scope
    * use to generate scoped tokens

  • Project-scoped tokens
    * operate in a specific tenancy of the cloud

  • Domain-scoped tokens
    * domain-level administrator to operate a domain

  • System-scoped tokens
    * operate system-level resources,e.g. endpoints, service, hypervisors

按生成方式分:

  • UUID tokens
    * 32 bytes in length and must be persisted

  • PKI tokens
    * CA certificate issued by external CA

  • PKIZ tokens
    * zipped PKI token

  • Fernet tokens
    * do not need to be persisted
    * AES256 encryption is used to protect the information stored in the token
    * integrity is verified with a SHA256 HMAC signature

Token 認(rèn)證流程

OpenStack Token 認(rèn)證流程

其中 OpenStack API 接受到用戶 token 后向 keystone 認(rèn)證的步驟4、5是通過 keystone 提供的 WSGI middleware —— keystonemiddleware 實(shí)現(xiàn)的:

  1. 在各個(gè)組件的 api-paste.ini 配置文件中引入 auth_token filter:
api-paste filter 配置
  1. 在組件配置文件如 nova.conf 中配置 keystone 參數(shù):
Nova 認(rèn)證配置

Token 變遷史

OpenStack D 版本時(shí),僅有 UUID 類型的 Token,UUID token 簡單易用,卻容易給 Keystone 帶來性能問題,每當(dāng) OpenStack API 收到用戶請求,都需要向 Keystone 驗(yàn)證該 token 是否有效。隨著集群規(guī)模的擴(kuò)大,Keystone 需處理大量驗(yàn)證 token 的請求,在高并發(fā)下容易出現(xiàn)性能問題,而且需要持久化到數(shù)據(jù)庫中,與日俱增積累的大量 token 引起數(shù)據(jù)庫性能下降,所以用戶需經(jīng)常清理數(shù)據(jù)庫的 過期 token。

于是 PKI(Public Key Infrastructrue) token 在 G 版本應(yīng)運(yùn)而生,和 UUID 相比,PKI token 攜帶更多用戶信息的同時(shí)還附上了數(shù)字簽名,以支持本地認(rèn)證,從而避免了和 keystone 交互過程。而因?yàn)?PKI token 攜帶了更多的信息,包括 service catalog,隨著 OpenStack 的 Region 數(shù)增多,service catalog 攜帶的 endpoint 數(shù)量越多,PKI token 也相應(yīng)增大,很容易超出 HTTP Server 允許的最大 HTTP Header(默認(rèn)為 8 KB),導(dǎo)致 HTTP 請求失敗。PKI 的過期管理和安全問題也需要用戶考慮,給實(shí)際應(yīng)用帶來了額外的開銷。

PKIZ token 就是 PKI token 的改進(jìn)壓縮版,但壓縮效果有限,無法良好的處理 token size 過大問題。PKI 和 PKIZ 類型的 token 由于安全性和使用上的不便,在 P 版本已被廢棄。

為了解決前面種種問題,社區(qū)引入了 Fernet token,它攜帶了少量的用戶信息,實(shí)際 token 大小約為 255 Byte,采用了對稱加密,無需存于數(shù)據(jù)庫中,解析傳輸效率很高,現(xiàn)在已成為 keystone 的默認(rèn) token 類型。

Token 類型比較

Token 類型 UUID PKI PKIZ Fernet
大小 32 Byte KB 級別 KB 級別 約 255 Byte
支持本地認(rèn)證 不支持 支持 支持 不支持
Keystone 負(fù)載
存儲(chǔ)于數(shù)據(jù)庫
攜帶信息 user, catalog 等 user, catalog 等 user 等
涉及加密方式 非對稱加密 非對稱加密 對稱加密(AES)
是否壓縮
需要預(yù)配置
版本支持 D G J K
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • keystone四種token keystone的四種token為:UUID token、PKI token、PK...
    愛吃土豆的程序猿閱讀 1,790評論 0 5
  • 序言 近幾年,計(jì)算機(jī)不斷冒出新技術(shù),包括云計(jì)算、大數(shù)據(jù)、人工智能、區(qū)塊鏈等等。 由于工作原因,最近有機(jī)會(huì)接觸云計(jì)算...
    蛋蛋鄰里閱讀 1,408評論 0 1
  • 在OpenStack的框架體系中Keystone的作用類似于一個(gè)服務(wù)總線,為OpenStack提供身份管理服務(wù)(I...
    草帽豆子閱讀 1,246評論 0 2
  • 作者:Maxwell Li日期:2016/12/21未經(jīng)作者允許,禁止轉(zhuǎn)載本文任何內(nèi)容。如需轉(zhuǎn)載請留言。 什么是 ...
    Maxwell_Li閱讀 2,033評論 0 0
  • keystone知識(shí)點(diǎn) keystone主要功能: 認(rèn)證 (Authentication) 授權(quán) 用戶管理 服務(wù)目...
    crowns閱讀 1,574評論 1 1

友情鏈接更多精彩內(nèi)容