Усиление publi sh вызывает ошибку AccessDenied - PullRequest
1 голос
/ 20 января 2020

Я развертываю простое веб-приложение на S3 через amplify publish. На хостинге включена поддержка Cloudfront (я выбрал среду PROD для усиления при настройке хостинга), и я работаю в регионе eu-central-1. Но всякий раз, когда я пытаюсь получить доступ к URL-адресу Cloudfront, я получаю ошибку AccessDenied.

Я следовал учебному руководству на https://medium.com/quasar-framework/creating-a-quasar-framework-application-with-aws-amplify-services-part-1-4-9a795f38e16d, и единственное, что я делал по-другому, это регион (учебник использует us-east-1, а я использую eu-central-1).

Конфигурация S3 и Cloudfront была сделана с помощью ampify и поэтому должна работать теоретически:

Cloudfront:

  • Исходное доменное имя или путь: quasar-demo-hosting-bucket-dev.s3-eu-central-1.amazonaws.com (изначально он был без eu-central-1, но я добавил его вручную после того, как он не работал).
  • Идентификатор происхождения: hostingS3Bucket
  • Тип происхождения: S3 Origin

S3 Bucket Policy:

{
    "Version": "2012-10-17",
    "Id": "MyPolicy",
    "Statement": [
        {
            "Sid": "APIReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ********"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::quasar-demo-hosting-bucket-dev/*"
        }
    ]
}

Исследования показали, что у Cloudfront могут быть временные проблемы с доступом к S3 корзинам в других регионах. Но я вручную добавил регион к источнику в Cloudfront И я ждал 24 часа. Я все еще получаю сообщение «Отказано в доступе».

Я подозреваю, что это как-то связано с тем, что корзина S3 не находится в области по умолчанию us-east-1, и усиливает неправильную настройку Cloudfront в этом случае.

Как получить усиление для правильной настройки корзины S3 и Cloudfront, чтобы я мог получить доступ к своему веб-сайту через Cloudfront URL?

Ответы [ 2 ]

3 голосов
/ 21 января 2020

Спасибо за дополнительную информацию.

Ваша S3 Политика Bucket выглядит нормально.

  • Относительно Origin Domain name or Path, всегда S3 появляется сообщение выпадающий, поэтому нет необходимости обновлять его с region

  • Однако в вашем Cloudfront Origin.
    отсутствует одна настройка, вам нужно выбрать Restrict Bucket access до Yes

    Согласно AWS documentation
    Если вы хотите, чтобы пользователи всегда обращались к вашему контенту Amazon S3 с использованием URL-адресов CloudFront, а не URL-адресов Amazon S3, нажмите кнопку «Да». Это полезно, когда вы используете подписанные URL-адреса или подписанные файлы cookie для ограничения доступа к своему контенту. В справке см. «Обслуживание частного контента через CloudFront

  • Теперь создайте new Identity или select Existing Identity

  • Нажмите кнопку« Создать », чтобы сохранить Происхождение.

enter image description here

1 голос
/ 30 марта 2020

Для тех, у кого первое решение не работает, также убедитесь, что javascript.config.DistributionDir в вашем файле project-config.json настроен правильно. Это также может привести к ошибке AccessDenied (как я только что понял сложный путь).

Amplify ожидает, что точка входа вашего приложения (index. html) будет на первом уровне в каталоге, который вы настроили. Таким образом, если вы принимаете конфигурацию по умолчанию для амплификации (dist) и используете проект, который помещает встроенные файлы на более глубокий уровень в иерархии (dist/<project name> в случае angular 8), то он проявляется как 403 Ошибка AccessDenied после публикации. Это относится как к вариантам хостинга, так и к хостингу s3.

документы: https://docs.aws.amazon.com/amplify/latest/userguide/manual-deploys.html (см. В конце)

...