【发布时间】:2020-09-18 09:54:13
【问题描述】:
我有一个名为 prod 的存储桶,其目录树如下所示:
prod
logs
uploads
user
doc
1
a.jpg
b.jpg
2
a.jpg
b.jpg
thing
photos
1
a.jpg
b.jpg
2
a.jpg
b.jpg
thing/photos 中的所有内容都应该是公开的。 GET 请求应该允许每个人使用,但 PUT 和 POST 请求应该只在用户通过我的应用上传文件时才允许。
另一方面,user/doc 目录,我想完全保密。通过我的应用程序上传文件的用户应该允许POST 请求,但唯一应该能够GET 这些资源的人是管理员。该数据在存储之前已加密,但我想确保公众或我的应用程序的其他用户无法访问该文件夹。
在阅读了A deep dive into AWS S3 access controls – taking full control over your assets 和ACLs - What Permissions Can I Grant? 之后,我仍然对如何完成我想要的事情感到困惑。重叠的访问控制让我感到困惑,而且我找不到以面向操作的方法解释这些的教程。考虑到由于 S3 存储桶策略设置不当导致的数据泄漏的数量,我似乎不是唯一一个误解这一点的人。
您的政策是如何制定的?你有比我找到的更好的教程的链接吗?谢谢!
【问题讨论】:
-
您的第一个问题是在同一个 S3 存储桶中混合私有和公共内容。这增加了政策错误的可能性和后果。
-
您会建议一个完全用于私人内容的单独存储桶吗?
-
是的,我会避免在同一个存储桶中混合私有和公共内容。如果可以,将公共内容移动到专用的 S3 存储桶。然后,您可以轻松地在该存储桶上应用 S3 存储桶策略以允许公共访问。您不需要另一个私有存储桶上的 S3 存储桶策略。您的应用程序将通过 IAM 角色获得权限。
-
因此,如果我有两个存储桶——一个关闭了“阻止所有公共访问”,一个打开了它——我是否需要担心对第一个(公共)存储桶的未经授权的写入? S3 文档和相关材料让我担心会发生这种情况
-
阻止公共访问设置不会启用对存储桶的任何访问。他们只是确定是否可以将给定的存储桶配置为允许公共访问。要允许对存储桶中的对象进行公共读取访问,请禁用该存储桶的 BPA,然后向该存储桶添加一个策略,允许每个人对存储桶的对象发出 GetObject(AWS 站点上记录了许多示例存储桶策略,可以帮助解决这个问题)。
标签: amazon-web-services amazon-s3