如何安全地配置s3以进行网站访问

时间:2019-09-04 00:53:16

标签: amazon-s3 permissions public bucket

我想安全地设置s3存储桶,但要提供对网站资产(例如图像,pdf,文档等)的公共访问权限。似乎没有一种简便的方法。

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

我希望能够从浏览器查看/下载网站文件,但始终会出现“访问被拒绝”错误。

1 个答案:

答案 0 :(得分: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来授予对对象的临时访问权限。一旦过期,链接将不再起作用。