私はdjango-s3-storageミドルウェアを使って私のdjango環境でS3接続を作成できません(私はS3から403応答を得ています)。django環境でbotoがAWS資格情報にアクセスする方法を教えてください。
Botoは環境設定を取得できないようですが、これが原因であると思われます(トレースバックはあまり役に立ちません)。 manage.py shell
での診断のよう:
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は接続できません:
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
The docs(および他の記事)、これらの設定が動作しなければならないことを示していますか?
djangoストレージミドルウェアは、独自の 'S3Storage'クラスを使用します。そのクラスはdjangoの 'settings.py'を知っており、' settings.AWS_ACCESS_KEY_ID'と 'settings.AWS_SECRET_ACCESS_KEY'が設定されていればそれを使います。 'boto3'自体はdjango設定ファイルを知らないので、そのファイルで設定したものは使用しません。そのため、S3接続を確立しようとするときに、「boto3」の鍵と秘密を指定する必要があります。 – birryree
お返事ありがとうございました。私は同意します。今私は残念なことにどこから始めたのですか?私はまだ403の原因を知りません。 – Escher
S3からのHTTP/403は実際に多くのことを意味することができます。 1つは、アクセスしようとしているバケットを一覧表示するためのアクセス権がユーザーの資格情報であるかどうかです。バケット内に存在しないキーにアクセスしようとすると、バケットの内容を表示する権限がないと、S3は403を返します。コードで問題を再現することも、ログ情報を表示することもできます。新しい質問/私に助けを求める。 – birryree