Openstack組件實現原理 — Keystone認證功能

前言

Keystone實現始終圍繞着Keystone所實現的功能來展開,所以在理解其實現之前,建議大家嘗試通過安裝Keystone這一個過程來感受Keystone在Openstack架構中所充當的角色。下面給出了Keystone-M的安裝過程。

Keystone安裝列表

Openstack組件部署 — Overview和前期環境準備 
Openstack組建部署 — Environment of Controller Node 
Openstack組件部署 — Keystone功能介紹與認證實現流程 
Openstack組件部署 — Keystone Install & Create service entity and API endpoints 
Openstack組件部署 — keystone(domain, projects, users, and roles)

Keystone架構

Keystone的管理對象

User:指使用Openstack service的用戶,可以是人、服務、系統,但凡使用了Openstack service的對象都可以稱爲User。

Project(Tenant):可以理解爲一個人、或服務所擁有的 資源集合 。在一個Project(Tenant)中可以包含多個User,每一個User都會根據權限的劃分來使用Project(Tenant)中的資源。比如通過Nova創建虛擬機時要指定到某個Project中,在Cinder創建卷也要指定到某個Project中。User訪問Project的資源前,必須要與該Project關聯,並且指定User在Project下的Role。

Role:用於劃分權限。可以通過給User指定Role,使User獲得Role對應的操作權限。Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role。系統默認使用管理Role admin和成員Role _member_ 。

Policy:OpenStack對User的驗證除了OpenStack的身份驗證以外,還需要鑑別User對某個Service是否有訪問權限。Policy機制就是用來控制User對Tenant中資源(包括Services)的操作權限。對於Keystone service來說,Policy就是一個JSON文件,默認是/etc/keystone/policy.json。通過配置這個文件,Keystone Service實現了對User基於Role的權限管理。

Token:是一個字符串表示,作爲訪問資源的令牌。Token包含了在 指定範圍和有效時間內 可以被訪問的資源。EG. 在Nova中一個tenant可以是一些虛擬機,在Swift和Glance中一個tenant可以是一些鏡像存儲,在Network中一個tenant可以是一些網絡資源。Token一般被User持有。

Credentials:用於確認用戶身份的憑證

Authentication:確定用戶身份的過程

Service:Openstack service,即Openstack中運行的組件服務。

Endpoint:一個可以通過網絡來訪問和定位某個Openstack service的地址,通常是一個URL。比如,當Nova需要訪問Glance服務去獲取image 時,Nova通過訪問Keystone拿到Glance的endpoint,然後通過訪問該endpoint去獲取Glance服務。我們可以通過Endpoint的region屬性去定義多個region。Endpoint 該使用對象分爲三類:

  • admin url –> 給admin用戶使用,Post:35357

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

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

public url可以被全局訪問,private url只能被局域網訪問,admin url被從常規的訪問中分離。

一個理解Keystone管理對象功能的例子

如果把賓館比作爲Openstack,那麼賓館的中央管理系統就是Keystone,入住賓館的人就是User 。在賓館中擁有很多不同的房間,房間提供了不同的服務(Service)。在入住賓館前,User需要給出身份證(Credential),中央管理系統(Keystone)在確認User的身份後(Authenticaiton),會給你一個房卡(Token)和導航地圖(Endpoint)。不同VIP(Role)級別的User,擁有不同權限的房卡(Token),如果你的VIP(Role)等級高,你可以享受到豪華的總統套房。然後User拿着房卡(Token)和地圖(Endpoint),就可以進入特定的房間去享受不同的Services。每一個服務(Services)中都擁有着一些特定資源(Project),例如:按摩服務中可以使用的精油種類和數量。User可以根據自己的權限來使用這些資源。

組件類比
Openstack賓館
Keystone中央管理系統
Project旅遊項目,擁有賓館的某些資源
User旅客
Credentials旅客的身份證
Authentication確定旅客身份的過程
Token房卡
RoleVIP等級
Endpoint服務提供場所的地址
Service賓館可以提供的服務類別

Keystone管理對象之間的關係

這裏寫圖片描述

Keystone V3的新特性

這節的內容引用自IBM developerWorks

  • Tenant 重命名爲 Project

  • 添加了 Domain 的概念

  • 添加了 Group 的概念

在本系列的Openstack-M版本中就使用了Keystone-V3。

V3的改進

問題1:在Keystone V2中,資源分配是以Tenant爲單位的,這不太符合現實世界中的層級關係。如一個公司在 Openstack中擁有兩個不同的項目,他需要管理兩個Tenant來分別對應這兩個項目,並對這兩個Tenant中的用戶分別分配角色。由於在Tenant之上並不存在一個更高層的概念,無法對 Tenant 進行統一的管理,所以這給多 Tenant 的用戶帶來了不便。 
解決:V3 利用 Domain 的概念實現真正的多租戶(multi-tenancy)架構,Domain 擔任 Project 的高層容器。雲服務的客戶是 Domain 的所有者,他們可以在自己的 Domain 中創建多個 Projects、Users、Groups 和 Roles。通過引入 Domain,雲服務客戶可以對其擁有的多個 Project 進行統一管理,而不必再向過去那樣對每一個 Project 進行單獨管理。 
簡而言之,Domain的引入是爲了將多個Project進行封裝,成爲單一實體再交付給相應的一個客戶使用

問題2:在 Keystone V2中,用戶的權限管理是以每一個用戶爲單位,需要對每一個用戶進行角色分配,並不存在一種對一組用戶進行統一管理的方案,這給系統管理員帶來了額外的工作和不便。 
解決:V3引入了Group的概念,Group 是一組 Users 的容器,可以向 Group 中添加用戶,並直接給 Group 分配角色,那麼在這個 Group 中的所有用戶就都擁有了 Group 所擁有的角色權限。通過引入 Group 的概念,Keystone V3 實現了對用戶組的管理,達到了同時管理一組用戶權限的目的。這與 V2 中直接向 User/Project 指定 Role 不同,使得對雲服務進行管理更加便捷。 
類比操作系統中的用戶組,是批量便捷操作的體現。

Authorization授權功能的應用

  • 授權(Authorization):授予用戶在一個服務中所擁有的權限

V3的組織結構 
這裏寫圖片描述 
一個 Domain 包含有 3 個 Project,可以通過 Group1 將 Role Sysadmin直接賦予 Domain1,那麼 Group1 中的所有用戶將會對 Domain1 中的所有 Projects 都擁有管理員權限。也可以通過 Group2 將 Role Engineer 只賦予 Project3,這樣 Group2 中的 User 就只擁有對 Project3 相應的權限,而不會影響其它 Projects。

不妨回顧一下,在Openstack組件部署 — keystone(domain, projects, users, and roles)一篇中,我們在domain default內創建了用於管理的project admin、User adminRole admin,並且將Role admin賦予了Project admin中的User admin。使得User admin擁有了管理員的權限。當然我們在這個操作中,並沒有使用到Group的功能,仍然直接對Tenant中的User分配了角色。

openstack domain create --description "Default Domain" defaultopenstack project create --domain default --description "Admin Project" admin
openstack user create --domain default --password-prompt admin
openstack role create admin
openstack role add --project admin --user admin admin  #User admin與Project admin關聯,並指定該用戶在該租戶下的角色Role admin,這樣用戶admin才能夠訪問租戶admin的資源1234512345

Authentication認證功能的應用過程

  • 身份認證(Authentication):令牌Token的發放和校驗

這裏寫圖片描述

Keystone 和其它 OpenStack service之間的交互和協同工作:首先User向Keystone提供自己的Credentials(憑證:用於確認用戶身份的數據,EG. username/password)。Keystone會從SQL Database中讀取數據對User提供的Credentials進行驗證,如驗證通過,會向User返回一個Token,該Token限定了可以在有效時間內被訪問的 OpenStack API Endpoint和資源 。此後User所有的Request都會使用該Token進行身份驗證。如用戶向Nova申請虛擬機服務,Nova會將User提供的Token發送給Keystone進行Verify驗證,Keystone會根據Token判斷User是否擁有執行申請虛擬機操作的權限,若驗證通過那麼Nova會向其提供相對應的服務。其它Openstack和Keystone的交互也是如此。 
所以Keystone在Openstack中所處的位置如下圖所示:

這裏寫圖片描述

版權聲明:轉載請註明出處 JmilkFan:http://blog.csdn.net/jmilk

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