全部产品
云市场

访问控制角色(RamRole)

更新时间:2019-10-23 14:49:43

OOS访问控制(RamRole)

在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

不同于临时用户权限,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格式

      1. FormatVersion: OOS-2019-06-01 # 必填
      2. Description: "RamRole Usage" # 可选
      3. RamRole: "OOSServiceRole01" # 可选,访问控制角色,RamRole字段值为一个具体的RAM角色名称时,该模版RamRole指向的RAM角色是固定的
    • JSON格式(请参考YAML注释说明)

      1. {
      2. "FormatVersion": "OOS-2019-06-01",
      3. "Description": "RamRole Usage",
      4. "RamRole": "OOSServiceRole01"
      5. }
  • 可变的RAM角色

    • YAML格式
  1. FormatVersion: OOS-2019-06-01 # 必填
  2. Description: "RamRole Usage" # 可选
  3. RamRole: "{{ramRoleNameParameter}}" # 可选,访问控制角色,此模版RamRole指向的RAM角色是非固定的,在创建该模版执行时,可通过给ramRoleNameParameter参数传的RAM角色名称来选择并指定RAM角色
  • JSON格式(请参考YAML注释说明)
  1. {
  2. "FormatVersion": "OOS-2019-06-01",
  3. "Description": "RamRole Usage",
  4. "RamRole": "{{ramRoleNameParameter}}"
  5. }

OOS权限策略的管理

本节将介绍如何来控制OOS可用权限的大小。当权限来源为临时用户时,OOS的权限策略与执行创建者是相同的,可通过给创建执行的用户授权不同的权限策略来管理OOS的权限。当权限来源为RAM角色时,OOS的权限策略则与RAM角色被授权的权限策略是相同的,那么通过管理该RAM角色,即授权不同的权限策略给该RAM角色,就可以实现对OOS权限大小的管理。

OOS的权限策略

OOS执行不同模板时需要的云产品OpenAPI权限集合不同,您可通过OOS的OpenAPI GenerateExecutionPolicy来获取待执行模板所需的权限集合,然后以模版所需最小权限集原则创建权限策略,并将权限策略授权给RAM角色或执行创建者;若想完全开放某类云产品的权限,您也可直接授权该云产品的FullAccess权限策略给RAM角色或执行创建者。

创建RAM角色

  1. 登录RAM角色管理控制台
  2. 单击 新建RAM角色
    oos
  3. 选择可信实体类型阿里云服务,单击 下一步
    oos
  4. 填写 角色名称,此处的角色名称,应该与您的OOS模板中RamRole指向的RAM角色名称一致。
    oos
  5. 选择授信服务运维编排服务
    oos
  6. 单击完成

为RAM角色授权

  1. 登录RAM权限管理控制台
  2. 单击 新增授权
    oos
  3. 被授权主体选择您刚创建的角色,如OOSServiceRole;根据运维编排服务执行模板的实际需要,选择不同的权限。如您希望通过运维编排模板进行ECS的创建销毁启停等操作,则可以选择云产品ECS的FullAccess权限。
    oos
  4. 单击确定
    完成该OOS角色的授权。

为执行创建者授权

  1. 登录RAM权限管理控制台
  2. 单击 新增授权
    oos
  3. 被授权主体选择执行创建者(即您创建执行时使用的阿里云账户),如testoos@example.com;根据运维编排服务执行模板的实际需要,选择不同的权限。如您希望通过运维编排模板进行ECS的创建销毁启动停止等操作,可以选择云产品ECS的FullAccess权限。 oos
  4. 单击确定
    完成该OOS角色的授权。

概念解释

  • RAM角色,阿里云中的一种权限(策略)的载体,详见RAM角色
  • 角色扮演,RAM角色可被云服务或阿里云账号扮演,一旦某个云服务(或账号)扮演了一个RAM角色,云服务(或账号)原来的权限会被 RAM角色的权限替换掉,即云服务(或账号)对一切云产品资源的操作所使用的权限都是RAM角色的权限。
  • 创建(更新)模版的权限,该权限面向阿里云用户(账号),指对OOS模版资源创建或更新的权限。
  • 模版创建者 ,此文指一个阿里云用户(账号),具有创建模版、更新模版的权限。
  • 创建执行的权限,该权限面向阿里云用户(账号),指对OOS模版创建执行的权限。
  • 执行创建者,此文指一个阿里云用户(账号),具有创建执行的权限。
  • 临时用户权限,即阿里云用户(账号)的临时安全令牌(STS)权限,该权限是阿里云提供的一种临时访问权限,具有时效性。
  • 执行,其代表模版的执行,执行是一个动态概念,其映射模版(静态概念)。
  • 任务执行,其产生于模版创建执行成功后,表示任务的执行,任务执行是一个动态概念,其映射模版中的任务(静态概念)。
  • 任务执行的触发者,任务执行运转的触发条件可以分两类,一类是执行创建者创建执行时,执行直接触发了任务执行的运转,运转结束后执行进入最终状态;另一类是执行创建者创建执行时,执行中的任务并未全部运转,而是当特定的事件或时间条件到来时才被触发的。
  • OOS的权限,OOS本身不具有访问其他云产品任何权限,当其执行模版中的任务时,其被赋予用来进行云产品访问的权限称之为OOS的权限。
  • 执行的任务现场,任务现场是在一个执行中面向模版创建者来说的。在任务现场,即一个执行中所有活动(任务执行的运转)都是由模版创建者创建执行而触发的,直到执行进入最终状态(如Success)。有些生涩,对应在任务现场,您可了解下可能不在任务现场的模版类型,其更便于您理解任务现场这个概念。
  • 可能不在任务现场的模版,一般有两种,一种是带触发器的模版;另一种是委托授权场景的模版。对于带触发器的模版,模版创建者创建一个执行,但执行中的活动(子任务执行的运转)是因为事件或时间的到来触发的,模版创建者只是把一个执行开始了,相当于其创建了一个包含任务执行的舞台,真正活动触发者并不是模版创建者这个用户,所以此类模版创建者一定不在任务现场。对于委托授权场景类的模版 ,当某个非模版创建者且有模版执行权限的用户,创建了该模版的一个执行,此执行中的活动(任务执行的运转)是执行创建者创建执行所触发的,和模版创建者是无关的。该场景下执行创建者和模版创建者可能不是一个用户,所以此类模版的模版创建者可能不在任务现场。