全部产品
云市场

资源组鉴权

更新时间:2019-12-10 17:31:11

资源组

资源组是用户对资源的一种划分与管理,目前阿里云的ECS、RDS、SLB等众多产品都已经支持资源组,ECI现在开始正式支持资源组。

通过资源组对资源的划分可以是根据资源的用途特性划分,也可以是对用户权限的管理。

比如公司通过统一的主账号购买云资源,但是有的是用于测试环境,有的是用于生产环境,这时候资源组就是比较使用,通过资源组对资源进行分组管理,可以很好的划分测试与生产环境下的资源。

本文重点讲解是ECI的资源组与子账号权限管理的结合使用场景。

效果

在没有资源组之前,如果主账号给子账号授权ECI相关的权限,那么他的权限可以覆盖到账号下的所有ECI,能创建、修改、删除(如果有)所有的的ECI。当主账号的各个子账号的资源需要进行隔离的时候,可能就会产生冲突。有了资源组之后就可以将子账号的权限缩小在一个资源组内,即子账号只能操作该资源组下的资源,操作其他资源组的资源会因越权而被阻止。

API 鉴权说明

创建API:CreateContainerGroup

主账号

如果是主账号创建,权限最大。用户可以添加资源至账号下的任意资源组。如果用户没有传入资源组,则会默认添加资源至默认资源组。

子账号

如果子账号的权限被约束在某个资源组内。那么创建资源时必须传入资源组id(如果刚好授权的资源组是默认资源组,可以不用传,因为如果用户没有传入资源组,则会添加到账号下的默认资源组);如果用户传入了资源组,就会鉴权该资源组。

如果子账号的权限没有被约束在一个资源组内,创建没有影响,会自动加入默认资源组。

查询API:DescribeContainerGroups

主账号

如果是主账号创建,权限最大,默认也会返回所有资源,不存在资源组的约束。

但是,如果用户传入了资源组进行过滤,我们会返回该资源组下的满足条件的资源。主账号有这样的权限。

子账号

对于被约束在某个资源组下的子账号,查询的时候资源组是必传的,否则鉴权不通过。资源组校验通过后,才会进行查询。查询到的资源也都是该资源组下的。

日志查询API:DescribeContainerLog

主账号

大账号拥有绝对的权限,可以查询账号下任意ECI的容器日志。

子账号

无需用户传入资源组,我们会自动帮用户找到这个资源对应的资源组(如果资源加入过任何资源组),并进行鉴权,如果通过就继续,不通过就挡掉。防止越权操作。

删除API:DeleteContainerGroup

主账号

大账号拥有绝对的权限,可以删除账号下的所有资源。

子账号

对于该API,同样无需用户传入资源组,我们会自动帮用户找到这个资源对应的资源组(如果资源加入过任何资源组),并进行鉴权,如果通过就继续,不通过就挡掉。防止越权操作。

资源生命周期管理

目前ECI还不支持用户修改资源组,即资源只能在创建的时候加入指定的资源组或默认资源组,资源删除的时候会自动从资源组移除。

常见使用场景

主账号下有三个资源组:默认资源组、test_a、test_b。

主账号下有两个子账号:test、test2,前者只有test_a下的ECIfull权限,后者只有默认资源组下的ECIfull权限。

创建API:CreateContainerGroup

主账号:

  • 主账号创建不传入资源组ID,加入默认资源组。
  • 主账号创建传入资源组ID,且合法的,加入该资源组。
  • 主账号创建传入资源组ID,且不合法,加入默认资源组。

子账号:

  • 子账号test创建不传入资源组ID,鉴权不通过。
  • 子账号test创建传入不合法的资源组ID,鉴权不通过。
  • 子账号test2创建不传入资源组ID,加入默认资源组。
  • 子账号test创建传入正确的资源组ID,加入该资源组。

查询API:DescribeContainerGroups

主账号:

  • 主账号不设置资源组过滤条件,返回所有满足条件的资源。
  • 主账号设置了资源组的过滤条件,合法,只返回该资源组下的满足条件的资源。
  • 主账号设置了资源组的过滤条件,不合法,查询返回空。

子账号:

  • 子账号test查询没有设置资源组ID,鉴权不通过。
  • 子账号test查询设置了资源组ID,不合法,鉴权不通过。
  • 子账号test查询设置了资源组ID,合法,返回该资源组下的过滤资源。
  • 子账号test查询设置了资源组ID,合法,但是传入的resourceId不在该资源组内,无法查看返回空。

日志查询API:DescribeContainerLog

主账号:

  • 可以任意查询默认资源组内资源。
  • 可以任意查询test_a资源组内资源。

子账号:

  • 子账号test查询自己资源组下的资源,鉴权通过。
  • 子账号test查询非自己资源组下的资源,鉴权不通过。

删除API:DeleteContainerGroup

主账号:

  • 可以任意删除默认资源组下资源。
  • 可以任意删除test_a资源组下资源。

子账号:

  • 子账号test删除自己资源组下的资源,鉴权通过。
  • 子账号test删除非自己资源组下的资源,鉴权不通过。