我正在嘗試設定一個可以通過我的自定義域訪問的靜態 S3 網站,但是當我測驗我的云端 URL 時,我收到 504 錯誤,并且在日志中,我看到以下內容:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>ZFD3NVWGP7DE08W1</RequestId>
<HostId>o2iGHpwIdQjHQ51nG6HwoFtCx5QE9l0rZytYatSMF3zOVjKpHg00ph2vSAiUYJog5ZVsnxr5C18=</HostId>
</Error>
這是我的存盤桶策略:
{
"Version": "2012-10-17",
"Id": "MyPolicy",
"Statement": [
{
"Sid": "PublicReadForGetBucketObjects",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::xyz-cloud-website/*"
}
]
}
我已經按照 AWS 檔案中的說明檢查了我的 S3 存盤桶設定,但據我所知,以下所有內容都是正確的:
- 我的物件可以公開訪問
- 我的物件未經過 KMS 加密
- 我的帳戶同時擁有存盤桶和物件
我使用以下模板通過 IaC SAM CLI 部署構建了它:
Resources:
MyWebsite:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
WebsiteConfiguration:
IndexDocument: index.html
BucketName: xyz-cloud-website
MyRoute53Record:
Type: "AWS::Route53::RecordSetGroup"
Properties:
HostedZoneId: 00000000000000000
RecordSets:
- Name: xyz-website.com
Type: A
AliasTarget:
HostedZoneId: Z2FDTNDATAQYW2
DNSName: !GetAtt MyDistribution.DomainName
MyDistribution:
Type: "AWS::CloudFront::Distribution"
Properties:
DistributionConfig:
ViewerCertificate:
AcmCertificateArn: !Ref MyCertificate
SslSupportMethod: sni-only
Aliases:
- xyz-website.com
DefaultCacheBehavior:
ViewerProtocolPolicy: allow-all
TargetOriginId: xyz-cloud-website.s3-website-us-east-1.amazonaws.com
DefaultTTL: 0
MinTTL: 0
MaxTTL: 0
ForwardedValues:
QueryString: "false"
Origins:
- DomainName: xyz-cloud-website.s3-website-us-east-1.amazonaws.com
Id: xyz-cloud-website.s3-website-us-east-1.amazonaws.com
CustomOriginConfig:
OriginProtocolPolicy: match-viewer
Enabled: "true"
DefaultRootObject: index.html
當我通過 xyz-cloud-website.s3-website-us-east-1.amazonaws.com 訪問我的靜態 s3 存盤桶時,我沒有任何問題。只有當我嘗試使用我的 xyz123.cloudfront.net URL 或我得到 504 的自定義域時。
我的 Cloudfront 域、Alt 和 Origin 看起來都正確...關于為什么在我嘗試使用 Cloudfront 時會引發 504 錯誤的任何想法?盡量避免在 AWS 上花錢尋求個人專案的幫助。
*注意,我在這些示例中顯然掩蓋了我的 URL。正確的在我的模板中,并且出現在 AWS 控制臺中。
uj5u.com熱心網友回復:
我想出了這個。CloudFront 希望對 Origin 的輸入略有不同,因為最近的更新使得劃分靜態 S3 存盤桶網站的舊方法現在有所不同。
所以而不是:
Origins:
- DomainName: xyz-cloud-website.s3-website-us-east-1.amazonaws.com
Id: xyz-cloud-website.s3-website-us-east-1.amazonaws.com
CustomOriginConfig:
OriginProtocolPolicy: match-viewer
它應該更像:
Origins:
- DomainName: xyz-cloud-website.s3.us-east-1.amazonaws.com
Id: xyz-cloud-website.s3.us-east-1.amazonaws.com
CustomOriginConfig:
OriginProtocolPolicy: match-viewer # OR HTTPS-only if appropriate, as it was in my case
現在,我的 CloudFront 和自定義域按預期顯示。這也可以通過控制臺來實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476420.html
