我有两个存储桶,每个存储桶都有自己的目标。到目前为止,我无法理解存储桶设置的复杂配置。似乎有三件事需要配置
- 阻止公共访问
- 存储桶策略
- 访问控制列表
我知道,如果我关闭 (1),我想要完成的所有事情都会成功。尽管这是我见过的最没有意义的四个设置(我为什么要关心根据策略修改时间限制对存储桶的访问???)
看来我向 (2) 添加的内容并不重要。例如,我有一个策略只允许 GetObject,但我可以从 SDK 中删除对象和放入对象。我还有另一个策略允许 DeleteObject、GetObject 和放入对象,但只有删除有效,放入会抛出访问被拒绝(来自具有管理访问权限的 IAM 账户)。
我甚至不知道 (3) 的意义。我为什么要允许权限任何AWS 用户?无论如何……
我有两个桶,两个目标,我不知道该如何组合才能完成它们。
A:静态网站公共bucket
对于这个,我拥有 Bock 对 OFF 的公共访问权限,以及类似的策略(我认为它什么都不做)。任何人都可以查看存储桶内容(很好!)但此策略不应该允许任何 PutObject,但它却允许了。
{
"Version": "2012-10-17",
"Id": "Policy1632669906301",
"Statement": [
{
"Sid": "Stmt1632669869776",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::publicwebsite/*"
}
]
}
为什么只定义了GetObject就可以上传和删除呢?
B:用于备份的安全存储桶
这个存储桶用于我的应用发送数据备份。因此,唯一应该能够读取/写入的是我的应用。但如果我打开“阻止公共访问”,我就无法上传,但可以删除。同样,这完全没有意义。如果我关闭“阻止公共访问”,我就可以做任何事情。以下是政策
{
"Version": "2012-10-17",
"Id": "Policy1635858319261",
"Statement": [
{
"Sid": "Stmt1635858317672",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXX:user/backup-user"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::backups/*"
}
]
}
为什么可以删除,但是放不下呢?
此外,亚马逊坚定关于始终保持阻止公共访问,但如果启用了此功能,您甚至无法修改存储桶策略!这太疯狂了!!!!
以下是我经过一些测试后发现的。
我的帐户如下
- root 账户,存储桶的所有者
- 具有管理所有权限的 IAM 帐户(管理员)
- IAM 账户(用户)完全无权执行任何操作
有关存储桶策略,请参阅上面发布的第二个策略。
我正在探索策略和阻止公共访问设置的组合会有什么作用。它们仍然毫无意义。
情况1
- 阻止所有公共访问:关闭
- 存储桶策略:EMPTY
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以上传和删除,用户无法做任何事情
案例 2
- 阻止所有公共访问:
- [x] 新的访问控制列表
- 存储桶策略:EMPTY
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,但不能上传,用户无法做任何事情
案例 3
- 阻止所有公共访问:
- [x] 新的访问控制列表
- [x] 任何访问控制列表
- 存储桶策略:EMPTY
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,但不能上传,用户无法做任何事情
案例 4
- 阻止所有公共访问:
- [x] 新的访问控制列表
- [x] 任何访问控制列表
- [x] 新的接入点策略
- 存储桶策略:EMPTY
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,但不能上传,用户无法做任何事情
案例五
- 阻止所有公共访问:开启
- 存储桶策略:EMPTY
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,但不能上传,用户无法做任何事情
结论:设置为 ON 时阻止公共访问,允许一切。任何其他配置允许删除(也许允许更多,例如获取),但不允许放置。
案例六
- 阻止所有公共访问:关闭
- 存储桶策略:管理员(获取/放置/删除对象)用户(无)
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以上传和删除,用户无法做任何事情
案例 7
- 阻止所有公共访问:
- [x] 新的访问控制列表
- 存储桶策略:管理员(获取/放置/删除对象)用户(无)
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,用户无法执行任何操作
案例 8
- 阻止所有公共访问:
- [x] 新的访问控制列表
- [x] 任何访问控制列表
- 存储桶策略:管理员(获取/放置/删除对象)用户(无)
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,用户无法执行任何操作
案例9
- 阻止所有公共访问:
- [x] 新的访问控制列表
- [x] 任何访问控制列表
- [x] 新的接入点策略
- 存储桶策略:管理员(获取/放置/删除对象)用户(无)
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,用户无法执行任何操作
案例 10
- 阻止所有公共访问:开启
- 存储桶策略:管理员(获取/放置/删除对象)用户(无)
- ACL:存储桶拥有者(列出、写入 | 读取、写入)
结果:管理员可以删除,用户无法执行任何操作
结论:存储桶策略实际上对任何事情都没有任何影响
TLDR:存储桶策略似乎毫无作用。只有阻止公共访问才有可衡量的效果,唯一可用的选项是将其关闭。我还从公共存储桶中删除了存储桶策略,但它也没有改变任何东西。
我的结论是,要么是 Bucket 策略有问题,要么是文档不够充分,要么是设置本身违反直觉,实际上并没有按照说明执行。或者任何情况的组合。
此时,我宁愿将我的内容托管在我地下室的 FTP 服务器上。