訪問控制角色(RamRole)
在OOS中,一個完整的作業(yè)流程一般是這樣,模板編寫、創(chuàng)建模板、對模板創(chuàng)建執(zhí)行、模板中任務(wù)執(zhí)行的運轉(zhuǎn)、執(zhí)行進入最終狀態(tài)。任務(wù)執(zhí)行的運轉(zhuǎn)發(fā)生在模板被創(chuàng)建執(zhí)行成功后,一旦有任務(wù)執(zhí)行運轉(zhuǎn),OOS引擎充當(dāng)任務(wù)所對應(yīng)動作的執(zhí)行者,即任務(wù)執(zhí)行的運轉(zhuǎn)實則為OOS按照模板的定義完成具體的動作,常見的動作如API類動作,此類動作本質(zhì)是去訪問各種云產(chǎn)品API,不過訪問云產(chǎn)品API是需要權(quán)限的,既然OOS需要權(quán)限,那么本文就介紹下是如何來管控OOS訪問的權(quán)限(即OOS執(zhí)行模板任務(wù)時訪問其他云產(chǎn)品API所用的權(quán)限)。
本文將分多個小節(jié)來介紹OOS訪問權(quán)限的控制,分別是授權(quán)的操作者、OOS權(quán)限的來源、授權(quán)的時間點、權(quán)限來源的選擇、授權(quán)方式、RamRole、RamRole語法、OOS的權(quán)限策略、創(chuàng)建RAM角色、為RAM角色授權(quán)、為執(zhí)行創(chuàng)建者授權(quán)。
概念解釋
RAM角色,阿里云中的一種權(quán)限(策略)的載體,詳情請參見RAM角色概覽。
角色扮演,RAM角色可被云服務(wù)或阿里云賬號扮演,一旦某個云服務(wù)(或賬號)扮演了一個RAM角色,云服務(wù)(或賬號)原來的權(quán)限會被RAM角色的權(quán)限替換掉,即云服務(wù)(或賬號)對一切云產(chǎn)品資源的操作所使用的權(quán)限都是RAM角色的權(quán)限。
創(chuàng)建(更新)模板的權(quán)限,該權(quán)限面向RAM用戶(子賬號),指對OOS模板資源創(chuàng)建或更新的權(quán)限。
模板創(chuàng)建者,此文指一個RAM用戶(子賬號),具有創(chuàng)建模板、更新模板的權(quán)限。
創(chuàng)建執(zhí)行的權(quán)限,該權(quán)限面向RAM用戶(子賬號),指對OOS模板創(chuàng)建執(zhí)行的權(quán)限。
執(zhí)行創(chuàng)建者,此文指一個RAM用戶(子賬號),具有創(chuàng)建執(zhí)行的權(quán)限。
臨時用戶權(quán)限,即RAM用戶(子賬號)的臨時安全令牌(STS)權(quán)限,該權(quán)限是阿里云提供的一種臨時訪問權(quán)限,具有時效性,詳情請參見什么是STS。
執(zhí)行,其代表模板的執(zhí)行,執(zhí)行是一個動態(tài)概念,其映射模板(靜態(tài)概念)。
任務(wù)執(zhí)行,其產(chǎn)生于模板創(chuàng)建執(zhí)行成功后,表示任務(wù)的執(zhí)行,任務(wù)執(zhí)行是一個動態(tài)概念,其映射模板中的任務(wù)(靜態(tài)概念)。
任務(wù)執(zhí)行的觸發(fā)者,任務(wù)執(zhí)行運轉(zhuǎn)的觸發(fā)條件可以分兩類,一類是執(zhí)行創(chuàng)建者創(chuàng)建執(zhí)行時,執(zhí)行直接觸發(fā)了任務(wù)執(zhí)行的運轉(zhuǎn),運轉(zhuǎn)結(jié)束后執(zhí)行進入最終狀態(tài);另一類是執(zhí)行創(chuàng)建者創(chuàng)建執(zhí)行時,執(zhí)行中的任務(wù)并未全部運轉(zhuǎn),而是當(dāng)特定的事件或時間條件到來時才被觸發(fā)的。
OOS的權(quán)限,OOS本身不具有訪問其他云產(chǎn)品任何權(quán)限,當(dāng)其執(zhí)行模板中的任務(wù)時,其被賦予用來進行云產(chǎn)品訪問的權(quán)限稱之為OOS的權(quán)限。
執(zhí)行的任務(wù)現(xiàn)場,任務(wù)現(xiàn)場是在一個執(zhí)行中面向模板創(chuàng)建者來說的。在任務(wù)現(xiàn)場,即一個執(zhí)行中所有活動(任務(wù)執(zhí)行的運轉(zhuǎn))都是由模板創(chuàng)建者創(chuàng)建執(zhí)行而觸發(fā)的,直到執(zhí)行進入最終狀態(tài)(如Success)。有些生澀,對應(yīng)在任務(wù)現(xiàn)場,您可了解下可能不在任務(wù)現(xiàn)場的模板類型,其更便于您理解任務(wù)現(xiàn)場這個概念。
可能不在任務(wù)現(xiàn)場的模板,一般有兩種,一種是帶觸發(fā)器的模板;另一種是委托授權(quán)場景的模板。對于帶觸發(fā)器的模板,模板創(chuàng)建者創(chuàng)建一個執(zhí)行,但執(zhí)行中的活動(子任務(wù)執(zhí)行的運轉(zhuǎn))是因為事件或時間的到來觸發(fā)的,模板創(chuàng)建者只是把一個執(zhí)行開始了,相當(dāng)于其創(chuàng)建了一個包含任務(wù)執(zhí)行的舞臺,真正活動觸發(fā)者并不是模板創(chuàng)建者這個用戶,所以此類模板創(chuàng)建者一定不在任務(wù)現(xiàn)場。對于委托授權(quán)場景類的模板,當(dāng)某個非模板創(chuàng)建者且有模板執(zhí)行權(quán)限的用戶,創(chuàng)建了該模板的一個執(zhí)行,此執(zhí)行中的活動(任務(wù)執(zhí)行的運轉(zhuǎn))是執(zhí)行創(chuàng)建者創(chuàng)建執(zhí)行所觸發(fā)的,和模板創(chuàng)建者是無關(guān)的。該場景下執(zhí)行創(chuàng)建者和模板創(chuàng)建者可能不是一個用戶,所以此類模板的模板創(chuàng)建者可能不在任務(wù)現(xiàn)場。
便于展開閱讀,您可在概念解釋一節(jié)中了解本文所涉及的概念。
授權(quán)的操作者
為保證用戶對OOS權(quán)限的有效控制,對OOS權(quán)限完成授予的操作是非自動的,該操作需由OOS用戶自行完成。
OOS權(quán)限的來源
本節(jié)將介紹您可把誰的權(quán)限授予給OOS,為適應(yīng)不同模板類型,對OOS授予的權(quán)限有兩種來源可選。一種是來自于臨時用戶,該用戶是指創(chuàng)建執(zhí)行的用戶(賬號),此類來源的權(quán)限有一定的時效性,過期無效,若選擇該權(quán)限來源則表示OOS將使用臨時用戶的權(quán)限;另一種則是RAM角色,此類來源的權(quán)限具有較好穩(wěn)定性,可作為穩(wěn)定的權(quán)限來源,若選擇該權(quán)限來源則表示OOS將通過扮演RAM角色獲取權(quán)限,即其使用的權(quán)限為RAM角色的權(quán)限。
授權(quán)的時間點
本節(jié)將介紹何時完成對OOS授權(quán)的,在一個OOS作業(yè)流程中,根據(jù)任務(wù)執(zhí)行運轉(zhuǎn)所發(fā)生的時間節(jié)點,我們可以推斷出對OOS的授權(quán)發(fā)生在創(chuàng)建執(zhí)行成功之前,沒錯,實際上授權(quán)就是在創(chuàng)建模板或創(chuàng)建執(zhí)行時完成的。在不同的授權(quán)場景下,完成授權(quán)的時間點也是不一樣的,在委托授權(quán)場景下,授權(quán)完成發(fā)生在創(chuàng)建模板時;而在非委托授權(quán)場景下,授權(quán)是在創(chuàng)建執(zhí)行時完成的。
OOS權(quán)限的授予
權(quán)限來源的選擇
有些情況OOS的權(quán)限必須是穩(wěn)定的,而不能是臨時的權(quán)限,所以要選擇RAM角色作為權(quán)限來源,即此時RAM角色必須存在模板中。根據(jù)兩種權(quán)限來源的特性,如果是模板創(chuàng)建者可能不在任務(wù)現(xiàn)場的模板,則OOS只能使用RAM角色的權(quán)限;模板創(chuàng)建者一定在任務(wù)現(xiàn)場的模板,則RAM角色和臨時用戶均可作為OOS的權(quán)限來源。有關(guān)任務(wù)現(xiàn)場概念見概念解釋一節(jié),如需了解當(dāng)模板類型為可能不在任務(wù)現(xiàn)場類型的模板時,為何OOS權(quán)限來源只能是RAM角色,請看如下分析。模板創(chuàng)建者可能不在任務(wù)現(xiàn)場的模板一般有兩種,一種是模板含觸發(fā)器動作的,另一種是模板屬于委托授權(quán)場景的。本質(zhì)上,含觸發(fā)器模板的執(zhí)行運行時間可能較長,并且對于模板創(chuàng)建者來說,執(zhí)行中何時有活動(任務(wù)執(zhí)行的運轉(zhuǎn))觸發(fā)可預(yù)測性很低,假設(shè)就算模板創(chuàng)建者的可以準(zhǔn)確預(yù)測活動的觸發(fā),并可將臨時用戶權(quán)限給OOS賦予成功,但接下來再有任務(wù)執(zhí)行運轉(zhuǎn)時OOS持有的權(quán)限是否有效仍是問題,所以必須在模板中指定OOS可穩(wěn)定依賴的權(quán)限載體RAM角色,進而來保證該類模板任務(wù)執(zhí)行的穩(wěn)定。而委托授權(quán)場景,是當(dāng)執(zhí)行創(chuàng)建者和模板創(chuàng)建者不是同一用戶(賬號)時,為任何該模板的執(zhí)行創(chuàng)建者都無需關(guān)心OOS的權(quán)限問題而設(shè)計的。即在權(quán)限層面,執(zhí)行創(chuàng)建者只需要關(guān)心其自身是否有權(quán)限創(chuàng)建模板的執(zhí)行就可以,那么只有當(dāng)OOS的權(quán)限提前被授予,才能確保執(zhí)行創(chuàng)建者無需關(guān)心OOS的權(quán)限問題,這樣就免了執(zhí)行創(chuàng)建者對OOS權(quán)限來源的選擇與確認(rèn),于是最初模板創(chuàng)建者創(chuàng)建模板時就為模板指定一個穩(wěn)定的權(quán)限來源,即一個固定的RAM角色,所以此類模板中RAM角色肯定是必須存在的。
授權(quán)方式
介紹了如何選擇OOS權(quán)限來源后,接著介紹下不同權(quán)限來源的授權(quán)方式。當(dāng)選擇的權(quán)限來源為臨時用戶權(quán)限時,只需在創(chuàng)建執(zhí)行的參數(shù)設(shè)置步驟中,選擇執(zhí)行使用到的權(quán)限來源為當(dāng)前賬號的已有權(quán)限即可,一旦該執(zhí)行創(chuàng)建成功,則完成了對執(zhí)行創(chuàng)建者的用戶臨時權(quán)限向OOS的授予。當(dāng)選擇的權(quán)限來源為RAM角色時,則可通過模板中的RamRole完成授權(quán),關(guān)于RamRole是什么以及具體如何使用它,在下文會詳細(xì)介紹。
RamRole
不同于臨時用戶權(quán)限,RAM角色這種權(quán)限來源可以在任何類型模板中使用,既然RAM角色對于模板作用如此強大,那么就介紹下如何對RAM角色權(quán)限源進行設(shè)置,首先要引入一個新名詞,它就是RamRole
,RamRole是定義在模板中的字段,和Parameters、Tasks等在同一級。該字段的作用是為模板指定RAM角色,當(dāng)該模板的任務(wù)執(zhí)行運轉(zhuǎn)時,OOS將扮演被指定的RAM角色,即OOS以該RAM角色的權(quán)限來訪問任務(wù)所涉及的云產(chǎn)品API。
Ramrole字段指定的RAM角色僅對其所在模板有效,當(dāng)且僅當(dāng)該模板有任務(wù)執(zhí)行運轉(zhuǎn)時RAM角色權(quán)限發(fā)揮作用
RamRole語法
當(dāng)模板創(chuàng)建成功時,若模板中未定義RamRole字段,則默認(rèn)權(quán)限來源為臨時用戶權(quán)限,若模板中定義了RamRole字段,則RamRole指定的RAM角色存在兩種情況,一種是RAM角色為非固定;另一種是RAM角色為固定的。當(dāng)RamRole字段值是對一個參數(shù)的引用時,則此模板RamRole指向的RAM角色是非固定的,可在對該模板創(chuàng)建執(zhí)行時,通過給Ramrole字段指向的參數(shù)傳入具體的RAM角色名稱來最終指定的RAM角色;也可在創(chuàng)建執(zhí)行時,選擇不指定RAM角色,即指定OOS的權(quán)限來源為臨時用戶權(quán)限。當(dāng)RamRole字段值為一個具體的RAM角色名稱時,則該模板RamRole指向的RAM角色是固定的。關(guān)于RAM角色權(quán)限授予時間點,當(dāng)RamRole指向的RAM角色為固定時,OOS的權(quán)限是在模板創(chuàng)建成功時被授予的,此時權(quán)限被授予成功的模板稱為委托授權(quán)場景下的模板;當(dāng)RamRole指向的RAM角色為非固定時或者未定RamRole字段時,則OOS的權(quán)限是在成功創(chuàng)建執(zhí)行時被授予的。
RamRole指向的RAM角色為非固定時,若模板中含觸發(fā)器,則創(chuàng)建執(zhí)行時最終確認(rèn)的權(quán)限來源無法選擇臨時用戶權(quán)限。
固定的RAM角色
YAML格式
FormatVersion: OOS-2019-06-01 # 必填 Description: "RamRole Usage" # 可選 RamRole: "OOSServiceRole01" # 可選,訪問控制角色,RamRole字段值為一個具體的RAM角色名模板,該模板RamRole指向的RAM角色是固定的
JSON格式(請參考YAML注釋說明)
{ "FormatVersion": "OOS-2019-06-01", "Description": "RamRole Usage", "RamRole": "OOSServiceRole01" }
可變的RAM角色
YAML格式
FormatVersion: OOS-2019-06-01 # 必填 Description: "RamRole Usage" # 可選 RamRole: "{{ramRoleNameParameter}}" 模板可選,訪問控制角色,此模板RamRole指向的RAM角色是非固定的,在創(chuàng)建該模板執(zhí)行時,可通過給ramRoleNameParameter參數(shù)傳的RAM角色名稱來選擇并指定RAM角色
JSON格式(請參考YAML注釋說明)
{ "FormatVersion": "OOS-2019-06-01", "Description": "RamRole Usage", "RamRole": "{{ramRoleNameParameter}}" }
OOS權(quán)限策略的管理
本節(jié)將介紹如何來控制OOS可用權(quán)限的大小。當(dāng)權(quán)限來源為臨時用戶時,OOS的權(quán)限策略與執(zhí)行創(chuàng)建者是相同的,可通過給創(chuàng)建執(zhí)行的用戶授權(quán)不同的權(quán)限策略來管理OOS的權(quán)限。當(dāng)權(quán)限來源為RAM角色時,OOS的權(quán)限策略則與RAM角色被授權(quán)的權(quán)限策略是相同的,那么通過管理該RAM角色,即授權(quán)不同的權(quán)限策略給該RAM角色,就可以實現(xiàn)對OOS權(quán)限大小的管理。
OOS的權(quán)限策略
OOS執(zhí)行不同模板時需要的云產(chǎn)品OpenAPI權(quán)限集合不同,您可通過OOS的OpenAPI GenerateExecutionPolicy來獲取待執(zhí)行模板所需的權(quán)限集合,然后以模板所需最小權(quán)限集原則創(chuàng)建權(quán)限策略,并將權(quán)限策略授權(quán)給RAM角色或執(zhí)行創(chuàng)建者;若想完全開放某類云產(chǎn)品的權(quán)限,您也可直接授權(quán)該云產(chǎn)品的FullAccess權(quán)限策略給RAM角色或執(zhí)行創(chuàng)建者。
步驟一:創(chuàng)建RAM角色
登錄RAM訪問控制。
單擊創(chuàng)建角色。
選擇可信實體類型阿里云服務(wù),單擊下一步。
填寫角色名稱,此處的角色名稱,應(yīng)該與您的OOS模板中RamRole指向的RAM角色名稱一致。
選擇受信服務(wù)系統(tǒng)運維管理。
單擊完成。
步驟二:為RAM角色授權(quán)
登錄RAM訪問控制。
單擊新增授權(quán)。
授權(quán)主體選擇您剛創(chuàng)建的角色,如OOSServiceRole;根據(jù)系統(tǒng)運維管理 OOS(CloudOps Orchestration Service)執(zhí)行模板的實際需要,選擇不同的權(quán)限。如您希望通過系統(tǒng)運維管理 OOS(CloudOps Orchestration Service)模板進行ECS的創(chuàng)建銷毀啟停等操作,則可以選擇云產(chǎn)品ECS的FullAccess權(quán)限。
單擊確定。
完成對該OOS角色的授權(quán)。
步驟三:為執(zhí)行創(chuàng)建者授權(quán)
登錄RAM訪問控制。
單擊新增授權(quán)。
授權(quán)主體選擇執(zhí)行創(chuàng)建者(即您創(chuàng)建執(zhí)行時使用的阿里云賬戶),如testoos@example.com;根據(jù)系統(tǒng)運維管理 OOS(CloudOps Orchestration Service)執(zhí)行模板的實際需要,選擇不同的權(quán)限。如您希望通過系統(tǒng)運維管理 OOS(CloudOps Orchestration Service)模板進行ECS的創(chuàng)建銷毀啟動停止等操作,可以選擇云產(chǎn)品ECS的FullAccess權(quán)限。
單擊確定。
完成該OOS角色的授權(quán)。