OpenStack的Keystone組件詳解


一:簡介

    一、作用

       1. 用戶管理:驗證用戶身份信息合法性

       2. 認證服務:提供了其余所有組件的認證信息/令牌的管理,創建,修改等等,使用MySQL作為統一的數據庫。

       3. Keystone是Openstack用來進行身份驗證(authN)及高級授權(authZ)的身份識別服務,目前支持基於口令的authN和用戶服務授權。

 

    二、概念

       1. 租戶(Project):個人或服務所擁有的資源集合。在一個Project(Tenant)中可以包含多個User,每一個User都會根據權限的划分來使用Project(Tenant)中的資源。

       2. 用戶(User):訪問OpenStack的對象。用戶擁有證書(credentials),且可能分配給一個或多個租戶。經過驗證后,會為每個單獨的租戶提供一個特定的令牌。

       3. 證書(Credentials):確認用戶身份的憑證。可以是用戶名和密碼、用戶名和API Key和Token。

       4. 令牌(Token):一個字符串表示,作為訪問資源的令牌。Token包含了在指定范圍和有效時間內可以被訪問的資源,具有時效性。

       5. 角色(Role):用於划分權限。可以通過給User指定Role,使User獲得Role對應的操作權限。Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role。

       6. Policy:用來控制User對Project中資源(包括Services)的操作權限。對於Keystone service來說,Policy就是一個JSON文件,默認是/etc/keystone/policy.json。

       7. Authentication:確定用戶身份的過程

       8. 服務(Service):Openstack中運行的組件服務

       9. Endpoint:通過網絡來訪問和定位某個Openstack service的地址,通常是一個URL。分為三類:

           1. admin url —>管理員用戶使用 ,Port:35357

           2. internal url —>openstack內部組件間互相通信(內部訪問), Port:5000 (組件之間通信基於Restful api)

           3. public url —> 其他用戶訪問地址(全局訪問),Port:5000

          

 

二:架構

    一、工作原理

      

       1. 首先User向Keystone提供自己的Credentials(憑證:用於確認用戶身份的數據,EG. username/password)。

       2. Keystone根據User提供的Credentials從SQL Database中進行身份和權限校驗,驗證通過返回User一個Token和Endpoint 。

       3. User得到授權(Token)和Endpoint后根據自身權限操作OpenStack的資源

 

    二、在各個組件中的作用

      

       1. User通過命令行或者API的方式登錄后,提供自己的Credentials(憑證:用於確認用戶身份的數據,EG. username/password)。

       2. Keystone根據User提供的Credentials從SQL Database中進行身份和權限校驗,驗證通過返回User一個Token和Endpoint。

       3. 此后User所有的Request都會使用該Token進行身份驗證。

       4. 從以上過程可以看出,用戶的角色管理在 Keystone 中是很重要的工作。在Keystone V3之前,用戶的權限管理以每一個用戶為單位,需要對每一個用戶進行角色分配,並不存在一種對一組用戶進行統一管理的方案,這給系統管理員帶來了額外的工作和不便。此外,Keystone V3之前的版本中,資源分配是以 Tenant 為單位的,這不太符合現實世界中的層級關系。如一個公司在 Openstack 中擁有兩個不同的項目,他需要管理兩個Tenant來分別對應這兩個項目,並對這兩個 Tenant 中的用戶分別分配角色。由於在 Tenant 之上並不存在一個更高層的概念,無法對 Tenant 進行統一的管理,所以這給多 Tenant 的用戶帶來了不便。為了解決這些問題,Keystone V3 提出了新的概念Domain和Group。

 

    三、訪問流程

     

       1. User/API 想創建一個實例,首先會將自己的Credentials發給Keystone。認證成功后,keystone會頒給User/API一個臨時的令牌(Token)和一個訪問服務的Endpoint。

       2. User/API 把臨時Token提交給Keystone,Keystone返回一個Tenant(Project)。

       3. User/API 向Keystone發送帶有特定租戶的憑證(交互權限),告訴Keystone User/API在哪個項目中,Keystone收到請求后,會發送一個項目的Token到User/API (訪問權限),User/API 拿着Token和Endpoint找到可訪問服務。

       4. 服務向keystone進行認證,Token是否合法,它允許訪問使用該服務(判斷用戶/API中role權限)?

       5. Keystone向服務提供額外的信息。User/API是允許方法服務,這個Token匹配請求,這個Token是User/API的

       6. 服務執行User/API發起的請求,創建實例

       7. 服務會將狀態報告給用戶/API。最后返回結果,實例已經創建

 

三:常用操作

    

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM