静态站点可以在我的S3实例中运行,但在Cloudfront中却出现错误403 AccessDenied

时间:2019-06-05 02:27:25

标签: amazon-web-services amazon-s3 amazon-cloudfront

我正在关注有关如何将静态站点部署到s3和cloudfront的教程

https://miketabor.com/host-static-website-using-aws-s3/

我已经创建了我的S3存储桶,将其设置为公开,然后上传我的文件,例如该网站

http://www.yourdomain.com.s3-website-us-east-1.amazonaws.com

按预期工作,到目前为止一切顺利,现在我按照指南配置了Cloudfront实例

Distribution ID
EMYC0...

ARN
arn:aws:cloudfront::22172726..981:distribution/EMYC0R..AP79B

Log Prefix
log_

Delivery Method
Web

Cookie Logging
Off

Distribution Status
Deployed

Comment
-
Price Class
Use All Edge Locations (Best Performance)

AWS WAF Web ACL
-

State
Enabled

Alternate Domain Names (CNAMEs)
dev.myurl.com

SSL Certificate
*.myurl.com (d89746a9-9d6d-45a9-b53c-ba24..36)

Domain Name
d1l63dvaobxx.cloudfront.net

Custom SSL Client Support
Clients that Support Server Name Indication (SNI) - (Recommended)

Security Policy
TLSv1.1_2016

Supported HTTP Versions
HTTP/2, HTTP/1.1, HTTP/1.0

IPv6
Enabled

Default Root Object
index.html (originally this was empty but I've changed this to index through not works neither)

Last Modified
2019-06-04 21:59 UTC-4

Log Bucket
www.dev.mybucketxx.com.s3.amazonaws.com

查看本文后

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html#DefaultRootObjectHow

我以为问题是默认的根对象,未设置,所以我将其更改为index.html(s3存储桶的根目录中存在index.html)

但我总是会收到此错误

<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>06C89B31EE8CA0A5</RequestId><HostId>NGWaHdZx0EbbzLwVPOMx5DAY6lRgmPBCCInTQeab...IOSMStfnI6pwmu4QpDYU3R0EPNk=</HostId></Error>

我认为该问题一定是在Cloudfront上,因为我可以完美访问S3,但是我找不到这里的问题

这是我的存储桶策略

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

任何帮助将不胜感激,非常感谢你们!

1 个答案:

答案 0 :(得分:1)

这可能是因为您在定义来源时从自动填充的下拉菜单中选择了S3存储桶。如果只想通过CloudFront提供静态文件,则选择此选项,如果要从S3提供静态网站,则应该选择

您必须在粘贴S3网站的URL时粘贴它,而不是在创建原始站点时选择自动填充的S3存储桶。

您需要做的是:

1)进入S3存储桶>属性>静态网站托管并复制网站URL(注意:这与S3存储桶端点不同):

enter image description here

2)进入您的CloudFront来源并粘贴此URL

enter image description here

3)这会将您的来源从S3Origin(仅适用于静态文件)更改为CustomOrigin

enter image description here

此更改传播后(大约15分钟),您应该可以通过CloudFront域名访问您的网站。