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

7
我创建了一个带有SSL的Cloudfront分配,并使用CNAME images.domain.com,我有两个S3存储桶:一个用于用户上传,一个用于产品图片。默认存储桶是上传存储桶。我想同时为这两个存储桶使用同一个CloudFront。因此,我将这两个存储桶添加为源,并创建了一个“行为”,路径为/products/*,使用我的产品存储桶作为源。我的“行为”如下:
  1. /products/* to: products bucket (precedence = 0)
  2. Default (*) to: uploads bucket (precedence = 1)
当我访问images.domain.com/products/78/34.jpg时,我收到一个AccessDenied错误。文件“78/34.jpg”存在于我的产品存储桶中。来自另一个存储桶的文件可以正常工作(例如,在上传存储桶中的upload67.jpg的情况下,images.domain.com/upload67.jpg)。
2个回答

13

模式/products/*匹配特定源存储桶中名为“products”的文件夹中的所有对象。因此,键需要是products/78/34.jpg

如果您在产品存储桶内创建名为“products”的文件夹并将73/34.jpg文件移到其中,则images.domain.com/products/78/34.jpg URL应该可以正常工作(如果您最近在创建文件夹之前出现错误,可能需要使其无效)。


1
我在核对答案时还发现了这篇论坛帖子:https://forums.aws.amazon.com/message.jspa?messageID=550914 - axanpi

0

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

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

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

已经在两个存储桶上尝试过了,总是在“product”存储桶上出现AccessDenied错误,而另一个存储桶则正常。当我创建一个以“product”存储桶为默认的其他CloudFront时,它可以工作,但如果可能的话,我想要一个CloudFront来覆盖两个存储桶。 - user1608124

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接