Когда вы используете файлы из S3-бакетов на сторонних ресурсах, например, на веб-сайте, вы можете столкнуться с ошибкой, связанной с CORS (Cross-Origin Resource Sharing). Эта ошибка возникает, когда браузер блокирует кросс-доменные запросы к ресурсам вашего бакета.
Для решения проблемы необходимо задать специальные правила CORS для бакета, которые разрешат выполнение кросс-доменных запросов. Настроить их можно через панель управления или с использованием утилит, например, AWS CLI.
В панели управления откройте раздел «Настройки» вашего S3-бакета.
Найдите параметр «CORS» и нажмите «Изменить».
Заполните необходимые параметры правил CORS:
https://example.com
. Можно использовать символ *
для разрешения запросов со всех доменов.Authorization
, Content-Type
. Можно указать *
, чтобы разрешить все заголовки.ETag
, x-amz-meta-custom-header
.3600
(1 час).Вы можете создать несколько правил (например, разрешить разные методы для разных источников), нажав на кнопку «Добавить правило».
Сохраните изменения, нажав на кнопку «Сохранить».
Рассмотрим, как настроить CORS для S3-бакета с помощью утилиты AWS CLI.
Для начала создайте файл cors.json
с конфигурацией CORS, который позволит выполнять GET и HEAD-запросы на объекты вашего бакета. Вот пример файла cors.json
:
{
"CORSRules": [
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "HEAD"],
"AllowedOrigins": ["*"]
}
]
}
AllowedMethods
: указывает, какие HTTP-методы будут разрешены. В данном примере разрешены GET и HEAD запросы.
AllowedOrigins
: "*"
означает, что запросы разрешены с любого домена. Если вы хотите ограничить доступ только для определённого домена, укажите его вместо звёздочки.
Например, если ваш сайт расположен на домене https://example.com
, замените строку на:
"AllowedOrigins": ["https://example.com"]
После создания файла с правилами, загрузите его в ваш S3-бакет с помощью следующей команды:
aws s3api put-bucket-cors --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud --cors-configuration file://cors.json
Вы можете проверить, что правила CORS были успешно установлены, выполнив команду:
aws s3api get-bucket-cors --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud
Если вам необходимо удалить текущие правила CORS, выполните команду:
aws s3api delete-bucket-cors --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud
Команда удалит все существующие правила CORS для вашего бакета.