Я отправляю файлы c моего приложения Django (развернутого в Heroku) через корзину S3. Перенос файлов на S3 через сборку Heroku работает нормально, файлы попадают в корзину, как и ожидалось. Чтобы получить доступ к файлам, я установил для «Block Publi c Access» значение off и установил конфигурацию CORS следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://{{my app}}.herokuapp.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Однако при проверке я продолжаю сталкиваться с ошибками 403 запрос через инструменты Chrome dev в моем приложении. Согласно запросу (см. Ниже) кажется, что в моем запросе отсутствует заголовок Origin. Это то, что вызывает ошибку? Я предполагал, что заголовок Origin будет отправляться автоматически, но как мне установить его вручную?
Кроме того, я уже пытался установить AllowedOrigin в *, но безуспешно.
Заголовок отклоненного запроса:
Accept: text/css,*/*;q=0.1
Accept-Encoding: gzip, deflate, br
Accept-Language: de-DE,de;q=0.9,en-DE;q=0.8,en;q=0.7,en-US;q=0.6
Cache-Control: no-cache
Connection: keep-alive
DNT: 1
Host: magellan-static.s3.amazonaws.com
Pragma: no-cache
Referer: http://{{my app}}.herokuapp.com/
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
Единственный способ, с помощью которого работает доступ, - это установить следующую политику Bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{{my bucket name}}/*"
}
]
}
Хотя это нормально при работе только с файлами stati c CSS и JS, конечно, это не вариант для долгосрочного производства, тем более что мне также нужно / я хочу иметь медиа-файлы.