Статические файлы Django на AWS S3 возвращают 403 запрет
Я работаю над проектом Django(3), который развернут на Heroku. Я пытаюсь подключить AWS S3 с помощью Django Storages для загрузки статических и медиа файлов в S3 Bucket.
Примечание: Я много гуглил и пробовал все решения, которые нашел, но ничего не решило мою проблему, поэтому не отмечайте это как дубликат, пожалуйста!
Я создал ведро S3 с включенным публичным доступом и добавил следующую конфигурацию CORS:
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
Также, создал IAM пользователя с программным доступом и дал разрешение S3FullAccess
Вот что у меня есть в **settings.py**
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_QUERYSTRING_AUTH = False
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_REGION_NAME = 'us-east-1'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'
Если я открываю файлы из ведра напрямую, я вижу файл в браузере, но когда я загружаю свой сайт (pythonist.org), эти файлы возвращаются с 403 forbidden
Вот ответ от вкладки Network браузера для файла:
Summary
URL: https://s3.amazonaws.com/pythonist.org/css/normalize.css
Status: 403 Forbidden
Source: Network
Initiator:
pythonist.org:18
Не знаю, что здесь не так, Заранее спасибо!
Похоже, что ваше ведро не является общедоступным. Ваше публичное ведро должно иметь политику ведра, подобную этой (пример с некоторыми удаленными атрибутами):
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "YOUR_IAM_USER"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::pythonist.org",
"arn:aws:s3:::pythonist.org/*"
]
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::pythonist.org/*"
}
]
}
Ваш IAM пользователь имеет любые разрешения, в то время как общественность может получить только объекты (не из корневого каталога здесь, измените в соответствии с вашими потребностями). Создайте свою политику с помощью AWS Policy Generator