Проблемы с доступом к мультимедиа в AWS S3, ОШИБКА 403 в приложении Django

#python #django #amazon-web-services #amazon-s3

#python #django #amazon-веб-сервисы #amazon-s3

Вопрос:

У меня возникли проблемы с доступом к мультимедийным файлам, загруженным на AWS S3 для моего приложения Django. Я пытался использовать библиотеки Boto3 и Django-Storages и следовал этим руководствам:

https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html
https://www.youtube.com/watch?v=kt3ZtW9MXhw

Веб-сайт администратора Django и мой веб-интерфейс не могут загружать какой-либо статический и мультимедийный контент. Администратор Django отображается без какого-либо CSS, и, аналогично, в моем интерфейсе нет изображений. введите описание изображения здесь

введите описание изображения здесь

Конфигурации AWS были добавлены в settings.py файл:

 AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_S3_REGION_NAME = "me-south-1"
AWS_STORAGE_BUCKET_NAME = 'jooler-mea'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.me-south-1.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_STATIC_LOCATION = 'static'
STATICFILES_STORAGE = 'joole.storage_backends.StaticStorage'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_STATIC_LOCATION)
DEFAULT_FILE_STORAGE_LOCATION = 'media'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'joole.storage_backends.MediaStorage'
  

Соответствующие хранилища в storage_backends.py файл:

 from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage


class StaticStorage(S3Boto3Storage):
    location = settings.AWS_STATIC_LOCATION


class MediaStorage(S3Boto3Storage):
    location = settings.DEFAULT_FILE_STORAGE_LOCATION
    file_overwrite = False
  

Я добавил S3FullAccess:
введите описание изображения здесь

Файлы успешно загружаются на веб-сайт AWS, я могу загрузить файлы оттуда на свой компьютер. введите описание изображения здесь Я пытался поиграть с CORS и пользовательскими политиками, но безуспешно. Я зашел в тупик или не уверен, куда идти дальше. Будем признательны за любую помощь! Спасибо!

Ответ №1:

Возможно, вам потребуется создать общедоступный доступ к вашей корзине AWS S3.

Обратитесь к https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-bucket.html

Это отличается от разрешений, которые вы предоставили в соответствии с вашим вопросом (для вашего собственного пользователя).

Или попробуйте установить следующую политику корзины. Смотрите скриншот. Политика корзины:

 {
    "Version": "2020-09-03",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::jooler-mea/*"
        }
    ]
}
  

введите описание изображения здесь

Комментарии:

1. Можете ли вы отправить распечатку из AWS списка файлов в вашей корзине?

2. Я добавил фотографию в исходный вопрос, я не могу вставить изображение в комментарии. Спасибо

3. Я обновил свой ответ… Попробуйте установить политику корзины вручную.

4. Как только вы это сделаете, вы, вероятно, увидите ярлык «Общедоступный», как на скриншоте.

5. Да! Готово! Сейчас загружена половина мультимедиа. Это означает, что любой может получить доступ к мультимедиа?