Keystone是OpenStack組件之一——Identity Service(認(rèn)證服務(wù))成立的核心項(xiàng)目。該項(xiàng)目整體上相對(duì)于其他項(xiàng)目并不復(fù)雜,其類似于一個(gè)服務(wù)總線,也可以理解為整個(gè)OpenStack服務(wù)框架的注冊(cè)表,OpenStack中其他項(xiàng)目通過(guò)Keystone可以注冊(cè)其服務(wù)然后獲得該服務(wù)的Endpoint(服務(wù)的訪問(wèn)端口,或者理解為入口),這個(gè)Endpiont可以是一個(gè)也可以是多個(gè)。此外,任何服務(wù)之間的調(diào)用也需要通過(guò)Keystone的認(rèn)證才能獲得目標(biāo)服務(wù)的Endpoint來(lái)訪問(wèn)對(duì)應(yīng)服務(wù)。
創(chuàng)新互聯(lián)建站專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,成都服務(wù)器托管,成都服務(wù)器托管,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。
當(dāng)然,既然是認(rèn)證服務(wù),就有一定的認(rèn)證機(jī)制,那么思考一下在生活中可以想到有什么類似認(rèn)證的例子?
其實(shí),這樣的例子很多,家家戶戶的鎖匙就是一種認(rèn)證機(jī)制,再比如支付寶賬號(hào)密碼登錄也是認(rèn)證機(jī)制的典型例子,再如,各種門票入場(chǎng)券都可以認(rèn)為是一種認(rèn)證機(jī)制。
總而言之,Keystone項(xiàng)目就是通過(guò)相應(yīng)的認(rèn)證授權(quán)形式來(lái)向其他服務(wù)或其他服務(wù)之間提供服務(wù)支持,其主要功能就是對(duì)用戶和服務(wù)進(jìn)行管理的。因此我們要理解如何管理用戶以及服務(wù),就需要對(duì)Keystone的主要模塊構(gòu)成熟悉理解。
本小節(jié)將介紹Keystone對(duì)用戶和服務(wù)進(jìn)行管理層面上對(duì)應(yīng)組成概念及作用的介紹,介紹過(guò)程中涉及的術(shù)語(yǔ)都會(huì)在下文進(jìn)行詳細(xì)介紹,可以自行查閱理解。
表示使用服務(wù)的用戶,可以是人,服務(wù)或者系統(tǒng),只要是使用了openstack服務(wù)的對(duì)象都可以稱為用戶。當(dāng)User對(duì)OpenStack進(jìn)行訪問(wèn)時(shí),Keystone會(huì)對(duì)其身份進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)的用戶可以登錄OpenStack云平臺(tái)并且通過(guò)其頒發(fā)的Token(下面會(huì)講解)去訪問(wèn)資源,用戶可以被分配到一個(gè)或者多個(gè)tenant或project(下文給出介紹)中。
表示使用訪問(wèn)的租戶,作用是對(duì)資源進(jìn)行分組,或者說(shuō)是為了使提供的資源之間互相隔離,可以理解為一個(gè)一個(gè)容器,也稱為Project。
在一個(gè)租戶中可以擁有很多個(gè)用戶,用戶也可以隸屬于多個(gè)租戶,但必須至少屬于某個(gè)租戶。租戶中可使用資源的限制稱作Tenant Quotas,聯(lián)想一下Linux系統(tǒng)磁盤管理的磁盤配額,這個(gè)Quotas的含義就是配額、限額。用戶可以根據(jù)權(quán)限的劃分使用租戶中的資源。
表示提供進(jìn)行驗(yàn)證的令牌,是Keystone分配的用于訪問(wèn)OpenStack API和資源服務(wù)的字符串文本。用戶的令牌可能在任何時(shí)間被撤銷(revoke),就是說(shuō)用戶的Token是具有時(shí)間限制的,并且在OpenStack中Token是和特定的Tenant(租戶)綁定的,也就是說(shuō)如果用戶屬于多個(gè)租戶,那么其就有多個(gè)具有時(shí)間限制的令牌。
表示用戶憑據(jù),用來(lái)證明用戶身份的數(shù)據(jù),可以是用戶名和密碼、用戶名和API Key,或者是Keystone認(rèn)證分配的Token。
表示身份認(rèn)證,是驗(yàn)證用戶身份的過(guò)程。將上面的幾個(gè)結(jié)合起來(lái)簡(jiǎn)單說(shuō)明一下該過(guò)程。
首先,用戶申請(qǐng)?jiān)L問(wèn)等請(qǐng)求,Keystone服務(wù)通過(guò)檢查用戶的Credential確定用戶身份;然后,在第一次對(duì)用戶進(jìn)行認(rèn)證時(shí),用戶使用用戶名和密碼或用戶名和API Key作為Credential;其次,當(dāng)用戶的Credential被驗(yàn)證之后,Keystone會(huì)給用戶(用戶必定至少屬于一個(gè)租戶)分配一個(gè)Authentication Token來(lái)給該用戶之后去使用。
表示服務(wù),有OpenStack提供,例如Nova、Swift或者Glance等等,每個(gè)服務(wù)提供一個(gè)或多個(gè)Endpoint(服務(wù)的入口)來(lái)給不同角色的用戶進(jìn)行資源訪問(wèn)以及操作。
表示服務(wù)的入口,是一個(gè)由Service監(jiān)聽服務(wù)請(qǐng)求的網(wǎng)絡(luò)地址??蛻舳艘L問(wèn)某個(gè)service,就需要通過(guò)該service通過(guò)的Endpoint(通常是可以訪問(wèn)的一個(gè)URL地址)。在OpenStack服務(wù)架構(gòu)中,各個(gè)服務(wù)之間的相互訪問(wèn)也需要通過(guò)服務(wù)的Endpoint才可以訪問(wèn)對(duì)應(yīng)的目標(biāo)服務(wù)。
表示角色,類似一訪問(wèn)控制列表——ACL的集合。主要是用于分配操作的權(quán)限。角色可以被指定給用戶,使得該用戶獲得角色對(duì)應(yīng)的操作權(quán)限。其實(shí)在Keystone的認(rèn)證機(jī)制中,分配給用戶的Token中包含了用戶的角色列表。
換言之,Role扮演的作用可以理解為:當(dāng)服務(wù)被用戶訪問(wèn)時(shí),該服務(wù)會(huì)去解析用戶角色列表中的角色的權(quán)限(例如可以進(jìn)行的操作權(quán)限、訪問(wèn)哪些資源的權(quán)限)。
表示策略,用于控制某一個(gè)Tenant中的某一個(gè)User是否具備某個(gè)操作的權(quán)限。也就是說(shuō),通過(guò)Policy機(jī)制,依據(jù)配置文件(默認(rèn)是在/etc/keystone/目錄下的policy.json文件),可以決定User可以執(zhí)行什么操作,不能執(zhí)行什么操作。
該文件內(nèi)容格式如下(大致了解一下即可):
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的架構(gòu)的時(shí)候給出過(guò)如下的一個(gè)架構(gòu)圖,不知道是否有所印象或者之前在其他的文章中看見過(guò):
通過(guò)該圖,我們可以直觀上了解Identity Service的Keystone服務(wù)是一個(gè)提供統(tǒng)一整體認(rèn)證的項(xiàng)目,不僅建立自身與用戶之間的關(guān)系,也是其他服務(wù)之間進(jìn)行資源訪問(wèn)等操作的紐帶。
Keystone內(nèi)部結(jié)構(gòu)圖如下所示:
該結(jié)構(gòu)非常簡(jiǎn)單,上面是Keystone的服務(wù)和管理的API,下面是對(duì)應(yīng)的各個(gè)后端服務(wù)應(yīng)用,例如:令牌、編目、策略以及身份等方面的服務(wù)集合。說(shuō)到這里,需要補(bǔ)充一點(diǎn),Keystone可以集成普遍使用的目錄服務(wù),如LDAP(輕量級(jí)目錄訪問(wèn)協(xié)議)。
通過(guò)以上內(nèi)容,想必對(duì)Keystone概念主要作用、組成部分以及結(jié)構(gòu)模型有了自己的理解了。那么下面來(lái)理一下Keystone是如何進(jìn)行工作的,或者說(shuō)它的響應(yīng)的流程是怎樣的。
下面通過(guò)一個(gè)用戶創(chuàng)建實(shí)例的過(guò)程中對(duì)于Keystone認(rèn)證過(guò)程,結(jié)合示意圖來(lái)介紹整個(gè)Keystone服務(wù)的響應(yīng)流程。在閱讀整個(gè)過(guò)程的同時(shí)體會(huì)理解上面的9個(gè)組成部分的作用,進(jìn)行自己的思考加深理解。
下面以該創(chuàng)建實(shí)例虛擬機(jī)為例描述Keystone與其他服務(wù)之間的響應(yīng)流程:
1、用戶首先向Keystone發(fā)送如用戶密碼之類的身份信息(用戶名和密碼或者用戶名和API key),Keystone驗(yàn)證成功后向用戶配發(fā)Token;
2、之后用戶向Nova發(fā)出帶有Token的實(shí)例創(chuàng)建請(qǐng)求,Nova接收到請(qǐng)求后向Keystone驗(yàn)證Token的有效性,確定該Token是否有效;
3、上述的Token被證實(shí)有效后,由Nova向Glance服務(wù)發(fā)出帶有Token的鏡像傳輸請(qǐng)求,Glance同樣要到Keystone去驗(yàn)證Token的有效性;
4、上述的Token被證實(shí)有效后Glance向Nova正式提供鏡像目錄查詢和傳遞服務(wù),Nova獲取鏡像后繼續(xù)向Neutron發(fā)送帶有Token的網(wǎng)絡(luò)創(chuàng)建服務(wù),再由Neutron向Keystone求證Token的有效性;
5、Token被證實(shí)有效后,Neutron允許Nova使用網(wǎng)絡(luò)服務(wù);
6、Nova啟動(dòng)虛擬機(jī)成功,同時(shí)向用戶返回創(chuàng)建實(shí)例成功的通知。
本文旨在介紹Keystone的作用和工作原理,重點(diǎn)在于Keystone提供的認(rèn)證服務(wù),包含的9個(gè)主要部分內(nèi)容,腦海里有其與其他組件以及用戶之間的關(guān)系,最為重要的就是Keystone是如何工作的,要對(duì)整個(gè)響應(yīng)的工作流程非常熟悉理解。