我正在尝试设置CloudFront
服务于S3
存储在存储桶中的静态文件。我有安装程序分发包,但是AccessDenied
在尝试浏览到/CSS/stlyle.css
S3存储桶中的CSS()文件时得到了:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E193C9CDF4319589</RequestId>
<HostId>
xbU85maj87/jukYihXnADjXoa4j2AMLFx7t08vtWZ9SRVmU1Ijq6ry2RDAh4G1IGPIeZG9IbFZg=
</HostId>
</Error>
我已将CloudFront发行版设置为我的S3存储桶,并创建Origin Access Identity policy
了自动添加到S3存储桶的新存储:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E21XQ8NAGWMBQQ"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myhost.com.cdn/*"
}
]
}
我错过了什么?
我希望通过CloudFront提供此S3存储桶中的所有文件...
*更新*
该云前指南说:
默认情况下,您的Amazon S3存储桶及其中的所有对象都是私有的-只有创建该存储桶的AWS账户才有权读取或写入其中的对象。如果要允许任何人使用CloudFront URL访问Amazon S3存储桶中的对象,则必须授予对对象的公共读取权限。(这是使用CloudFront和Amazon S3时最常见的错误之一。您必须显式授予Amazon S3存储桶中每个对象的特权。)
因此,基于此,我向S3存储桶中的所有对象添加了新权限Everyone Read/Download
。现在,我可以访问文件了。
但是现在当我访问这样的文件时https://d3u61axijg36on.cloudfront.net/css/style.css
,它将被重定向到S3 URI和HTTP
。如何禁用此功能?
为了解决您的问题,我通过以下方式重新创建了情况:
我检查了存储桶,CloudFront添加了与您类似的存储桶策略。
该分布被标记In Progress
为一段时间。说完Enabled
,我通过xxx.cloudfront.net
URL 访问文件:
xxx.cloudfront.net/public.jpg
将我重定向到S3 URL http://bucketname.s3.amazonaws.com/public.jpg
。是的,我可以看到该文件,但不应使用重定向。xxx.cloudfront.net/private.jpg
也重定向了我,但后来我收到了,Access Denied
因为它是S3中的私有文件。然后,我做了一些研究,发现这很普遍。有些人通过将CloudFront分发指向静态托管的网站URL来使用变通办法,但这有一个缺点,即它不能与Origin Access Identity一起使用,而且我还怀疑它不会收到“向边缘的免费S3流量”折扣。
因此,我等了一夜,今天早上进行了测试,一切都很好。
底线:即使它说了ENABLED
,事情也可能要花费几个小时(例如整夜)才能使自己正确。然后它将按文档所述工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句