Как сделать учетные данные AWS доступными для boto в среде django?

Я не могу создать соединение S3 в своей среде django через промежуточное ПО django-s3-storages (я получаю ответ 403 от S3).

Boto, похоже, не может подобрать настройки среды, и я подозреваю, что причина в этом (обратная трассировка мало помогает). В качестве диагноза в manage.py shell:

import boto
boto.connect_s3()
>>> boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials

from django.conf import settings
boto.connect_s3(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
>>> S3Connection:s3.amazonaws.com

Документы (и другие сообщения) указывают, что эти настройки должны работать:

MEDIAFILES_LOCATION = 'media'
AWS_S3_CUSTOM_DOMAIN = 'my-bucket.s3-website-eu-west-1.amazonaws.com'
AWS_S3_HOST = 's3-website-eu-west-1.amazonaws.com'
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION)
DEFAULT_FILE_STORAGE = 'django_s3_storage.storage.StaticS3Storage'

#S3 settings from https://github.com/etianen/django-s3-storage
AWS_ACCESS_KEY_ID = "xxx"
AWS_SECRET_ACCESS_KEY = "yyy"
AWS_S3_BUCKET_NAME = "my-bucket"
AWS_S3_CALLING_FORMAT = "boto.s3.connection.OrdinaryCallingFormat"

# Make user uploaded files public
AWS_S3_BUCKET_AUTH = False
AWS_S3_MAX_AGE_SECONDS = 60*60*24*365 # 1 year
AWS_S3_GZIP = True

Почему boto не может подключиться?


person Escher    schedule 30.12.2016    source источник
comment
Промежуточное ПО хранилища django использует собственный класс S3Storage. Этот класс знает о settings.py django и будет использовать settings.AWS_ACCESS_KEY_ID и settings.AWS_SECRET_ACCESS_KEY, если они настроены. boto3 сам по себе ничего не знает о файле настроек django, поэтому он не использует ничего, что вы настраиваете в этом файле. Вот почему вы должны указать ключ и секрет для boto3 при попытке установить соединение S3.   -  person wkl    schedule 30.12.2016
comment
Спасибо, если вы поставите это как ответ, я приму. Теперь я вернулся к тому, с чего начал, к сожалению; Я до сих пор не знаю, что вызывает 403-е.   -  person Escher    schedule 30.12.2016
comment
HTTP/403 от S3 на самом деле может означать многое. Нужно проверить, имеет ли пользователь/роль, для которой предназначены ваши учетные данные, доступ к списку корзины, к которой вы пытаетесь получить доступ. Если вы попытаетесь получить доступ к несуществующему ключу в корзине, но у вас нет разрешений для вывода списка содержимого корзины, S3 вернет 403. Если вы можете воссоздать проблему с помощью кода или можете показать информацию журнала, вы можете опубликовать новый вопрос / попросить меня о помощи.   -  person wkl    schedule 30.12.2016
comment
Да, я проверил учетные данные. Я переформулировал вопрос и был бы признателен, если бы вы могли придумать что-нибудь еще: stackoverflow.com/q/41399502/3790954   -  person Escher    schedule 30.12.2016


Ответы (1)