keystone組件

引:  什麼是keystone

   爲何要有keystone

    keystone的功能

    keystone概念詳解

    keystone與openstack其他組件關係 

    keystone與其他組件協同工作流程

    keystone工作流程詳解


一、什麼是keystone


  keystone是 OpenStack Identity Service 的項目名稱,是一個負責身份管理與授權的組件。

主要功能:實現用戶的身份認證,基於角色的權限管理,及openstack其他組件的訪問地址和安全策略管理。



二 、爲何要有keystone


  Keystone項目的主要目的是給整個openstack的各個組件(nova,cinder,glance...)提供一個統一的驗證方式:

  openstack是由衆多組件構成的一套系統,該系統的功能是對外提供服務,因而我們可以將其定義爲一個‘龐大的軟件’,沒有軟件不考慮安全因素,Keystone對於通常的應用場景所不同的是他要解決分佈式環境下的統一認證。



三、keystone的功能

  openstack是一個SOA(面向服務的體系結,是一個組件模型,它將應用程序的不同功能單元(稱爲服務)通過這些服務之間定義良好的接口和契約聯繫起來)架構,理論上各子項目獨立提供相關服務,互不依賴。如nova提供計算服務,glance提供鏡像服務等。

  實際上所有的組件都依賴keystone,它有兩個功能:

(1)用戶管理:驗證用戶身份的合法性。

(2)服務目錄管理:提供服務目錄(ServiceCatalog:包括service和endpoint)服務,類似於UDDI服務的概念,用戶(無論是Dashboard, APIClient)都需要訪問Keystone獲取服務列表,以及每個服務的地址(Openstack中稱爲Endpoint)

四、 keystone概念詳解

User: 

使用 OpenStack Service 的的對象被稱爲用戶,這裏的用戶可以是人、服務、系統。


Credentials

用於確認用戶身份的憑證,

具體可以是:

1、用戶名和密碼

2、用戶名和API key

3、一個 Keystone 分配的身份token


Authentication 

確定用戶身份的過程。

1、是驗證用戶身份的過程。Keystone 服務通過檢查用戶的 Credential 來確定用戶的身份。

2、最開始,使用用戶名/密碼或者用戶名/API key作爲credential。當用戶的credential被驗證後,Kestone 會給用戶分配一個 authentication token 供該用戶後續的請求使用。 

3、Keystone中通過Policy(訪問規則)來做到基於用戶角色(Role)的訪問控制。


Token: 

1、令牌,使用一個字符串表示。

2、Token一般被用戶持有,Token包含了在指定範圍和有效時間內可以被訪問的資源。在Nova中一個tenant可以是一些虛擬機,在Swift和Glance中一個tenant可以是一些鏡像存儲,在Network中一個tenant可以是一些網絡資源。


Role:

1、本質就是一堆ACL的集合,用於劃分權限

2、可以通過給User指定Role,使User獲得Role對應的操作權限。

3、Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role,及每個role訪問資源或者進行操作的權限。

4、系統默認使用管理Role admin和成員Role _member_ 。

5、user驗證時必須帶有Project(Tenant)


Policy:

1、對於Keystone service來說,Policy就是一個JSON文件,默認是/etc/keystone/policy.json。通過配置這個文件,Keystone實現了對User基於Role的權限管理。

2、OpenStack對User的驗證除了OpenStack的身份驗證以外,還需要鑑別User對某個Service是否有訪問權限。Policy機制就是用來控制User對Project(Tenant)中資源的操作權限。

Service:

 指Openstack中運行的組件服務。

Endpoint:

1、是一個可以通過網絡來訪問和定位某個Openstack service的地址,通常是一個URL

2、不同的region有不同的endpoint(我們可以通過endpoint的region屬性去定義多個region)。

3、當Nova需要訪問Glance服務去獲取image 時,Nova通過訪問Keystone拿到Glance的endpoint,然後通過訪問該endpoint去獲取Glance服務。

4、Endpoint 分爲三類:

admin url –> 給admin用戶使用,Port:35357

internal url –> OpenStack內部服務使用來跟別的服務通信,Port:5000

public url –> 其它用戶可以訪問的地址,Port:5000



V3新增的概念:

Tenant 重命名爲 Project

添加了 Domain 的概念

添加了 Group 的概念


keystone管理和保存了user信息,管理user相關的tenant,role,group和domain等;用戶credential的存放,驗證,token管理,下圖是各部分關係

f6jUfyZ.jpg!web

User住賓館的人
Credentials開啓房間的鑰匙
Authentication賓館爲了拒絕不必要的人進出賓館,專門設置的機制,只有擁有鑰匙的人才能進出
Token口令
Tenant(project)賓館
Service賓館可以提供的服務類別,比如,飲食類,娛樂類
Endpoint具體的一種服務
RoleVIP 等級,VIP越高,享有越高的權限



五、keystone與openstack其他組件關係 

1036857-20170104170011534-1157086566.png

當用戶從keystone獲取token後,用該token訪問其他服務時,該service會再一次用該token去訪問keystone來驗證token的正確性。


六、keystone與其他組件協同工作流程

1036857-20170104172301503-1888194418.png

七、  keystone工作流程詳解

(1) User從Keystone獲取令牌以及服務列表;

(2) User訪問服務時,亮出自己的令牌。

(3)相關的服務向Keystone求證令牌的合法性。

1036857-20170104150218378-1240207654.png

1、用戶登錄keystone系統(password或者token的方式),獲取一個臨時的token和catalog服務目錄(v3版本登錄時,如果沒有指定scope,project或者domain,獲取的臨時token沒有任何權限,不能查詢project或者catalog)。


2、用戶通過臨時token獲取自己的所有的project列表。


3、用戶選定一個project,然後指定project重新登錄,獲取一個正式的token,同時獲得服務列表的endpoint,用戶選定一個endpoint,在HTTP消息頭中攜帶token,然後發送請求(如果用戶知道project name或者project id可以直接第3步登錄)。


4、消息到達endpoint之後,由服務端(nova)的keystone中間件(pipeline中的filter:authtoken)向keystone發送一個驗證token的請求。(token類型:uuid需要在keystone驗證token,pki類型的token本身是包含用戶詳細信息的加密串,可以在服務端完成驗證)


5、keystone驗證token成功之後,將token對應用戶的詳細信息,例如:role,username,userid等,返回給服務端(nova)。


6、服務端(nova)完成請求,例如:創建虛擬機。


7、服務端返回請求結果給用戶。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章