在OOS中,一个完整的作业流程一般是这样,模板编写、创建模板、对模板创建执行、模板中任务执行的运转、执行进入最终状态。任务执行的运转发生在模板被创建执行成功后,一旦有任务执行运转,OOS引擎充当任务所对应动作的执行者,即任务执行的运转实则为OOS按照模板的定义完成具体的动作,常见的动作如API类动作,此类动作本质是去访问各种云产品API,不过访问云产品API是需要权限的,既然OOS需要权限,那么本文就介绍下是如何来管控OOS访问的权限(即OOS执行模板任务时访问其他云产品API所用的权限)。
本文将分多个小节来介绍OOS访问权限的控制,分别是授权的操作者、OOS权限的来源、授权的时间点、权限来源的选择、授权方式、RamRole、RamRole语法、OOS的权限策略、创建RAM角色、为RAM角色授权、为执行创建者授权。
概念解释
RAM角色,阿里云中的一种权限(策略)的载体,详情请参见RAM角色概览。
角色扮演,RAM角色可被云服务或阿里云账号扮演,一旦某个云服务(或账号)扮演了一个RAM角色,云服务(或账号)原来的权限会被RAM角色的权限替换掉,即云服务(或账号)对一切云产品资源的操作所使用的权限都是RAM角色的权限。
创建(更新)模板的权限,该权限面向RAM用户(子账号),指对OOS模板资源创建或更新的权限。
模板创建者,此文指一个RAM用户(子账号),具有创建模板、更新模板的权限。
创建执行的权限,该权限面向RAM用户(子账号),指对OOS模板创建执行的权限。
执行创建者,此文指一个RAM用户(子账号),具有创建执行的权限。
临时用户权限,即RAM用户(子账号)的临时安全令牌(STS)权限,该权限是阿里云提供的一种临时访问权限,具有时效性,详情请参见什么是STS。
执行,其代表模板的执行,执行是一个动态概念,其映射模板(静态概念)。
任务执行,其产生于模板创建执行成功后,表示任务的执行,任务执行是一个动态概念,其映射模板中的任务(静态概念)。
任务执行的触发者,任务执行运转的触发条件可以分两类,一类是执行创建者创建执行时,执行直接触发了任务执行的运转,运转结束后执行进入最终状态;另一类是执行创建者创建执行时,执行中的任务并未全部运转,而是当特定的事件或时间条件到来时才被触发的。
OOS的权限,OOS本身不具有访问其他云产品任何权限,当其执行模板中的任务时,其被赋予用来进行云产品访问的权限称之为OOS的权限。
执行的任务现场,任务现场是在一个执行中面向模板创建者来说的。在任务现场,即一个执行中所有活动(任务执行的运转)都是由模板创建者创建执行而触发的,直到执行进入最终状态(如Success)。有些生涩,对应在任务现场,您可了解下可能不在任务现场的模板类型,其更便于您理解任务现场这个概念。
可能不在任务现场的模板,一般有两种,一种是带触发器的模板;另一种是委托授权场景的模板。对于带触发器的模板,模板创建者创建一个执行,但执行中的活动(子任务执行的运转)是因为事件或时间的到来触发的,模板创建者只是把一个执行开始了,相当于其创建了一个包含任务执行的舞台,真正活动触发者并不是模板创建者这个用户,所以此类模板创建者一定不在任务现场。对于委托授权场景类的模板,当某个非模板创建者且有模板执行权限的用户,创建了该模板的一个执行,此执行中的活动(任务执行的运转)是执行创建者创建执行所触发的,和模板创建者是无关的。该场景下执行创建者和模板创建者可能不是一个用户,所以此类模板的模板创建者可能不在任务现场。
便于展开阅读,您可在概念解释一节中了解本文所涉及的概念。
授权的操作者
为保证用户对OOS权限的有效控制,对OOS权限完成授予的操作是非自动的,该操作需由OOS用户自行完成。
OOS权限的来源
本节将介绍您可把谁的权限授予给OOS,为适应不同模板类型,对OOS授予的权限有两种来源可选。一种是来自于临时用户,该用户是指创建执行的用户(账号),此类来源的权限有一定的时效性,过期无效,若选择该权限来源则表示OOS将使用临时用户的权限;另一种则是RAM角色,此类来源的权限具有较好稳定性,可作为稳定的权限来源,若选择该权限来源则表示OOS将通过扮演RAM角色获取权限,即其使用的权限为RAM角色的权限。
授权的时间点
本节将介绍何时完成对OOS授权的,在一个OOS作业流程中,根据任务执行运转所发生的时间节点,我们可以推断出对OOS的授权发生在创建执行成功之前,没错,实际上授权就是在创建模板或创建执行时完成的。在不同的授权场景下,完成授权的时间点也是不一样的,在委托授权场景下,授权完成发生在创建模板时;而在非委托授权场景下,授权是在创建执行时完成的。
OOS权限的授予
权限来源的选择
有些情况OOS的权限必须是稳定的,而不能是临时的权限,所以要选择RAM角色作为权限来源,即此时RAM角色必须存在模板中。根据两种权限来源的特性,如果是模板创建者可能不在任务现场的模板,则OOS只能使用RAM角色的权限;模板创建者一定在任务现场的模板,则RAM角色和临时用户均可作为OOS的权限来源。有关任务现场概念见概念解释一节,如需了解当模板类型为可能不在任务现场类型的模板时,为何OOS权限来源只能是RAM角色,请看如下分析。模板创建者可能不在任务现场的模板一般有两种,一种是模板含触发器动作的,另一种是模板属于委托授权场景的。本质上,含触发器模板的执行运行时间可能较长,并且对于模板创建者来说,执行中何时有活动(任务执行的运转)触发可预测性很低,假设就算模板创建者的可以准确预测活动的触发,并可将临时用户权限给OOS赋予成功,但接下来再有任务执行运转时OOS持有的权限是否有效仍是问题,所以必须在模板中指定OOS可稳定依赖的权限载体RAM角色,进而来保证该类模板任务执行的稳定。而委托授权场景,是当执行创建者和模板创建者不是同一用户(账号)时,为任何该模板的执行创建者都无需关心OOS的权限问题而设计的。即在权限层面,执行创建者只需要关心其自身是否有权限创建模板的执行就可以,那么只有当OOS的权限提前被授予,才能确保执行创建者无需关心OOS的权限问题,这样就免了执行创建者对OOS权限来源的选择与确认,于是最初模板创建者创建模板时就为模板指定一个稳定的权限来源,即一个固定的RAM角色,所以此类模板中RAM角色肯定是必须存在的。
授权方式
介绍了如何选择OOS权限来源后,接着介绍下不同权限来源的授权方式。当选择的权限来源为临时用户权限时,只需在创建执行的参数设置步骤中,选择执行使用到的权限来源为当前账号的已有权限即可,一旦该执行创建成功,则完成了对执行创建者的用户临时权限向OOS的授予。当选择的权限来源为RAM角色时,则可通过模板中的RamRole完成授权,关于RamRole是什么以及具体如何使用它,在下文会详细介绍。
RamRole
不同于临时用户权限,RAM角色这种权限来源可以在任何类型模板中使用,既然RAM角色对于模板作用如此强大,那么就介绍下如何对RAM角色权限源进行设置,首先要引入一个新名词,它就是RamRole
,RamRole是定义在模板中的字段,和Parameters、Tasks等在同一级。该字段的作用是为模板指定RAM角色,当该模板的任务执行运转时,OOS将扮演被指定的RAM角色,即OOS以该RAM角色的权限来访问任务所涉及的云产品API。
Ramrole字段指定的RAM角色仅对其所在模板有效,当且仅当该模板有任务执行运转时RAM角色权限发挥作用
RamRole语法
当模板创建成功时,若模板中未定义RamRole字段,则默认权限来源为临时用户权限,若模板中定义了RamRole字段,则RamRole指定的RAM角色存在两种情况,一种是RAM角色为非固定;另一种是RAM角色为固定的。当RamRole字段值是对一个参数的引用时,则此模板RamRole指向的RAM角色是非固定的,可在对该模板创建执行时,通过给Ramrole字段指向的参数传入具体的RAM角色名称来最终指定的RAM角色;也可在创建执行时,选择不指定RAM角色,即指定OOS的权限来源为临时用户权限。当RamRole字段值为一个具体的RAM角色名称时,则该模板RamRole指向的RAM角色是固定的。关于RAM角色权限授予时间点,当RamRole指向的RAM角色为固定时,OOS的权限是在模板创建成功时被授予的,此时权限被授予成功的模板称为委托授权场景下的模板;当RamRole指向的RAM角色为非固定时或者未定RamRole字段时,则OOS的权限是在成功创建执行时被授予的。
RamRole指向的RAM角色为非固定时,若模板中含触发器,则创建执行时最终确认的权限来源无法选择临时用户权限。
固定的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角色是非固定的,在创建该模板执行时,可通过给ramRoleNameParameter参数传的RAM角色名称来选择并指定RAM角色
JSON格式(请参考YAML注释说明)
{ "FormatVersion": "OOS-2019-06-01", "Description": "RamRole Usage", "RamRole": "{{ramRoleNameParameter}}" }
OOS权限策略的管理
本节将介绍如何来控制OOS可用权限的大小。当权限来源为临时用户时,OOS的权限策略与执行创建者是相同的,可通过给创建执行的用户授权不同的权限策略来管理OOS的权限。当权限来源为RAM角色时,OOS的权限策略则与RAM角色被授权的权限策略是相同的,那么通过管理该RAM角色,即授权不同的权限策略给该RAM角色,就可以实现对OOS权限大小的管理。
OOS的权限策略
OOS执行不同模板时需要的云产品OpenAPI权限集合不同,您可通过OOS的OpenAPI GenerateExecutionPolicy来获取待执行模板所需的权限集合,然后以模板所需最小权限集原则创建权限策略,并将权限策略授权给RAM角色或执行创建者;若想完全开放某类云产品的权限,您也可直接授权该云产品的FullAccess权限策略给RAM角色或执行创建者。
步骤一:创建RAM角色
登录RAM访问控制。
单击创建角色。
选择可信实体类型阿里云服务,单击下一步。
填写角色名称,此处的角色名称,应该与您的OOS模板中RamRole指向的RAM角色名称一致。
选择受信服务系统运维管理。
单击完成。
步骤二:为RAM角色授权
登录RAM访问控制。
单击新增授权。
授权主体选择您刚创建的角色,如OOSServiceRole;根据系统运维管理 OOS(CloudOps Orchestration Service)执行模板的实际需要,选择不同的权限。如您希望通过系统运维管理 OOS(CloudOps Orchestration Service)模板进行ECS的创建销毁启停等操作,则可以选择云产品ECS的FullAccess权限。
单击确定。
完成对该OOS角色的授权。
步骤三:为执行创建者授权
登录RAM访问控制。
单击新增授权。
授权主体选择执行创建者(即您创建执行时使用的阿里云账户),如testoos@example.com;根据系统运维管理 OOS(CloudOps Orchestration Service)执行模板的实际需要,选择不同的权限。如您希望通过系统运维管理 OOS(CloudOps Orchestration Service)模板进行ECS的创建销毁启动停止等操作,可以选择云产品ECS的FullAccess权限。
单击确定。
完成该OOS角色的授权。