Я пытаюсь настроить статический веб-сайт 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/*"
}
]
}
Я проверил настройки корзины S3, как описано в документации AWS, но, насколько я могу судить, верно все следующее:
Я создал это с помощью развертывания 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
Когда я получаю доступ к своей статической корзине s3 через xyz-cloud-website.s3-website-us-east-1.amazonaws.com, у меня нет проблем. Только когда я пытаюсь использовать свой URL-адрес xyz123.cloudfront.net или пользовательский домен, я получаю 504.
Мой домен Cloudfront, Alt и Origin выглядят правильно... есть идеи, почему при попытке использовать Cloudfront возникает ошибка 504? Попытка не тратить деньги на AWS за помощь в личном проекте.
*Обратите внимание, что в этих примерах я явно замаскировал свои URL-адреса. Правильные находятся в моем шаблоне и отображаются в консоли AWS.
@ruby_newbie Да, у меня есть пользовательская ошибка для 504, которая указывает на мой index.html, который я попробовал после того, как впервые столкнулся с проблемой. Все еще происходит.
Я понял это. CloudFront хочет, чтобы исходные данные немного отличались в результате более поздних обновлений, которые делают старый метод разграничения статических веб-сайтов корзины 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 И пользовательский домен отображаются, как предполагалось. Это также может быть достигнуто через консоль.
Вы также настроили пользовательский документ об ошибках в AWS?