今天参与了阿里云的云翼计划购入了一台学生机,这样现在的代码部署就all in aliyun了。
最近打算分拆一部分静态页面到oss上降低服务器负载,之前的bucket只是存储网站的cdn文件于是打算新开一个bucket存储。
这时其实共享一个RAM子账号也是没有问题的,毕竟子账户授予了AliyunOSSFullAccess权限可以操作所有的bucket。但是考虑一个问题:
假设我们创建了一个子账号A授予了它AliyunOSSFullAccess权限,同时我们创建了附件oss(O1)和页面oss(O2)。然后因为程序bug、被后门或者是被入侵导致了子账号A丢失(管理员无感知时),入侵者可以凭借泄露的子账号任意操作删除我们的oss内容,细思极恐。
这时我打算分拆多个子账号,每个子账号只存在最小管理单元(即单个oss),这样一个账号丢失不会导致整个线上挂掉。于是开始写RAM的策略。
最初的写的策略是这样的:
| 12
 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中找到了答案
![]()
| 12
 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": {}
 }
 ]
 }
 
 |