Ошибка 504 для дистрибутива Cloudfront.net и домена Route53

Я пытаюсь настроить статический веб-сайт 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, но, насколько я могу судить, верно все следующее:

  • Мои объекты общедоступны
  • Мои объекты не зашифрованы с помощью 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

Когда я получаю доступ к своей статической корзине s3 через xyz-cloud-website.s3-website-us-east-1.amazonaws.com, у меня нет проблем. Только когда я пытаюсь использовать свой URL-адрес xyz123.cloudfront.net или пользовательский домен, я получаю 504.

Мой домен Cloudfront, Alt и Origin выглядят правильно... есть идеи, почему при попытке использовать Cloudfront возникает ошибка 504? Попытка не тратить деньги на AWS за помощь в личном проекте.

*Обратите внимание, что в этих примерах я явно замаскировал свои URL-адреса. Правильные находятся в моем шаблоне и отображаются в консоли AWS.

Вы также настроили пользовательский документ об ошибках в AWS?

ruby_newbie 12.05.2022 23:44

@ruby_newbie Да, у меня есть пользовательская ошибка для 504, которая указывает на мой index.html, который я попробовал после того, как впервые столкнулся с проблемой. Все еще происходит.

Ian 12.05.2022 23:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я понял это. 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 И пользовательский домен отображаются, как предполагалось. Это также может быть достигнуто через консоль.

Другие вопросы по теме