AWS S3:限制用户仅访问其文件夹的一般实践



我正在创建一个应用程序,用户将拥有私人相册。我正在使用S3存储这些照片。

所有照片都将生活在同一水桶下,但是在不同的子文件夹中,将被命名为 {userId}/pics

我的问题是:仅使用存储桶策略向公众打开此存储桶的读取访问是否正常/接受?还是我应该限制对文件夹的访问,以便只有userId的用户才能从中读取,以便随机的人不能猜测URL并查看图片(不太可能,但可能(?

您的应用程序的用户需要使用 application escriptys 进行身份验证(例如,来自Amazon Cognito或您自己的数据库(,而不是IAM凭据。切勿向组织外的任何人或紧密的工作伙伴提供IAM证书。因此,您将无法创建一个允许特定用户访问文件夹的策略。

通过晦涩的安全绝不是一个好主意。您可能会认为使用随机URL可以使事情安全,但是如果URL在"野外"中脱颖而出,那么互联网上的任何人都可以访问它。另外,它仍然可以猜测。

此外,您的安全模型不符合用户可能希望与其他用户共享照片的情况。

更好的安全模型是:

  • 所有照片均保留私人
  • 用户对应用程序进行身份验证
  • 当用户请求访问照片时,该应用程序确认他们有权访问照片,然后将预先签名的URL 生成照片

预先签名的URL是时间限制的URL,可以在定义的持续时间内授予对象访问对象。一旦到期期通过,URL将不再提供访问权限。

例如,当用户希望查看其私人照片时,应用程序可以使用预签名的URL生成<img />标签。用户将看到他们的图像是正常的,但是没有其他人能够访问照片。即使有人掌握了URL,它也将在到期期间后不再工作。

请参阅:与他人共享一个对象-Amazon S3

最新更新