日常工作中,经常会存在跨帐号访问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的方式做跨主账号授权
授权纬度:数据读取、数据写入、权限读取、权限写入;完全控制(包括前面四种)。
通过ACL授权主账号
2.授权Policy,进行精细化做跨主账号授权
授权纬度:用户ID,资源范围,操作行为,限制条件
通过Policy授权主账号
我们这里通过ACL给10000****930(乙方主账号)授权了“数据读取、权限读取”两个只读权限。接下来我们来验证一下。
调用列出对象(ListObjects)接口,看到返回正常请求
主账号执行ListObjects
调用设置对象ACL(PutOjectAcl)接口返回403无权限
主账号执行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
子账号执行PutOjectAcl
执行列出对象(ListObjects),正常返回。
子账号执行ListObjects
这里我们可以看到,虽然我们给Bsubuser授权的是全部权限,但是由于给“乙方主帐号”授权的为只读权限,那么Bsubuser依然被限定为只读权限。也就是说。Bsubuser的权限是授权策略和“乙方主帐号”授权策略的交集。
由此,我们演示了跨帐号授权访问和跨帐号的子帐号授权方访问的方法。
BTW:文章中提到的ACL授权和policy自定义策略授权意外,后续还会支持角色授权,角色授权后,可通过授权的帐号进行控制台的登录访问,会更加方便数据的管理与维护。