在OOS中,一个完整的作业流程一般是这样,模版编写、创建模版、对模版创建执行、模版中任务执行的运转、执行进入最终状态。任务执行的运转发生在模版被创建执行成功后,一旦有任务执行运转,OOS引擎充当任务所对应动作的执行者,即任务执行的运转实则为OOS按照模版的定义完成具体的动作,常见的动作如API类动作,此类动作本质是去访问各种云产品API,不过访问云产品API是需要权限的,既然OOS需要权限,那么本文就介绍下是如何来管控OOS访问的权限(即OOS执行模版任务时访问其他云产品API所用的权限)。
本文将分多个小节来介绍OOS访问权限的控制,分别是授权的操作者、OOS权限的来源、授权的时间点、权限来源的选择、授权方式、RamRole、RamRole语法、OOS的权限策略、创建RAM角色、为RAM角色授权、为执行创建者授权。
授权的操作者
为保证用户对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
RamRole
,RamRole是定义在模版中的字段,和Parameters、Tasks等在同一级。该字段的作用是为模版指定RAM角色,当该模版的任务执行运转时,OOS将扮演被指定的RAM角色,即OOS以该RAM角色的权限来访问任务所涉及的云产品API。
RamRole语法
委托授权场景下的模版;当RamRole指向的RAM角色为非固定时或者未定RamRole字段时,则OOS的权限是在成功创建执行时被授予的。
-
固定的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}}" }
- YAML格式
OOS权限策略的管理
本节将介绍如何来控制OOS可用权限的大小。当权限来源为临时用户时,OOS的权限策略与执行创建者是相同的,可通过给创建执行的用户授权不同的权限策略来管理OOS的权限。当权限来源为RAM角色时,OOS的权限策略则与RAM角色被授权的权限策略是相同的,那么通过管理该RAM角色,即授权不同的权限策略给该RAM角色,就可以实现对OOS权限大小的管理。
OOS的权限策略
OOS执行不同模板时需要的云产品OpenAPI权限集合不同,您可通过OOS的OpenAPI GenerateExecutionPolicy来获取待执行模板所需的权限集合,然后以模版所需最小权限集原则创建权限策略,并将权限策略授权给RAM角色或执行创建者;若想完全开放某类云产品的权限,您也可直接授权该云产品的FullAccess权限策略给RAM角色或执行创建者。
创建RAM角色
- 登录RAM角色管理控制台。
- 单击新建RAM角色。
- 选择可信实体类型阿里云服务,单击下一步。
- 填写角色名称,此处的角色名称,应该与您的OOS模板中RamRole指向的RAM角色名称一致。
- 选择授信服务运维编排服务。
- 单击完成。
为RAM角色授权
- 登录RAM权限管理控制台。
- 单击新增授权。
- 被授权主体选择您刚创建的角色,如OOSServiceRole;根据运维编排服务执行模板的实际需要,选择不同的权限。如您希望通过运维编排模板进行ECS的创建销毁启停等操作,则可以选择云产品ECS的FullAccess权限。
- 单击确定。
完成该OOS角色的授权。
为执行创建者授权
- 登录RAM权限管理控制台。
- 单击新增授权。
- 被授权主体选择执行创建者(即您创建执行时使用的阿里云账户),如testoos@example.com;根据运维编排服务执行模板的实际需要,选择不同的权限。如您希望通过运维编排模板进行ECS的创建销毁启动停止等操作,可以选择云产品ECS的FullAccess权限。
- 单击确定。
完成该OOS角色的授权。
概念解释
- RAM角色,阿里云中的一种权限(策略)的载体,详情请参见RAM角色概览。
- 角色扮演,RAM角色可被云服务或阿里云账号扮演,一旦某个云服务(或账号)扮演了一个RAM角色,云服务(或账号)原来的权限会被RAM角色的权限替换掉,即云服务(或账号)对一切云产品资源的操作所使用的权限都是RAM角色的权限。
- 创建(更新)模版的权限,该权限面向阿里云用户(账号),指对OOS模版资源创建或更新的权限。
- 模版创建者,此文指一个阿里云用户(账号),具有创建模版、更新模版的权限。
- 创建执行的权限,该权限面向阿里云用户(账号),指对OOS模版创建执行的权限。
- 执行创建者,此文指一个阿里云用户(账号),具有创建执行的权限。
- 临时用户权限,即阿里云用户(账号)的临时安全令牌(STS)权限,该权限是阿里云提供的一种临时访问权限,具有时效性,详情请参见什么是STS。
- 执行,其代表模版的执行,执行是一个动态概念,其映射模版(静态概念)。
- 任务执行,其产生于模版创建执行成功后,表示任务的执行,任务执行是一个动态概念,其映射模版中的任务(静态概念)。
- 任务执行的触发者,任务执行运转的触发条件可以分两类,一类是执行创建者创建执行时,执行直接触发了任务执行的运转,运转结束后执行进入最终状态;另一类是执行创建者创建执行时,执行中的任务并未全部运转,而是当特定的事件或时间条件到来时才被触发的。
- OOS的权限,OOS本身不具有访问其他云产品任何权限,当其执行模版中的任务时,其被赋予用来进行云产品访问的权限称之为OOS的权限。
- 执行的任务现场,任务现场是在一个执行中面向模版创建者来说的。在任务现场,即一个执行中所有活动(任务执行的运转)都是由模版创建者创建执行而触发的,直到执行进入最终状态(如Success)。有些生涩,对应在任务现场,您可了解下可能不在任务现场的模版类型,其更便于您理解任务现场这个概念。
- 可能不在任务现场的模版,一般有两种,一种是带触发器的模版;另一种是委托授权场景的模版。对于带触发器的模版,模版创建者创建一个执行,但执行中的活动(子任务执行的运转)是因为事件或时间的到来触发的,模版创建者只是把一个执行开始了,相当于其创建了一个包含任务执行的舞台,真正活动触发者并不是模版创建者这个用户,所以此类模版创建者一定不在任务现场。对于委托授权场景类的模版,当某个非模版创建者且有模版执行权限的用户,创建了该模版的一个执行,此执行中的活动(任务执行的运转)是执行创建者创建执行所触发的,和模版创建者是无关的。该场景下执行创建者和模版创建者可能不是一个用户,所以此类模版的模版创建者可能不在任务现场。