Настройка CORS
Object Storage позволяет управлять конфигурацией CORS в бакете.
-
В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, для которого хотите настроить CORS. -
На панели слева выберите
Безопасность. -
Выберите вкладку CORS.
-
Нажмите Настроить.
-
Заполните открывшуюся форму. Вы можете добавлять, удалять и редактировать правила конфигурации.
Чтобы создать правило:
- Заполните поля:
- Описание — описание правила в произвольной форме.
- Allowed Origins — перечень доменов, разделенных запятыми. Каждый домен записывается в отдельное поле
AllowedOrigin
конфигурации CORS. Пример:http://*.example.com, http://some.another.dom
. - Allowed Methods — HTTP-методы, разрешенные в запросе к объекту, разделенные запятыми. Каждый метод записывается в отдельное поле
AllowedMethod
конфигурации CORS. Пример:GET, PUT, HEAD, POST, DELETE
. - Allowed Headers — разрешенные заголовки в запросе к объекту, разделенные запятыми. Каждый заголовок записывается в отдельное поле
AllowedHeader
конфигурации CORS. Пример:X-Request-Id, X-Request-With
. - Expose Headers — заголовки, разрешенные к показу в JavaScript-приложении в браузере, разделенные запятыми. Каждый заголовок записывается в отдельное поле
ExposeHeader
конфигурации CORS. Пример:X-Amz-Request-Id
. - MaxAgeSeconds — время в секундах, в течение которого браузер сохраняет в кэше результат запроса к объекту методом
OPTIONS
.
- Нажмите Сохранить.
Вы можете добавить одновременно несколько правил. Чтобы добавить новое правило, нажмите Добавить правило и повторите предыдущие шаги.
Подробное описание полей конфигурации смотрите в разделе CORS-конфигурация бакетов.
- Заполните поля:
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для изменения бакета:
yc storage bucket update --help
-
Получите список бакетов в каталоге по умолчанию:
yc storage bucket list
Результат:
+------------------+----------------------+-------------+-----------------------+---------------------+ | NAME | FOLDER ID | MAX SIZE | DEFAULT STORAGE CLASS | CREATED AT | +------------------+----------------------+-------------+-----------------------+---------------------+ | first-bucket | b1gmit33ngp6******** | 53687091200 | STANDARD | 2022-12-16 13:58:18 | +------------------+----------------------+-------------+-----------------------+---------------------+
-
Сохраните имя бакета (столбец
NAME
), в котором нужно настроить конфигурацию CORS. -
Выполните команду:
yc storage bucket update \ --name <имя_бакета> \ --cors <параметр_CORS>='[<набор_значений>]',<параметр_CORS>='[<набор_значений>]',...
Где:
-
--name
— имя бакета, в котором нужно настроить конфигурацию CORS. -
--cors
— параметры CORS:allowed-methods
— список методов. Возможные значения:method-get
,method-put
,method-post
,method-delete
,method-head
. Обязательный параметр.allowed-origins
— список сайтов, с которых разрешены кросс-доменные запросы к бакету. Обязательный параметр.allowed-headers
— список разрешенных заголовков. Необязательный параметр.expose-headers
— список заголовков, которые разрешено показывать в JavaScript-приложении в браузере. Необязательный параметр.max-age-seconds
— время в секундах, в течение которого браузер сохраняет в кеше результат запроса к объекту. Необязательный параметр.
Значения параметров указываются в кавычках и квадратных скобках. Элементы списков в значениях перечисляются через запятую без пробелов. Например,
--cors allowed-methods='[method-get,method-head]',allowed-origins='[example.com]'
.Разрешения, указанные в команде, перезаписывают настройки CORS, которые уже есть у бакета. Получить текущие разрешения можно с помощью команды
yc storage bucket get <имя_бакета> --full
.Результат:
name: first-bucket folder_id: b1gmit33ngp6******** default_storage_class: STANDARD versioning: VERSIONING_DISABLED max_size: "53687091200" acl: {} created_at: "2022-11-25T11:48:42.024638Z"
-
Чтобы удалить конфигурацию CORS, выполните команду:
yc storage bucket update \
--name <имя_бакета> \
--remove-cors
Чтобы загрузить конфигурацию с помощью AWS CLI:
-
Опишите конфигурацию CORS объектов в формате JSON. Например:
{ "CORSRules": [ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "HEAD", "PUT", "DELETE"], "MaxAgeSeconds": 3000, "AllowedOrigins": ["*"] } ] }
Готовую конфигурацию можно поместить в файл, например,
cors.json
. -
Загрузите конфигурацию в бакет, например,
shared-bucket
:aws s3api put-bucket-cors \ --bucket shared-bucket \ --cors-configuration file://cors.json \ --endpoint-url=https://storage.yandexcloud.net
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Получите статические ключи доступа — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
provider "yandex" { cloud_id = "<идентификатор_облака>" folder_id = "<идентификатор_каталога>" zone = "<зона_доступности>" token = "<OAuth-токен>" } resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" } // Назначение роли сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = "<идентификатор_каталога>" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" } resource "yandex_storage_bucket" "b" { bucket = "s3-website-test.hashicorp.com" acl = "public-read" access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key cors_rule { allowed_headers = ["*"] allowed_methods = ["PUT", "POST"] allowed_origins = ["https://s3-website-test.hashicorp.com"] expose_headers = ["ETag"] max_age_seconds = 3000 } }
Где:
access_key
— идентификатор статического ключа доступа.secret_key
— значение секретного ключа доступа.bucket
— имя бакета. Обязательный параметр.acl
— применяемая политика ACL. Необязательный параметр.
Параметры
CORS
:allowed_headers
— разрешенные заголовки. Необязательный параметр.allowed_methods
— разрешенные методы. Возможные значения:GET
,PUT
,POST
,DELETE
илиHEAD
. Обязательный параметр.allowed_origins
— сайт, с которого разрешены кросс-доменные запросы к бакету. Обязательный параметр.expose_headers
— заголовок, разрешенный к показу в JavaScript-приложении в браузере. Необязательный параметр.max_age_seconds
— Время в секундах, в течение которого браузер сохраняет в кеше результат запроса к объекту. Необязательный параметр.server_side_encryption_configuration
— конфигурация шифрования бакета на стороне сервера. Необязательный параметр.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Чтобы управлять конфигурацией CORS в бакете, воспользуйтесь методом REST API update для ресурса Bucket, вызовом gRPC API BucketService/Update или методом S3 API upload.