讀古今文學網 > OpenStack系統架構設計實戰 > 11.2.1 Keystone介紹 >

11.2.1 Keystone介紹

Keystone的英文是OpenStack Identity Service,它是OpenStack框架中負責身份驗證、服務規則和服務令牌的功能,它實現了OpenStack的驗證API。Keystone類似於一個服務總線,或者說是整個OpenStack框架的註冊表,其他服務通過Keystone來註冊其服務的Endpoint(服務訪問的URL),任何服務之間相互的調用,都需要經過Keystone的身份驗證,才能獲得目標服務的Endpoint來找到目標服務。

Keystone基本概念如下。

1)User:用戶。通過Keystone訪問OpenStack服務的人或程序,Keystone會通過認證信息(credential),如密碼、API Key等驗證用戶請求的合法性,通過了驗證的用戶將會被分配一個特定的令牌,該令牌是用於後續資源訪問的一個通行證。

2)Tenant:租戶。它是各個服務中一些可以訪問的資源集合。例如,在Nova中,可以把租戶理解成一組虛擬機的擁有者,在Swift中則是一組容器的擁有者。基於此,需要在創建虛擬機時指定某個租戶,在Cinder創建卷也要指定具體的租戶。用戶默認總是綁定到某些租戶上,用戶訪問租戶的資源前,必須與該租戶關聯,並且指定該用戶在該租戶下的角色。

3)Role:角色。即一個用戶所具有的角色,角色不同意味著被賦予的權限不同,只有知道用戶所被授予的角色,才能知道該用戶是否有權限訪問某資源。用戶可以被添加到任意一個全局的或租戶內的角色中,在全局的角色中,用戶可以對所有的租戶執行角色所規定的權限;在租戶內的角色中,用戶僅可以在當前租戶內執行角色規定的權限。

4)Service:服務。比如Nova、Swift、Clance、Cinder等。根據前3個概念(User、Tenant和Role)一個服務可以確認當前用戶是否具有訪問其資源的權限。但是當一個用戶嘗試著訪問其租戶內的服務時,他必須知道這個服務是否存在,以及如何訪問這個服務,這裡通常使用不同的名稱表示不同的服務。前面介紹的角色,實際上也是可以綁定到某個服務的。例如,當Swift需要一個管理員權限的訪問進行對像創建時,對於相同的角色我們並不一定也需要對Nova進行管理員權限的訪問。為了實現這個目標,應該創建兩個獨立的管理員角色,一個綁定到Swift,另一個綁定到Nova,從而實現對Swift進行的管理員權限訪問不會影響到Nova或其他服務。

5)Endpoint:端點。可以理解為它是一個服務暴露出來的訪問點,如果需要訪問一個服務,則必須知道他的端點。因此,在Keystone中包含一個端點模板(Endpoint Template),在安裝Keystone時可以在conf文件夾下看到這個文件,這個模板提供了所有存在的服務的端點信息。一個端點模板包含一個URL列表,列表中的每個URL都對應一個服務實例的訪問地址,並且具有public、private和admin這3種權限。public URL可以被全局訪問(如http://compute.example.com),private URL只能被局域網訪問(如http://compute.example.local),admin URL被從常規的訪問中分離。

6)Token:令牌。用戶通過Credential獲取在某個租戶下的令牌,以及令牌的頒發時間和有效時間。

7)Credetial:憑證。可以是用戶的用戶名和密碼,或者是用戶名和API密鑰,或者是身份管理服務提供的認證令牌。

基於這些核心的概念,Keystone主要提供了Idcntity(認證)、Token(令牌)、Catalog(目錄)和Policy(安全策略,或者說訪問控制)4個方面的服務。

1)Identity:對用戶的身份進行驗證,用戶的身份憑證通常以用戶名和密碼的形式呈現,認證服務同時提供了與該用戶相關的元數據的提取。

2)Token:用Identity確認用戶的身份之後,會給用戶提供一個核實該身份並且可以用於請求後續資源的令牌,令牌服務則驗證並管理用於驗證身份的令牌。Keystone會頒發給通過認證服務的用戶兩種類型的令牌:一類是與用戶無關的令牌,通過這個令牌,可以向Keystone查詢租戶列表,用戶可以選擇要訪問的租戶;繼而可以獲取另—類與此租戶相綁定的令牌,只有通過與某個特定租戶相綁定的令牌,才可以訪問此租戶中的資源。令牌只在有限的時間內有效,如果需要刪除特定用戶的權限,刪除該令牌即可。

3)Catalog:對外提供一個服務的查詢目錄,或者說是每個服務可訪問的端點列表。服務目錄存有所有服務的端點信息,服務之間的資源訪問首先需要獲取該資源的端點信息,通常是一些URL列表,然後才可以根據該信息進行資源訪問。從目前的版本來看,Keystone提供的服務日錄是與令牌同時返回給用戶的。

4)Policy:一個基於規則的身份驗證引擎,通過配置文件來定義各種動作與用戶角色的匹配關係。嚴格來講,這部分內容現在已經不隸屬於Keystone項目了,因為訪問控制在不同的項目中都會涉及,所以這部分內容是作為Oslo的一部分進行開發維護的。

通過這幾個服務,Keystone在用戶與服務之間架起一道橋樑:用戶從Keystone獲取令牌以及服務列表;用戶訪問服務時,發送自己的令牌;相關的服務向Keystone求證令牌的合法性。

Keystone對用戶認證和服務認證的工作流程如圖11-1所示。

圖11-1 Keystone對用戶認證和服務認證的工作流程

1)用戶發送自己的憑證到Keystone,Keystone認證通過後,返回給用戶一個令牌以及服務目錄。

2)用戶根據服務目錄選擇需要的服務,包含令牌和服務請求一起發送給服務節點。

3)服務節點和Keystone交互驗證用戶的令牌的合法性。

4)如果令牌合法性通過驗證,服務節點執行用戶要求的服務,並返回結果給用戶;如果未通過驗證,回復合法性驗證不成功的結果給用戶。