一:簡介
一、作用
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。最后返回結果,實例已經創建
三:常用操作