今天参与了阿里云的云翼计划购入了一台学生机,这样现在的代码部署就all in aliyun了。
最近打算分拆一部分静态页面到oss上降低服务器负载,之前的bucket只是存储网站的cdn文件于是打算新开一个bucket存储。
这时其实共享一个RAM子账号也是没有问题的,毕竟子账户授予了AliyunOSSFullAccess权限可以操作所有的bucket。但是考虑一个问题:
假设我们创建了一个子账号A授予了它AliyunOSSFullAccess权限,同时我们创建了附件oss(O1)和页面oss(O2)。然后因为程序bug、被后门或者是被入侵导致了子账号A丢失(管理员无感知时),入侵者可以凭借泄露的子账号任意操作删除我们的oss内容,细思极恐。
这时我打算分拆多个子账号,每个子账号只存在最小管理单元(即单个oss),这样一个账号丢失不会导致整个线上挂掉。于是开始写RAM的策略。
最初的写的策略是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:*" ], "Resource": [ "acs:oss:*:*:BucketName", "acs:oss:*:*:BucketName/*" ], "Condition": {} } ] }
|
结果发现虽然能够保存,但是用子账号进行访问时 提示 Access Failed:cannot list buckets.
改了好久,以为自己写的不标准,于是使用了阿里云提供的RAM Policy Editor去生成了一份,结果和我写的是一模一样。。。
emmm,这我就有点慌了啊。
最后在RAM Policy Editor的git中找到了答案
![]()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| { "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:*" ], "Resource": [ "acs:oss:*:*:BucketName", "acs:oss:*:*:BucketName/*" ], "Condition": {} }, { "Effect": "Allow", "Action": [ "oss:ListBuckets" ], "Resource": [ "acs:oss:*:*:*" ], "Condition": {} } ] }
|