Статические файлы 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

Вернуться на верх