Использование Cloudfront для ограничения доступа к корзине S3 - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь использовать CloudFront для доставки статических ресурсов из корзины S3.Как я первоначально обнаружил, корзина была общедоступной и имела следующие параметры общедоступного доступа:

enter image description here

Вот политика корзины, с которой я столкнулся:

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "AddPerm",
           "Effect": "Allow",
           "Principal": "*",
           "Action": "s3:GetObject",
           "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
       },
       {
           "Sid": "2",
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3KB5KQ622F9F3"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
    }]
}

Теперь вот что я сделал:

  1. Создан новый дистрибутив CloudFront с соответствующим именем домена источника и ограниченным доступом к корзине путем создания новой идентификации доступа к источнику.
  2. Обновлена ​​политика корзины S3 в соответствии с их примерами документов , чтобы ограничить доступ к каноническому идентификатору пользователя.Вот как выглядит обновленная политика:

enter image description here

Установите для всех параметров общего доступа значение true для корзины S3, чтобы сделать его закрытым.

Мне отказывают в доступе, когда я пытаюсь получить доступ к статическим ресурсам через созданный CDN.Обращаясь к документации AWS для ограничения доступа к корзине S3 через CloudFront, я особенно озадачен тем, что они хотят, чтобы разработчики сделали со следующими инструкциями:

"To specify an origin access identity, use the value of Amazon S3 Canonical User ID 
on the Origin Access Identity page in the CloudFront console." 

1 Ответ

0 голосов
/ 07 марта 2019

В ответ на вопрос о поиске идентификатора пользователя Amazon S3 Canonical для идентификации доступа к источнику, вы можете использовать консоль для перехода к CloudFront -> Безопасность -> Идентификация доступа к источнику.В качестве альтернативы вы можете использовать CLI для вывода списка

$ aws cloudfront list-cloud-front-origin-access-identities
{
    "CloudFrontOriginAccessIdentityList": {
        "Items": [
            {
                "Comment": "access-identity-..... ", 
                "S3CanonicalUserId": "e9eeea57c92144d.....", 
                "Id": "XXXXXXXXXXXXX"
            }
        ]
    }
}

Затем вы можете использовать значение S3CanonicalUserId в политике, как оно есть в вопросе.

Интересно, если вы разрешите CloudFront обновитьполитика для вас, вы в конечном итоге с чем-то немного другим, который вы также можете использовать, если вы обновите идентификатор доступа к исходному доступу.Если вы получаете ошибки AccessDenied, следующим шагом, который я бы порекомендовал, является создание Invalidation ( введите описание ссылки здесь ) для удаления объектов из кэша (ов) CloudFront.

...