OpenStack之Keystone學習


   OpenStack 管理了衆多的軟硬件資源,並且利用這些資源提供雲服務。而任何資源的管理,都會涉及到安全的管理,具體分爲:

        用戶認證

        服務認證

        口令認證

   無論是私有云還是共有云,都會開放許多的接口給衆多的用戶,而Keystone是OpneStone的安全組件,Keystone在對於用戶進行認證的同時,也對用戶的權限進行了限制。Keystone還保證OpenStack的服務可以正常註冊。此外,各個服務組件之間的消息傳遞還需要用口令,當口令過期,則不再使用此口令。


Domain相當於Keystone中的第一行政劃分,比如顯示世界中的國家

wKiom1mm3-Hh1-Q0AAG-w-YrBkY500.png

通過上圖我們可以看到,Users,,Groups,Projects都是劃分到了Domain中,即一個Domain會有各種各樣的Users,Groups,Projects;但是我們會發現,Roles在不同的Domain中是唯一的,且不屬於Domain.

在Keystone中,Users/Projects/Groups都是按照Domain劃分的。Role是全局的,即一個用戶在Domain A中是admin,那麼在Domain B中會也是admin


Projects/Tenant(這兩個是)是OpenStack中的一組資源打包之後的抽象,比如VMS ,images,Volumes等。意味着,這些資源都是歸這個Project/Tenant所擁有

Projects並不擁有users/users Groups(用戶/用戶組),users和users groups是利用role與Tenant產生聯繫的(稱爲Grant)


注:Projects和Tenant其實是等價的概念,只是因爲歷史原因,名稱不同罷了,現在一般都用Tenant



Roles

users必須依靠某個Tenant纔可以進入keystone的世界,而users與Tenant的橋樑就是Roles

如:在家裏,role=(兒子/父親/母親),在學校,roles=(教師/學生/職工)


而一個users要和Tenant取得聯繫,就必須被賦予某個角色,如userA 通過Admin角色進入Tenant,userB通過member角色進入到Tenant


問:有時候並不清楚一個user應該被加到那個Tenant中,則此時用戶如何直接與Keystone進行認證?


答:創建與用戶名同名的Tenant,如下圖


wKioL1mm44rjzjOmAAHUo3rnPH0021.png



在爲users綁定一個簡單的角色(role),如Admin,在綁定這個Admin給與users同名的Tenant,這樣用戶便可以直接與keystone進行交互

注:在創建Tenant時,我們可以故意將其創建的和用戶名稱一樣,這是一中取巧的方法


問:Tenant的作用是什麼?



wKiom1mm5kLDnbbrAABOT_qKhfY440.png

wKioL1mm5IOhUIFnAAIdM0r9BzE081.png

如王二這個users自己肯定是王二組的admin,但王二也有可能被分配到開發組,且在開發組是一個member,這樣王二就可以利用member這個role進入到開發組,從而使用開發組的資源,但是他的權限在開發組中是受到限制的


鄭五既是自己組的Admin有是開發組的Admin,即可以利用Admin這個role進入到開發組,並使用開發組的所有資源,並且擁有所有權限


王二和鄭五的區別就是對於開發組的role不同,則這兩個人對開發組的虛擬機資源的使用權限也就不同



Tenant作用的另一個場景

wKioL1mm5peieDm6AAGoWrY4-hM717.png


Keystone會創建一個叫做service的Tenant,然後通過service這個Tenant把OpenStack的所有其他服務都註冊到這個叫service的Tenant上面,如將Neutron,Nova,Galance等service服務全部註冊進入service這個Tenant中,從而對服務進行統一的管理



問:Domain的作用是什麼?

wKioL1mm6ATgpL7oAAL34NQb63M255.png

Domain主要是進行域的劃分

如有兩個域,一個爲亞太研發區,一個爲歐洲研發區

而在亞太研發區中,有2個Tenant,分別爲研發組和測試組;三個users,分別爲,研發經理,測試經理Peter,且Peter只是研發組和測試組這兩個Tenant的member(role 爲member)


通過這種行政劃分,我們便可以把不同的Domain,不同的Tenant,不同的users進行相應的綁定


問:如何區別不同Domain中同名的Tenant或users?

答:通過UUID來區分


在openstack/keystone中都是通過UUID進行區分的,所有的名稱都是給人看的,對Keystone來說,所有的的資源都是通過UUID區分的。


如在亞太研發區和歐洲研發區中都有Peter這個users這個用戶存在,單對openstack來說這是兩個用戶,只是名稱相同罷了,他們的UUID是不同的,同理研發組這個Tenant在兩個域中也是不同的,其UUID也不同


若UUID相等,則說明是指同一個資源,UUID是openstack中的身份證,可以將Keystone比作公安局,現實中的公安局也是通過身份證進行區分人的,而openstack中所有的資源,所有的內部識別都是通過UUID進行的區分


keystone 的認證哲學:

1: 我們都是自己的Admin,所以一般創建Tenant時會創建一個與自己同名的Tenant

2: users進入不同的Tenant時必須標識自己的角色是什麼(Admin,member)

3: 如果不在某個Tenant中,則對這個Tenant中資源是不可見的;因爲角色不同,Tenant中的資源權限也不相同


keystone中的認證流程:


wKiom1mm7GnRIU8LAAC4qPcGjUY574.png



即:需要進入keystone中一般要提供:密碼,用戶名,Domain名,Tenant。


問:是不是每次的認證都要提供用戶名和密碼?

答:並不是,第一次認證需要提供用戶名,密碼,Tenant,Domain,然後keystone會返回一個Token給用戶使用,以後每次都依靠keystone發送的Token進行認證


通過這個Token,可以查到這個用戶的密碼/用戶名/權限/屬於哪個Tenant等信息


下面是一個用戶創建虛擬機的流程

wKioL1mm8i-zJh_1AAJ4AthMqAc648.png



1:用戶發送證書就是提供了用戶名/密碼/Tenant/Domain

2:keystone返回一個令牌,令牌就是Token

3:用戶提供創建的請求+Token給Nova組件

4:Nova收到用戶提供的請求和Token後,會詢問keystone,用戶提供的Token是否合法?用戶是否能使用這個服務?若果keystone驗證沒有問題,則進入第五步

5:Nova提交常見鏡像的請求+Token給Glance,Glance收到Nova提供的請求和Token,會繼續詢問Token,這個Token是否合法,用戶是否可以使用此服務?如果keystone驗證通過,則一直往下走

。。。。。。。

。。。。。


可以看到openstack中,後面的所有服務都是採用Token進行認證的,所以用戶不必每次都輸入用戶名/密碼


問:keystone如何知道其他的服務在哪裏?怎麼知道其他的服務請求是否合法?

答:這是就要用到catalog


keystone除了負責用戶的認證之外,還負責Service Endpoint的管理。這個功能類似於現實 中的工商局,市場所有提供的服務都要在工商局進行註冊備案


在返回用戶的Token時,keystone也會返回所有在keystone上祖冊的服務列表

如下圖:

wKiom1mm9_HyCw66AAJ4aWzXegc501.png

1:用戶提供用戶名,密碼,Domain,Tenant

2:keystone返回Token + 各種已經註冊的服務的地址

3:用戶拿到Token +Nova的服務地址,則向Nova發起請求

4:Nova拿到用戶提供的Token,然後詢問keystone,Token是否合法 +用戶是否有權限使用服務。。。。。。。



Policy
Policy主要用來判斷一個用戶是不是Admin,是不是一個資源的owner等;Policy可以讓Roles這個這個角色正真的產生作用,即真正區分一個users能幹什麼?不能幹什麼?

Policy在當前還是靜態的,如判斷一個人是不是Admin,是通過policy.json裏面的定義進行的,接着通過“role==admin”......等判斷

下圖爲policy.json文件

wKiom1mm9Qqj1xPVAALxN50ZHUE284.png


keystone服務和特點:


wKiom1mm-Z7jUKjpAAJ7h3PnRMI234.png

identify:存儲了用戶,可以提供用戶相應的認證

Assignment:存儲了權限的管理

Resource:存儲了Tenant,Domain等

Token:用來解決用戶後續的認證(保證不必每次認證都需要輸入用戶名和密碼)

Catalog:存儲了所有已經在keystone上註冊過的服務信息和地址

Policy:真正實現Roles的作用,區分一個Users的權限



注:本文不涉及Keystone的安裝操作

keystone安裝完成之後,keystone還不能直接使用,還必須進行keystone的初始化。


1:向Catalog中註冊keystone服務

2:keystone註冊Admin用戶

3:keystone創建service Tenant

4:keystone穿件Demo用戶


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