2016-12-30 11 views
0

私は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(および他の記事)、これらの設定が動作しなければならないことを示していますか?

+1

djangoストレージミドルウェアは、独自の 'S3Storage'クラスを使用します。そのクラスはdjangoの 'settings.py'を知っており、' settings.AWS_ACCESS_KEY_ID'と 'settings.AWS_SECRET_ACCESS_KEY'が設定されていればそれを使います。 'boto3'自体はdjango設定ファイルを知らないので、そのファイルで設定したものは使用しません。そのため、S3接続を確立しようとするときに、「boto3」の鍵と秘密を指定する必要があります。 – birryree

+0

お返事ありがとうございました。私は同意します。今私は残念なことにどこから始めたのですか?私はまだ403の原因を知りません。 – Escher

+0

S3からのHTTP/403は実際に多くのことを意味することができます。 1つは、アクセスしようとしているバケットを一覧表示するためのアクセス権がユーザーの資格情報であるかどうかです。バケット内に存在しないキーにアクセスしようとすると、バケットの内容を表示する権限がないと、S3は403を返します。コードで問題を再現することも、ログ情報を表示することもできます。新しい質問/私に助けを求める。 – birryree

答えて

1

djangoストレージミドルウェアは独自のS3Storage classを使用しています。そのクラスはdjangoのsettings.pyに関する知識があり、設定されている場合はsettings.AWS_ACCESS_KEY_IDsettings.AWS_SECRET_ACCESS_KEYを使用します。

boto3それ自体はdjango設定ファイルの知識がないため、そのファイルで設定するものは何も使用しません。そのため、S3接続を確立しようとすると、boto3の鍵と秘密を指定する必要があります。

関連する問題