Перейти к содержимому

Обзор

CORS (Cross-Origin Resource Sharing) — это механизм безопасности, который используется для контроля доступа к ресурсам из другого источника. В Object Storage CORS необходим для обеспечения безопасного доступа к объектам данных из веб-приложений, размещенных на других доменах.

Обычно браузеры блокируют запросы, инициированные к ресурсам на других доменах. Такое ограничение называется Same-Origin Policy (политика одного источника). Согласно этой политике, веб-страница может свободно взаимодействовать только с ресурсами с аналогичным доменом, портом и протоколом. Например, страница на https://example.comможет запрашивать данные только с https://example.com. Если эта страница запросит данные с другого домена (например, https://api.anotherdomain.com), браузер заблокирует такой запрос.

Механизм CORS позволяет явно указать, какие внешние домены имеют право запрашивать ресурсы. Для этого используются специальные HTTP-заголовки. Перед тем, как выполнить кросс-доменный запрос, браузер отправляет на сервер предварительный (preflight) запрос с информацией о домене источника, используемом HTTP-методе и заголовках будущего запроса. Если данные, переданные в preflight-запросе, соответствуют правилам CORS, сервер разрешает кросс-доменный запрос.

Конфигурация CORS устанавливается на уровне бакета. Она представляет собой набор правил в формате XML или JSON. Готовый файл с правилами можно загрузить с помощью утилиты AWS CLI.

В правилах указываются:

  • разрешенные источники;
  • разрешенные HTTP-методы (GET, POST и др.);
  • разрешенные HTTP-заголовки.
    xml
    <CORSConfiguration>
    <CORSRule>
    <AllowedOrigin>https://www.example.com</AllowedOrigin>
    <AllowedOrigin>https://app.example.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>Authorization</AllowedHeader>
    <AllowedHeader>Content-Type</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <MaxAgeSeconds>3600</MaxAgeSeconds>
    </CORSRule>
    </CORSConfiguration>
json
{
"CORSRules": [
{
"AllowedOrigins": [
"https://www.example.com",
"https://app.example.com"
],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE"],
"AllowedHeaders": ["Authorization", "Content-Type"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
}

В состав конфигурации могут входить следующие элементы:

ЭлементОписаниеПример
AllowedOriginsРазрешенные источники"AllowedOrigins": ["https://www.example.com"]
AllowedMethodsРазрешенные HTTP-методы"AllowedMethods": ["GET", "PUT", "POST", "DELETE"]
AllowedHeadersРазрешенные HTTP-заголовки"AllowedHeaders": ["Authorization", "Content-Type"]
ExposeHeadersЗаголовки, доступные клиентуExposeHeaders": ["ETag"]
MaxAgeSecondsВремя кэширования preflight-ответов"MaxAgeSeconds": 3600 //1 час
  • Конфигурация CORS должна включать не более 100 правил.
  • Размер файла конфигурации не должен превышать 64КБ.

Object Storage проверяет каждый запрос из браузера на соответствие настройкам CORS. Запрос признается соответствующим, если одновременно выполняются условия:

  • значение заголовка Origin совпадает с одним из источников, указанных в параметре AllowedOrigins;
  • используется один из методов, перечисленных в параметре AllowedMethods;
  • значение заголовка Access-Control-Request-Headers совпадает со значением параметра AllowedHeaders.