您好,登錄后才能下訂單哦!
Keystone是OpenStack組件之一——Identity Service(認證服務)成立的核心項目。該項目整體上相對于其他項目并不復雜,其類似于一個服務總線,也可以理解為整個OpenStack服務框架的注冊表,OpenStack中其他項目通過Keystone可以注冊其服務然后獲得該服務的Endpoint(服務的訪問端口,或者理解為入口),這個Endpiont可以是一個也可以是多個。此外,任何服務之間的調用也需要通過Keystone的認證才能獲得目標服務的Endpoint來訪問對應服務。
當然,既然是認證服務,就有一定的認證機制,那么思考一下在生活中可以想到有什么類似認證的例子?
其實,這樣的例子很多,家家戶戶的鎖匙就是一種認證機制,再比如支付寶賬號密碼登錄也是認證機制的典型例子,再如,各種門票入場券都可以認為是一種認證機制。
總而言之,Keystone項目就是通過相應的認證授權形式來向其他服務或其他服務之間提供服務支持,其主要功能就是對用戶和服務進行管理的。因此我們要理解如何管理用戶以及服務,就需要對Keystone的主要模塊構成熟悉理解。
本小節將介紹Keystone對用戶和服務進行管理層面上對應組成概念及作用的介紹,介紹過程中涉及的術語都會在下文進行詳細介紹,可以自行查閱理解。
表示使用服務的用戶,可以是人,服務或者系統,只要是使用了openstack服務的對象都可以稱為用戶。當User對OpenStack進行訪問時,Keystone會對其身份進行驗證,驗證通過的用戶可以登錄OpenStack云平臺并且通過其頒發的Token(下面會講解)去訪問資源,用戶可以被分配到一個或者多個tenant或project(下文給出介紹)中。
表示使用訪問的租戶,作用是對資源進行分組,或者說是為了使提供的資源之間互相隔離,可以理解為一個一個容器,也稱為Project。
在一個租戶中可以擁有很多個用戶,用戶也可以隸屬于多個租戶,但必須至少屬于某個租戶。租戶中可使用資源的限制稱作Tenant Quotas,聯想一下Linux系統磁盤管理的磁盤配額,這個Quotas的含義就是配額、限額。用戶可以根據權限的劃分使用租戶中的資源。
表示提供進行驗證的令牌,是Keystone分配的用于訪問OpenStack API和資源服務的字符串文本。用戶的令牌可能在任何時間被撤銷(revoke),就是說用戶的Token是具有時間限制的,并且在OpenStack中Token是和特定的Tenant(租戶)綁定的,也就是說如果用戶屬于多個租戶,那么其就有多個具有時間限制的令牌。
表示用戶憑據,用來證明用戶身份的數據,可以是用戶名和密碼、用戶名和API Key,或者是Keystone認證分配的Token。
表示身份認證,是驗證用戶身份的過程。將上面的幾個結合起來簡單說明一下該過程。
首先,用戶申請訪問等請求,Keystone服務通過檢查用戶的Credential確定用戶身份;然后,在第一次對用戶進行認證時,用戶使用用戶名和密碼或用戶名和API Key作為Credential;其次,當用戶的Credential被驗證之后,Keystone會給用戶(用戶必定至少屬于一個租戶)分配一個Authentication Token來給該用戶之后去使用。
表示服務,有OpenStack提供,例如Nova、Swift或者Glance等等,每個服務提供一個或多個Endpoint(服務的入口)來給不同角色的用戶進行資源訪問以及操作。
表示服務的入口,是一個由Service監聽服務請求的網絡地址。客戶端要訪問某個service,就需要通過該service通過的Endpoint(通常是可以訪問的一個URL地址)。在OpenStack服務架構中,各個服務之間的相互訪問也需要通過服務的Endpoint才可以訪問對應的目標服務。
表示角色,類似一訪問控制列表——ACL的集合。主要是用于分配操作的權限。角色可以被指定給用戶,使得該用戶獲得角色對應的操作權限。其實在Keystone的認證機制中,分配給用戶的Token中包含了用戶的角色列表。
換言之,Role扮演的作用可以理解為:當服務被用戶訪問時,該服務會去解析用戶角色列表中的角色的權限(例如可以進行的操作權限、訪問哪些資源的權限)。
表示策略,用于控制某一個Tenant中的某一個User是否具備某個操作的權限。也就是說,通過Policy機制,依據配置文件(默認是在/etc/keystone/目錄下的policy.json文件),可以決定User可以執行什么操作,不能執行什么操作。
該文件內容格式如下(大致了解一下即可):
1 {
2 "admin_required": "role:admin or is_admin:1",
34 "identity:get_project": "rule:admin_required",
35 "identity:list_projects": "rule:admin_required",
......
45 "identity:delete_user": "rule:admin_required",
46 "identity:change_password": "rule:admin_or_owner",
47}
上篇文章介紹OpenStack的架構的時候給出過如下的一個架構圖,不知道是否有所印象或者之前在其他的文章中看見過:
通過該圖,我們可以直觀上了解Identity Service的Keystone服務是一個提供統一整體認證的項目,不僅建立自身與用戶之間的關系,也是其他服務之間進行資源訪問等操作的紐帶。
Keystone內部結構圖如下所示:
該結構非常簡單,上面是Keystone的服務和管理的API,下面是對應的各個后端服務應用,例如:令牌、編目、策略以及身份等方面的服務集合。說到這里,需要補充一點,Keystone可以集成普遍使用的目錄服務,如LDAP(輕量級目錄訪問協議)。
通過以上內容,想必對Keystone概念主要作用、組成部分以及結構模型有了自己的理解了。那么下面來理一下Keystone是如何進行工作的,或者說它的響應的流程是怎樣的。
下面通過一個用戶創建實例的過程中對于Keystone認證過程,結合示意圖來介紹整個Keystone服務的響應流程。在閱讀整個過程的同時體會理解上面的9個組成部分的作用,進行自己的思考加深理解。
下面以該創建實例虛擬機為例描述Keystone與其他服務之間的響應流程:
1、用戶首先向Keystone發送如用戶密碼之類的身份信息(用戶名和密碼或者用戶名和API key),Keystone驗證成功后向用戶配發Token;
2、之后用戶向Nova發出帶有Token的實例創建請求,Nova接收到請求后向Keystone驗證Token的有效性,確定該Token是否有效;
3、上述的Token被證實有效后,由Nova向Glance服務發出帶有Token的鏡像傳輸請求,Glance同樣要到Keystone去驗證Token的有效性;
4、上述的Token被證實有效后Glance向Nova正式提供鏡像目錄查詢和傳遞服務,Nova獲取鏡像后繼續向Neutron發送帶有Token的網絡創建服務,再由Neutron向Keystone求證Token的有效性;
5、Token被證實有效后,Neutron允許Nova使用網絡服務;
6、Nova啟動虛擬機成功,同時向用戶返回創建實例成功的通知。
本文旨在介紹Keystone的作用和工作原理,重點在于Keystone提供的認證服務,包含的9個主要部分內容,腦海里有其與其他組件以及用戶之間的關系,最為重要的就是Keystone是如何工作的,要對整個響應的工作流程非常熟悉理解。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。