同一 CloudFront 分配中的多个 S3 存储桶

Posted

技术标签:

【中文标题】同一 CloudFront 分配中的多个 S3 存储桶【英文标题】:Multiple S3 buckets in the same CloudFront distribution 【发布时间】:2015-07-23 16:56:57 【问题描述】:

我创建了一个 CNAME images.domain.com 和 SSL 的 Cloudfront 发行版,我有 2 个 S3 存储桶:一个用于用户上传,一个用于产品图片 默认存储桶是上传存储桶

我想为两个存储桶使用相同的 CloudFront

所以我添加了 2 个存储桶作为来源并创建了一个“行为”,路径 /products/* 使用我的产品存储桶作为来源

我的“行为”是:

    /products/* 到:产品桶(优先级 = 0) 默认 (*) 到:上传存储桶(优先级 = 1)

当我转到 images.domain.com/products/78/34.jpg 时,我得到一个 AccessDenied

文件“78/34.jpg”存在于我的产品存储桶中

来自其他存储桶的文件工作正常(即 images.domain.com/upload67.jpg 上传存储桶中有 upload67.jpg)

【问题讨论】:

【参考方案1】:

模式/products/* 匹配指定源存​​储桶中名为“products”的文件夹中的所有对象。所以,密钥需要是products/78/34.jpg

如果您在产品存储桶中创建一个名为“products”的文件夹并将 73/34.jpg 文件移入其中,那么images.domain.com/products/78/34.jpg url 应该可以工作(如果您最近遇到错误,您可能需要使其无效)创建文件夹)。

【讨论】:

我在仔细检查我的答案时也发现了这个论坛帖子:forums.aws.amazon.com/message.jspa?messageID=550914【参考方案2】:

我认为您应该将访问公共政策添加到您的产品存储桶中


  "Version":"2008-10-17",
  "Statement":[
    "Sid":"AllowPublicRead",
        "Effect":"Allow",
      "Principal": 
            "AWS": "*"
         ,
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::bucket/*"
      ]
    
  ]

确保将 arn:aws:s3:::bucket/* 中的存储桶替换为您的存储桶名称。

【讨论】:

已经在两个存储桶上尝试过,“产品”一个总是 AccessDenied,另一个很好。当我使用“产品”存储桶作为默认值创建另一个云端时,它正在工作,但如果可能的话,我想要一个云端

以上是关于同一 CloudFront 分配中的多个 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

如何使用特定的引用策略和 CloudFront 分配改进 S3 存储桶的反抓取

将 cloudfront 通配符 CNAME 子域路由到 s3 存储桶中的文件夹

将 CloudFront 分配与 Route 53 域相关联时出现问题

EC2 在 CloudFront 后面使用 HTTPS 运行 NGINX?

S3 子目录的 Cloudfront 重定向

使用 1 个 S3 存储桶和 1 个 CloudFront 托管多个 Angular 应用程序