同一 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 域相关联时出现问题