天天看點

Openstack元件實作原理 — Keystone認證功能目錄前言Keystone安裝清單Keystone架構Keystone V3的新特性Authorization授權功能的應用Authentication認證功能的應用過程

目錄

  • 目錄
  • 前言
  • Keystone安裝清單
  • Keystone架構
    • Keystone的管理對象
      • 一個了解Keystone管理對象功能的例子
      • Keystone管理對象之間的關系
  • Keystone V3的新特性
    • V3的改進
  • Authorization授權功能的應用
  • Authentication認證功能的應用過程

前言

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 房卡
Role VIP等級
Endpoint 服務提供場所的位址
Service 飯店可以提供的服務類别

Keystone管理對象之間的關系

Openstack元件實作原理 — Keystone認證功能目錄前言Keystone安裝清單Keystone架構Keystone V3的新特性Authorization授權功能的應用Authentication認證功能的應用過程

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的組織結構

Openstack元件實作原理 — Keystone認證功能目錄前言Keystone安裝清單Keystone架構Keystone V3的新特性Authorization授權功能的應用Authentication認證功能的應用過程

一個 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 admin

Role admin

,并且将

Role admin

賦予了

Project admin

中的

User admin

。使得

User admin

擁有了管理者的權限。當然我們在這個操作中,并沒有使用到Group的功能,仍然直接對Tenant中的User配置設定了角色。

openstack domain create --description "Default Domain" default
openstack 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的資源
           

Authentication認證功能的應用過程

  • 身份認證(Authentication):令牌Token的發放和校驗
Openstack元件實作原理 — Keystone認證功能目錄前言Keystone安裝清單Keystone架構Keystone V3的新特性Authorization授權功能的應用Authentication認證功能的應用過程

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中所處的位置如下圖所示:

Openstack元件實作原理 — Keystone認證功能目錄前言Keystone安裝清單Keystone架構Keystone V3的新特性Authorization授權功能的應用Authentication認證功能的應用過程