【问题标题】:How to securely configure s3 for website access如何安全地配置 s3 以访问网站
【发布时间】:2020-01-06 20:43:58
【问题描述】:

我想安全地设置一个 s3 存储桶,但提供对图像、pdf、文档等网站资产的公共访问权限。似乎没有简单的方法来做到这一点。

我尝试设置一个启用了阻止公共访问的新存储桶。我认为这是保护存储桶的最佳方式,但无法查看/下载此存储桶中的文件。

我希望能够从浏览器查看/下载网站文件,但总是收到拒绝访问错误。

【问题讨论】:

  • 您能说明一下您的要求吗?您是说您有一些可以愉快地公开的文件(以便任何人 都可以访问它们),但您还希望存储桶的一部分保持私有?或者您是说您希望以编程方式确定用户是否可以根据具体情况访问内容?
  • 所以我的文件都可以公开,即我希望公众可以使用的非敏感文件。当您创建存储桶时,我很惊讶亚马逊没有为此目的预定义设置。

标签: amazon-s3 permissions public bucket


【解决方案1】:

默认情况下,Amazon S3 存储桶中的所有内容都是私有的。

如果您希望提供对内容的公开访问,可以通过多种方式完成:

  • 存储桶级别,通过提供存储桶策略:这是提供对整个存储桶或存储桶一部分的访问权限的理想选择。
  • 对象级别使用访问控制列表 (ACL):这允许逐个对象进行细粒度控制。
  • 有选择地,通过创建预签名 URL:这允许您的应用程序确定是否应允许特定应用程序用户访问

这三种方法都允许通过 URL 访问 Amazon S3 中的对象。这与使用 AWS 凭证对 Amazon S3 进行 API 调用完全不同,后者将允许在用户级别进行控制。

根据您的描述,存储桶策略似乎最能满足您的需求,例如:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicPermission",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::my-bucket/*"]
    }
  ]
}

这就是说:允许任何人从我的存储桶中获取对象

注意,策略指定了允许哪些调用,所以可以允许上传、下载、删除等。在上面的例子中,它只允许GetObject,这意味着对象可以访问/下载但不能上传,删除等。

资源中的/* 允许通过指定存储桶的路径进行进一步控制,因此可以仅授予对存储桶一部分的访问权限。

使用存储桶策略时,还需要停用阻止公共访问设置以允许使用存储桶策略。这是一个额外的保护层,可确保存储桶不会意外公开访问。

另一方面,如果您的实际目标是保持内容的私密性,但有选择地将其提供给应用程序用户,那么您可以使用预签名 URL。一个例子是一个照片网站,允许人们查看他们的私人照片,但这些照片不能公开访问。

这将通过让用户对应用程序进行身份验证来处理。然后,当他们希望访问照片时,应用程序将确定他们是否被允许查看该照片。如果是这样,应用程序将生成一个pre-signed URL,授予对对象的临时访问权限。超过有效期后,链接将不再有效。

【讨论】:

  • 非常感谢约翰,这非常有用。由于此存储桶仅用于网站资产,因此存储桶策略方法可以正常工作。但是,用户也需要上传到此存储桶。例如。我们根据公司资料存储公司徽标,用户需要上传图像和/或删除它。如何修改存储桶策略以允许这样做?
  • 另外,是否有一个桶策略只允许从我们的网站 url 执行上传? IE。上传/删除只能通过我们的网站门户进行。
  • 允许“公开上传”是不明智的,因为这样任何人都可以上传任何内容。相反,最好让您的应用程序对用户进行身份验证,然后允许 Uploading Objects Using Presigned URLs 以确保上传是经过授权的。
猜你喜欢
  • 2018-11-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 2013-09-27
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多