Краткое описание:
Чтобы устранить ошибки, связанные с отказом в доступе, определите,
исходное доменное имя — это конечная точка веб-сайта S3 или S3 REST API.
конечная точка. Выполните следующие действия, чтобы определить тип конечной точки:
- Откройте консоль CloudFront.
- Выберите свой дистрибутив CloudFront, а затем выберите «Настройки дистрибутива».
- Выберите вкладку «Истоки и исходные группы».
- Выберите вкладку «Истоки и исходные группы».
Проверьте доменное имя в разделе Исходное доменное имя и путь, а затем
определить тип конечной точки на основе формата доменного имени.
Конечные точки REST API используют этот формат:
ПРИМЕР ДОКУМЕНТА-BUCKET.s3.amazonaws.com
Запись: Обязательно соблюдайте правила именования корзин Amazon S3.
Конечные точки веб-сайта используют этот формат:
DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com
Запись: в зависимости от региона AWS формат конечной точки может использовать формат дефиса (s3-website-Region) или формат точки.
(сайт s3.Регион).
Если ваш дистрибутив использует конечную точку REST API, см. раздел Я использую S3.
Конечная точка REST API в качестве источника моей раздачи CloudFront. Почему
я получаю 403 ошибки доступа запрещен?
Если ваш дистрибутив использует конечную точку веб-сайта, проверьте следующее.
Требования, чтобы избежать ошибок «Отказано в доступе»:
- Объекты в корзине должны быть общедоступны.
- Объекты в корзине не могут быть зашифрованы сервисом управления ключами AWS (AWS KMS).
- Политика корзины должна разрешать доступ к s3:GetObject.
- Если политика корзины предоставляет публичный доступ для чтения, то учетная запись AWS, которой принадлежит корзина, также должна владеть объектом.
5. Запрошенные объекты должны существовать в корзине.
- Блокировка общего доступа Amazon S3 должна быть отключена в корзине.
- Если функция Requester Pays включена, запрос должен включать параметр request-payer.
- Если вы используете заголовок Referer для ограничения доступа из CloudFront к источнику S3, просмотрите настраиваемый заголовок.
Запись: Если вы не хотите разрешать публичный (анонимный) доступ к вашим объектам S3, затем измените конфигурацию, чтобы использовать S3 REST API
конечная точка в качестве источника вашего дистрибутива. Затем настройте свой
дистрибутив и корзина S3 для ограничения доступа с использованием исходного доступа
личность (ОАИ). Инструкции см. в разделе Использование конечной точки REST API в качестве
источник с доступом, ограниченным OAI, в разделе Как использовать CloudFront для
обслуживать статический веб-сайт, размещенный на Amazon S3?
Разрешение
Объекты в корзине должны быть общедоступны
Распространение, использующее конечную точку веб-сайта, поддерживает только общедоступные
доступный контент. Чтобы определить, является ли объект в вашей корзине S3
общедоступный, откройте URL-адрес объекта в веб-браузере. Или ты
может запустить команду curl для URL-адреса.
Ниже приведен пример URL-адреса объекта S3:
http://DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com/index.html
Если веб-браузер или команда curl возвращает ошибку «Отказано в доступе»,
то объект не является общедоступным.
Разрешите публичный доступ для чтения к объекту одним из следующих способов:
- Создайте политику корзины, которая разрешает публичный доступ для чтения ко всем объектам в корзине.
- Используйте консоль Amazon S3, чтобы разрешить общедоступный доступ для чтения к объекту.
- Объекты в корзине не могут быть зашифрованы с помощью AWS KMS
- Дистрибутивы CloudFront не поддерживают объекты, зашифрованные AWS KMS. Вы должны удалить шифрование KMS из объектов S3, которые вы хотите
служить с помощью дистрибутива.
Запись: вместо шифрования AWS KMS используйте AES-256 для шифрования своих объектов.
Используйте один из следующих способов, чтобы проверить, является ли объект в вашей корзине
KMS-шифрование:
Используйте консоль Amazon S3 для просмотра свойств объекта. Рассмотрение
диалоговое окно Шифрование. Если выбран AWS-KMS, объект
KMS-шифрование. Запустите команду head-object с помощью командной строки AWS.
Интерфейс (интерфейс командной строки AWS). Если команда возвращает ServerSideEncryption как
aws:kms, то объект шифруется с помощью KMS. Примечание. Если вы получаете сообщения об ошибках
при выполнении команд AWS CLI убедитесь, что вы используете наиболее
последняя версия интерфейса командной строки AWS. Чтобы изменить шифрование объекта
настройки с помощью консоли Amazon S3, см. Как добавить шифрование в
объект S3?
Чтобы изменить параметры шифрования объекта с помощью Интерфейс командной строки AWS,
сначала убедитесь, что в корзине объекта нет шифрования по умолчанию.
Если в ведре нет шифрования по умолчанию, запустите следующее
команда для удаления шифрования объекта путем копирования объекта поверх
сам:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Предупреждение: копирование объекта поверх самого себя удаляет настройки для класса хранения и
сайт-перенаправление-местоположение. Чтобы сохранить эти настройки в новом
объект, не забудьте явно указать класс-хранилища или
значения site-redirect-location в запросе на копирование.
Политика корзины должна разрешать доступ к s3:GetObject.
распространение с конечной точкой веб-сайта S3, ваша политика корзины не должна
иметь оператор отказа, который блокирует публичный доступ для чтения к
s3: действие GetObject.
Даже если у вас есть явный оператор разрешения для s3:GetObject в вашем
политики корзины, подтвердите, что нет конфликтующего явного запрета
утверждение. Явный оператор отказа всегда переопределяет явный
разрешить заявление.
Выполните следующие действия, чтобы просмотреть политику корзины для s3:GetObject:
Откройте корзину S3 из консоли Amazon S3.
Выберите вкладку Разрешения.
Выберите политику корзины.
Просмотрите политику корзины для операторов с «Action»: «s3:GetObject» или «Action»: «s3:*».
Следующий пример политики содержит явный оператор разрешения для
открытый доступ к s3:GetObject. Тем не менее, есть также явный запрет
оператор для s3:GetObject, который блокирует доступ, если запрос не
из определенного виртуального частного облака Amazon (Amazon VPC).
{
«Версия»: «2008-10-17»,
«Идентификатор»: «PolicyForCloudFrontPrivateContent»,
"Заявление": [
{
"Sid": "Разрешить OAI-доступ к корзине",
«Эффект»: «Разрешить»,
"Главный": {
«AWS»: «arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX»
},
«Действие»: «s3: GetObject»,
"Ресурс": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
},
{
"Sid": "Разрешить публичный доступ к корзине",
«Эффект»: «Разрешить»,
"Главный": "*",
«Действие»: «s3: GetObject»,
"Ресурс": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
},
{
"Sid": "Доступ только к конкретному VPCE",
«Эффект»: «Запретить»,
"Главный": "*",
«Действие»: «s3: GetObject»,
"Ресурс": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Условие": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}
- Измените политику корзины, чтобы удалить или изменить операторы, блокирующие общедоступный доступ для чтения к s3:GetObject.
Запись: CloudFront кэширует результаты ошибки «Отказано в доступе» в течение периода времени, указанного в минимальном TTL для кэширования ошибок.
значение по умолчанию — одна минута. После удаления утверждения отказа из
ведра, вы можете запустить аннулирование своего дистрибутива, чтобы
удалить объект из кеша.
Если политика корзины предоставляет публичный доступ для чтения, то учетная запись AWS
которому принадлежит сегмент, должен также владеть объектом.
разрешить публичный доступ для чтения к объектам, учетная запись AWS, которой принадлежит
Bucket также должен владеть объектами. Сегмент или объект принадлежит
учетная запись удостоверения AWS Identity and Access Management (IAM), которая
создал ведро или объект.
Запись: требование владения объектом применяется к общедоступному доступу для чтения, предоставленному политикой корзины. Это не относится к публичному чтению
доступ предоставляется списком управления доступом к объекту (ACL).
Выполните следующие действия, чтобы проверить, совпадают ли ведро и объекты.
владелец:
- Запустите эту команду AWS CLI, чтобы получить канонический идентификатор S3 владельца корзины:
aws s3api list-buckets --query Owner.ID
- Запустите эту команду, чтобы получить канонический идентификатор S3 владельца объекта:
Примечание. В этом примере показан один объект, но вы можете использовать список
команда для проверки нескольких объектов.
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
- Если канонические идентификаторы не совпадают, значит, у корзины и объекта разные владельцы.
Примечание. Вы также можете использовать консоль Amazon S3 для проверки корзины и
владельцы объектов. Владельцы находятся на вкладке «Разрешения»
соответствующее ведро или объект.
Выполните следующие действия, чтобы изменить владельца объекта на владельца корзины:
- Из учетной записи владельца объекта выполните эту команду, чтобы получить разрешения ACL, назначенные объекту:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key имя-объекта
- Если у объекта есть разрешения ACL-владелец корзины на полный доступ, перейдите к шагу № 3. Если объект не имеет
Bucket-owner-full-control ACL, затем запустите эту команду из
аккаунт владельца объекта:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --ключевое имя-объекта --acl-владелец-полного управления
- Из учетной записи владельца корзины запустите эту команду, чтобы изменить владельца объекта, скопировав объект поверх самого себя:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Запрошенные объекты должны существовать в корзине Если у пользователя нет разрешений s3:ListBucket, он получает сообщение об отказе в доступе.
ошибки для отсутствующих объектов вместо ошибок 404 Not Found. Запустите
Команда head-object AWS CLI, чтобы проверить, существует ли объект в
ведро.
Запись: убедитесь, что запрос объекта, отправленный в CloudFront, точно соответствует имени объекта S3. Имена объектов S3 чувствительны к регистру. Если
запрос не имеет правильного имени объекта, тогда Amazon S3 отвечает
как будто предмет отсутствует. Чтобы определить, какой объект CloudFront
запрашивает у Amazon S3, используйте ведение журнала доступа к серверу.
Если объект существует в корзине, то ошибка «Отказано в доступе» не
Маскировка ошибки 404 Not Found. Проверьте другие требования к конфигурации, чтобы устранить ошибку «Отказано в доступе».
Если объект отсутствует в корзине, то возникает ошибка «Отказано в доступе».
Маскировка ошибки 404 Not Found. Решите проблему, связанную с недостающим объектом.
Запись: включение общедоступного доступа к s3:ListBucket не рекомендуется с точки зрения безопасности. Включение общедоступного доступа к s3:ListBucket позволяет
пользователям просматривать и перечислять все объекты в ведре. Это выставляет объект
сведения о метаданных (например, ключ и размер) пользователям, даже если
у пользователей нет прав на загрузку объекта.
Amazon S3 Block Public Access должен быть отключен в корзине. Подтвердите, что нет никаких настроек Amazon S3 Block Public Access.
применяется к ведру. Эти настройки могут переопределять разрешения, которые
разрешить публичный доступ для чтения. Настройки Amazon S3 Block Public Access могут
применяются к отдельным корзинам или учетным записям AWS.
Если функция Requester Pays включена, запрос должен включать
параметр request-payer Если функция Requester Pays включена для корзины, то
анонимный доступ к корзине запрещен. Пользователи из др.
учетные записи должны указывать параметр request-payer при отправке
запросы в корзину. В противном случае эти пользователи получают отказ в доступе.
ошибка.
Если вы используете заголовок Referer для ограничения доступа из CloudFront к
ваш источник S3, а затем просмотрите пользовательский заголовок. Если вы используете
Заголовок Referer для ограничения доступа из CloudFront к вашему веб-сайту S3.
происхождение конечной точки, проверьте секретное значение или токен, установленный в корзине S3.
политика. Затем подтвердите, что секретное значение или токен соответствует значению
в пользовательском заголовке источника CloudFront.
Если вы используете явный оператор отказа в политике корзины, то
подтвердите, что есть также оператор allow, который предоставляет доступ на основе
в заголовке Referer. Вы не можете предоставить доступ только с явным
отрицать заявление.
Например, следующая политика корзины предоставляет доступ к источнику S3, если запрос содержит строку
"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER":
{
"Версия": "2012-10-17",
"Id":"Пример политики HTTP-реферера",
"Заявление":[
{
"Sid":"Разрешить получать запросы, исходящие из моего CloudFront, с заголовком реферера",
«Эффект»: «Разрешить»,
"Главный":"*",
"Действие":"s3:ПолучитьОбъект",
"Ресурс":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Условие":{
"StringLike":{"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER"}
}
}
]
}
В этом примере политики корзины настраиваемый заголовок источника CloudFront
должно быть:
- Заголовок: Реферер
- Стоимость: MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER
Примечание:
Пример политики корзины предоставляет публичный (анонимный) доступ к
ведро, поскольку Принципал является значением подстановочного знака ("Принципал":"*").
Однако из-за оператора условия доступ к источнику S3
предоставляется только в том случае, если запрос включает заголовок Referer и
значение заголовка соответствует значению в политике корзины.