天天看点

跨帐号访问COS资源

日常工作中,经常会存在跨帐号访问COS资源的场景,例如两个主体公司,甲方和乙方,资源归属甲方,但需要乙方进行软件开发和部署,所以甲方需要授权给乙方一定的资源访问和访问管理权限。下面就介绍一下,如果跨账号来访问COS资源,并实现精细化管理。

整体的授权示意图如下:

跨帐号访问COS资源

跨帐号资源访问

下面实践开始,假设

甲方主帐号

UIN:10000****231

APPID:125****742

甲方子帐号

Asubuser

UIN:10001****462

乙方主帐号

UIN:10000****930

APPID: 125****344

乙方子帐号

Bsubuser

UIN:10001****187

首先,需要甲方帐号给乙方帐号做授权。有两种方式,在bucket权限管理中

1.使用ACL的方式做跨主账号授权

授权纬度:数据读取、数据写入、权限读取、权限写入;完全控制(包括前面四种)。

跨帐号访问COS资源

通过ACL授权主账号

2.授权Policy,进行精细化做跨主账号授权

授权纬度:用户ID,资源范围,操作行为,限制条件

跨帐号访问COS资源

通过Policy授权主账号

我们这里通过ACL给10000****930(乙方主账号)授权了“数据读取、权限读取”两个只读权限。接下来我们来验证一下。

调用列出对象(ListObjects)接口,看到返回正常请求

跨帐号访问COS资源

主账号执行ListObjects

调用设置对象ACL(PutOjectAcl)接口返回403无权限

跨帐号访问COS资源

主账号执行PutOjectAcl

到这里,我们可以通过ACL的方式授权另一个乙方主账号来访问A账号的bucket资源。且操作结果符合预期。

下一步,我们要授权乙方账号中的子帐号来访问A账号的bucket资源。

我们创建一个自定义策略,这个策略是授权子帐号管理wainsun桶的全部权限。(uid/ 这里的内容是资源拥有者的appid,后面的wainsun-125xxx 指的是资源拥有者要授权的bucket全称,bucket-appid方式)

{
    "version": "2.0",
    "statement": [{
        "effect": "allow",
        "action": "cos:*",
        "resource": "qcs::cos:ap-beijing:uid/125****742:wainsun-125****742/*"
    }]
}           

复制

授权给乙账号的子帐号Bsubuser,并执行设置对象ACL(PutOjectAcl),接口返回403

跨帐号访问COS资源

子账号执行PutOjectAcl

执行列出对象(ListObjects),正常返回。

跨帐号访问COS资源

子账号执行ListObjects

这里我们可以看到,虽然我们给Bsubuser授权的是全部权限,但是由于给“乙方主帐号”授权的为只读权限,那么Bsubuser依然被限定为只读权限。也就是说。Bsubuser的权限是授权策略和“乙方主帐号”授权策略的交集。

由此,我们演示了跨帐号授权访问和跨帐号的子帐号授权方访问的方法。

BTW:文章中提到的ACL授权和policy自定义策略授权意外,后续还会支持角色授权,角色授权后,可通过授权的帐号进行控制台的登录访问,会更加方便数据的管理与维护。