我正在尝试设置CloudFront
来提供托管在S3
存储桶中的静态文件。我有设置分发但尝试浏览S3存储桶中的CSS(AccessDenied
)文件时得到/CSS/stlyle.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存储桶中的所有文件...
*更新*
此云端guide说:
默认情况下,您的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
。如何禁用此功能?
答案 0 :(得分:33)
为了帮助解决您的问题,我通过以下方式重新创建了这种情况:
我检查了存储桶,CloudFront添加了类似于您的存储桶策略。
分发标记为In Progress
一段时间。说到Enabled
后,我通过xxx.cloudfront.net
网址
xxx.cloudfront.net/public.jpg
重定向我到S3网址http://bucketname.s3.amazonaws.com/public.jpg
。是的,我可以看到该文件,但它不应该使用重定向。xxx.cloudfront.net/private.jpg
重定向我也是,但之后我收到Access Denied
,因为它是S3中的私人文件。所以,我等了一夜,今天早上测试了它,一切正常。
底线:即使它显示ENABLED
,事情可能需要几个小时(例如一夜之间)才能使自己正确。然后它将按照记录的方式工作。
答案 1 :(得分:4)
请输入 <bucket-name>.s3-website.<region>.amazonaws.com
作为原始域名,而不是选择原始域名的默认s3存储桶(您可以在S3存储区属性下的静态网站托管属性中获取此URL)。
答案 2 :(得分:3)
我在cloudFront'分发设置'的常规标签下的Default Root Object
中添加了'index.html',它对我有用。
因为index.html是我项目的根文件!
答案 3 :(得分:2)
在我的情况下,我使用“路径模式”行为的多个来源以及我的S3存储桶中的原始路径:
CloudFront行为:
/images/*
- &gt; My-S3-origin
MY-S3-来源:
起源路径:/images
S3文件: /images/my-image.jpg
GET请求: /images/my-image.jpg - &gt; 403
发生的事情是整个CloudFront GET请求被发送到原点:/image/my-image.jpg
以Origin Path:/images
为前缀,因此进入S3的请求看起来像/images/images/my-image.jpg
存在。
删除Origin Path。
答案 4 :(得分:0)
如果您使用的是刚创建的存储桶,则可能会发生这种情况。
此处有官方答复:AWS Forun link,创建新存储桶后必须等待几个小时,然后才能正确运行云前端分发。
解决方案是暂时从您的一个旧存储桶中工作,然后在几个小时后切换到新存储桶。
答案 5 :(得分:0)
我还从CloudFront获得了403,但是我的问题有所不同,因此在这里共享它可能会对其他人有所帮助。
确保您在存储桶策略中定义的原始访问ID是正确的:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity HERE_GOES_YOUR_ORIGIN_ACCESS_ID"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::deepen-frontend-prod/*"
}
]
}
原始访问身份ID大致类似于E19F48VV5H01ZD。
您可以在https://console.aws.amazon.com/cloudfront/home#oai上找到所有的原始访问身份 在您的身份下的CloudFront配置中查找您正在使用的一个: