Начиная с Django 3.0, SECURE_REFERRER_POLICY был добавлен и также включен в команду python manage.py check --deploy
. Чтобы мой проект Django мог читать медиафайлы из Amazon S3, я ранее установил для меня значение strict-origin-when-cross-origin
, а также политику S3, позволяющую пользователю programmati c делать все, и другую политику, которая проверяла если заголовок реферера был установлен для моего домена (аналогично тому, что описано в этом вопросе Amazon S3 Bucket Policy Referer ).
Но это была очень элементарная защита от горячих ссылок, и мне посоветовали форумы Django, чтобы переключиться на same-origin
.
Однако теперь мой сайт больше не может получать какие-либо файлы ресурсов (ошибка 403), и поиск ответа по документам django-storages
и S3 пока что оказался трудным и бесплодным. : (
Вот что у меня сейчас есть:
На стороне Django у меня django-storages
настроено с:
-
AWS_DEFAULT_ACL = 'authenticated-read'
SECURE_REFERRER_POLICY = 'same-origin'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
На AWS у меня действует следующая политика (политика доступа по рефереру была удалена) :
{
"Statement": [
{
"Sid": "Allow programatic admin to handle bucket",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxxxx:user/bucket-manager"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
Следующие CORS:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
И программа пользователя c имеет следующую политику:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
]
}
]
}
У меня было ощущение, что Мне не хватало, чтобы добавить пользователя bucket-manager
в ACL ведра, но пользовательский интерфейс запрашивает канонический идентификатор, и я, честно говоря, не могу его найти.