AWS S3 CORS 403 Ошибка с запросом OPTIONS

Я пытаюсь получить доступ к html-файлу, который находится в S3, из запроса ajax, и я получил ошибку 403.

Я читал AWS в Интернете, что если я это сделаю, мне нужно настроить правила AWS CORS, чтобы исправить ошибку 403.

Однако я пытался два дня, и мне не повезло. Вот моя конфигурация CORS:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <ExposeHeader>XMLHttpRequest</ExposeHeader>
    <AllowedHeader>x-csrftoken</AllowedHeader>
 </CORSRule>
 </CORSConfiguration>

И мой HTTP-запрос выглядит так:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Access-Control-Request-He...    x-csrftoken
Access-Control-Request-Me...    GET
Connection  keep-alive
Host    xxxxxxxxx.cloudfront.net
Origin  http://localhost:8000
User-Agent  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0

Может ли кто-нибудь помочь мне увидеть, что я пропустил?

Спасибо!


person Kintarō    schedule 25.09.2013    source источник
comment
Оказывается, проблема не в S3, а в облачном фронте. Кто-нибудь пытался перенаправить конфигурацию CORS с S3 на облачный фронт?   -  person Kintarō    schedule 26.09.2013


Ответы (2)


Для тех, кто пришел сюда по 403 по запросу OPTIONS доступа к кросс-происхождению s3 и не нашел то, что искал, возможно, мой опыт может помочь.

тлдр; Браузеры предназначены для установки origin на null при переадресации 302 из другого источника

Я также столкнулся с проблемой CORS при предварительном запросе к ресурсу в корзине, ресурсу, который в противном случае был бы доступен при прямом просмотре.

У меня был настроен CORS для ведра с правильными принятыми заголовками и источником. Что-то вроде следующего.

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://localhost:8080</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

Затем я получил ошибку по строкам

Access to XMLHttpRequest at 'https://[REDACTED].s3.amazonaws.com/[REDACTED]?AWSAccessKeyId=[REDACTED]' (redirected from '[REDACTED]') from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

После проверки заголовков запроса стало ясно, что единственной подозрительной вещью было происхождение, имеющее значение «null».

Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Origin: null
Referer: [REDACTED]
User-Agent: [REDACTED]

Как оказалось, браузеры предназначены для установки origin на null при переадресации 302 из другого источника из-за проблем с безопасностью. Дополнительная информация здесь< /а>.

Нет никакого решения этой проблемы, кроме как не делать перенаправление. Мне пришлось перепроектировать внутренний ресурс, который выполнял перенаправление, чтобы вместо этого предоставить ссылку для прямого доступа к объекту s3 bbject.

person Phillip Martin    schedule 19.09.2019

HTTP 403 (Frobidden) не обязательно означает, что вам нужны CORS. Один из вариантов — иметь все запросы к облачному фронту (один и тот же источник) и, в вашем дистрибутиве, несколько источников и вариантов поведения. Бывший:

Beavior   ->  Origin

/api/*    ->  my.api.com
/static/* ->  my.s3.bucket

Но если вам действительно нужны запросы из разных источников, заголовки CORS должны пересылаться облачным фронтом и иметь такое же поведение, в вашем примере вы, вероятно, захотите быть более разрешительными с заголовками, которые вы разрешаете (<AllowedHeader>*</AllowedHeader>?). Но это больше связано с поведением браузера, чем с CLoudFront или S3.

person Julio Faerman    schedule 08.04.2014