Сообщение AWS Route 53 запрещено при попытке добавить запись A в облачный фронт

Я развертываю приложение React.js, используя безсерверную структуру в облаке. Архитектура очень простая, у меня есть корзина S3 и CDN CloudFront. CloudFormation завершается без каких-либо ошибок при настройке моей конфигурации, и я могу посетить свою страницу реагирования, используя доменное имя CloudFront Distribution, используя https и сертификат по умолчанию.

Теперь я купил домен в Route 53 и хотел бы связать его со своим CloudFront. Я пробовал все, но мне это не удалось. Может ли кто-нибудь дать мне подсказку? Действие, которое я уже пробовал:

  1. Добавление сертификата (после его создания) на мои ресурсы. CloudFrontDistribution.ViewerCertificate.AcmCertificateArn
  2. Добавление вручную записи A, указывающей на мой CloudFront. В моем браузере возникает следующая ошибка JSON: {"message":"Forbidden"}
  3. Добавление сертификата вручную через консоль AWS на моем CloudFront

Ни одно из этих действий не дало мне никакого намека на то, как решить или даже отладить проблему.

Это мой текущий serverless.yml:

service: my-app-react

provider:
  name: aws
  runtime: nodejs12.x
  region: eu-south-1
  memorySize: 512
  timeout: 6
  logRetentionInDays: 7

plugins:
  - serverless-s3-sync

custom:
  bucketName: my-app-react-33333
  s3Sync:
    - bucketName: ${self:custom.bucketName}
      localDir: build/
  domains:
    dev:
      domainName: <my-domain>
      certificateName: <my-domain>

resources:
  Resources:
    ReactAppBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.bucketName}
        AccessControl: PublicRead
        WebsiteConfiguration:
          IndexDocument: index.html
          ErrorDocument: index.html
    S3AccessPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket:
          Ref: ReactAppBucket
        PolicyDocument:
          Statement:
            - Sid: PublicReadGetObject
              Effect: Allow
              Principal: "*"
              Action:
                - s3:GetObject
              Resource:
                - arn:aws:s3:::${self:custom.bucketName}/*
    CloudFrontDistribution:
      Type: AWS::CloudFront::Distribution
      Properties:
        DistributionConfig:
          Enabled: true
          Origins:
            - DomainName: ${self:custom.bucketName}.s3.eu-south-1.amazonaws.com
              Id: ReactApp
              CustomOriginConfig:
                HTTPPort: 80
                HTTPSPort: 443
                OriginProtocolPolicy: https-only 
          DefaultRootObject: index.html
          CustomErrorResponses:
            - ErrorCode: 404
              ResponseCode: 200
              ResponsePagePath: /index.html
          DefaultCacheBehavior:
            AllowedMethods:
              - HEAD
              - GET
              - DELETE
              - OPTIONS
              - PATCH
              - POST
              - PUT
            TargetOriginId: ReactApp
            ForwardedValues:
              QueryString: false
              Cookies:
                Forward: none
            ViewerProtocolPolicy: redirect-to-https
          ViewerCertificate:
            AcmCertificateArn: <my-certificate-arn>
            SslSupportMethod: sni-only
            MinimumProtocolVersion: TLSv1.2_2021

Не очень разбираюсь в теме, но разве вам не нужно aliases в вашем Конфигурация дистрибутива?

theherk 23.04.2022 01:13

Вот вопрос вроде бы по похожей теме. Добавление и обновление записей DNS в Route 53 в Cloudfront с помощью Serverless Framework.

theherk 23.04.2022 01:19

Пытался реализовать ваши подсказки, но я снова застрял. Мне кажется, что эта функция доступна только в регионе n.Virginia. Я развертываю на eu-юг-1.

Mellgood 23.04.2022 19:28
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
3
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

О, теперь я думаю, что могу знать вашу проблему. Дистрибутивы Cluodfront могут использовать только сертификаты ACM, созданные в us-east-1. См. Требования для использования сертификатов SSL/TLS с CloudFront.

Раньше я этого не замечал, но, скорее всего, это ваша проблема. Вам не нужно иметь там свой дистрибутив или какие-либо другие ресурсы, только сертификаты.

Когда я создаю сертификаты с помощью cloudformation, я настраиваю шаблоны обработчиков сертификатов в us-east-1, а остальные шаблоны ресурсов — в своем локальном регионе. В случае с terraform, как еще один пример, у меня есть отдельный провайдер только для этих ресурсов.

О человек, Спасибо! Теперь я смог развернуть все, используя имя записи. Я не могу заставить Route53 работать без имени записи. Возможно ли это каким-то образом?

Mellgood 26.04.2022 11:51

Хорошо, я решил! У меня был неправильный сертификат, теперь он работает. Большое спасибо за помощь, theherk!

Mellgood 26.04.2022 12:31

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