从Amazon S3存储桶中检索图像

时间:2015-02-06 00:43:09

标签: node.js amazon-web-services amazon-s3

我将图像存储在S3存储桶中,但是我无法显示图像的链接。这是我得到的错误:

<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
  <RequestId>8CAF92C03A75648C</RequestId>
  <HostId>
     ocfqcRiXsJoV0mBom0z+nmV3seEMRpdBMvDddy1sgQrIOq19/UvK6BmurlM8v20zGIvh2ITHjYc=
  </HostId>
</Error>

我需要在各个域上显示图像,但是我可以为每个域制作CORS规则。

<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

如何打开此存储桶以便公开显示图像?

1 个答案:

答案 0 :(得分:2)

它与CORS无关,它是S3存储桶配置。

如果您对公开阅读的整个广告素材感到满意,here's the official AWS guide以及我的粗略步骤:

  1. 启用虚拟主机,添加索引/错误文档默认值。
  2. 添加公开阅读政策(下方;只需要更改BUCKETNAME)
  3. 的利润!
  4. 政策:

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

    需要注意的是,如果您使用S3来托管静态内容,那么您应该使用CDN(如CloudFront)并注意缓存控制标头。