Когда вы используете файлы из S3-бакетов на сторонних ресурсах, например, на веб-сайте, вы можете столкнуться с ошибкой, связанной с CORS (Cross-Origin Resource Sharing). Эта ошибка возникает, когда браузер блокирует кросс-доменные запросы к ресурсам вашего бакета.
Для решения проблемы необходимо задать специальные правила CORS для бакета, которые разрешат выполнение кросс-доменных запросов. Настроить их можно через панель управления или с использованием утилит, например, AWS CLI.
Настройка CORS через панель управления
-
В панели управления откройте раздел «Настройки» вашего S3-бакета.
-
Найдите параметр «CORS» и нажмите «Изменить».
-
Заполните необходимые параметры правил CORS:
- Allowed Origins — указывает источники (Origins), с которых разрешены запросы к бакету.
Например:https://example.com
. Можно использовать символ*
для разрешения запросов со всех доменов. - Allowed Methods — определяет HTTP-методы, которые разрешены для запросов CORS.
- Allowed Headers — указывает заголовки, которые разрешены в запросах.
Например:Authorization
,Content-Type
. Можно указать*
, чтобы разрешить все заголовки. - Expose Headers — список заголовков, которые будут доступны клиенту в ответе. По умолчанию доступ к некоторым заголовкам блокируется браузером.
Например:ETag
,x-amz-meta-custom-header
. - Max Age Seconds — определяет время в секундах, в течение которого результаты CORS-запроса можно кэшировать на стороне клиента.
Например:3600
(1 час).
- Allowed Origins — указывает источники (Origins), с которых разрешены запросы к бакету.
Вы можете создать несколько правил (например, разрешить разные методы для разных источников), нажав на кнопку «Добавить правило».
-
Сохраните изменения, нажав на кнопку «Сохранить».
Настройка CORS через AWS CLI
Рассмотрим, как настроить CORS для S3-бакета с помощью утилиты AWS CLI.
Создание файла с правилами CORS
Для начала создайте файл 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"]
Загрузка правил CORS в бакет
После создания файла с правилами, загрузите его в ваш S3-бакет с помощью следующей команды:
aws s3api put-bucket-cors --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru --cors-configuration file://cors.json
Проверка установленных правил CORS
Вы можете проверить, что правила CORS были успешно установлены, выполнив команду:
aws s3api get-bucket-cors --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru
Удаление правил CORS
Если вам необходимо удалить текущие правила CORS, выполните команду:
aws s3api delete-bucket-cors --bucket имя_бакета --endpoint-url https://s3.twcstorage.ru
Команда удалит все существующие правила CORS для вашего бакета.