【发布时间】:2022-01-26 19:57:21
【问题描述】:
这个问题和Is it possible to give token access to link to amazon s3 storage?思路一致。
基本上,我们正在构建一个应用程序,用户组可以在其中保存图片,这些图片应该只对他们自己的组可见。 我们正在考虑为每个用户组使用一个文件夹,或者甚至可以为每个用户组使用一个独立的 S3 存储桶。
规则很简单:
- A 组的任何成员都应该能够将图片添加到 A 组文件夹(或存储桶)
- A 组的任何成员都应该能够读取 A 组文件夹(或存储桶)的所有图片
- A 组的任何成员都不应访问任何图片
但是,上面提到的帖子使用的解决方案(临时预签名 URL)不可用,因为我们需要客户端能够在他的存储桶上写入文件以及读取他的存储桶上的文件,而无需对任何其他存储桶的任何访问。文件写入部分是这里的难点,也是我们不能使用预签名 URL 的原因。
此外,我们阅读的各种 AWS 安全帖子(例如 https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/)中的解决方案并不适用,因为它们展示了如何控制对其他 AWS 账户的 IAM 组的访问。在我们的例子中,一组用户没有 IAM 帐户...
到目前为止,我们看到的唯一解决方案是不安全或浪费的
- 向所有人开放存储桶并依靠混淆文件夹/存储桶名称(许多安全问题,包括暴力破解和读取/覆盖任何人的文件的能力)
- 有一个后端充当应用程序和 S3 之间的外观,验证访问。 S3 没有公共访问权限,存储桶仅对后端具有的 IAM 角色开放。然而,这是对带宽的极大浪费,因为所有数据都将在该后端的 EC2 实例上传输
有更好的解决方案吗? S3 可以实现这种自定义访问吗?
【问题讨论】:
-
不,后端将是这样做的方式。为直接匿名上传打开存储桶是一种糟糕的安全做法。
-
请勿通过上传公开存储桶,需要一天时间才能找到它们。 CapitalOne 就是一个很好的例子:Capital One Breach: Is Your AWS Environment Just as Susceptible?。最简单的方法是将 Cognito 与 Lambda 连接起来并以这种方式上传。或者为用户提供每个存储桶的 IAM 角色,并让他们使用 SAML 登录。
-
“(临时预签名 URL)不可用” ... 为什么不呢?后端可以根据应用程序特定的用户身份验证生成预签名帖子或获取 URL。
-
别担心,出于安全原因,我们不打算公开存储桶,如帖子中所述!关于上传文件的预签名 URL,我认为它不起作用的原因是因为要获得 S3 对象的预签名 URL,您需要....一个 S3 对象。因此,我认为没有办法在没有文件的情况下生成预签名的 URL 来执行 PUT。一个看起来非常骇人听闻的解决方案的选项是让后端预先创建该文件的假版本,然后创建预签名的 URL 以在应用程序中使用。但是,如果应用从不上传怎么办...
-
经过更多阅读后,似乎虽然 AWS UI 需要 S3 对象已经存在才能生成预签名 URL,但使用 API 似乎是可能的 (medium.com/@aidan.hallett/…)
标签: amazon-web-services amazon-s3