2016-12-30 61 views
0

我無法通過django-s3-storages中間件在我的django環境中創建S3連接(我從S3獲得403響應)。如何在django環境中讓boto訪問AWS證書?

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 

The docs(和其他職位)指出,這些設置應該工作:

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 

爲什麼不博託能夠連接?

+1

django存儲中間件使用自己的'S3Storage'類。該類具有django的'settings.py'的知識,並且如果它們被配置,將使用'settings.AWS_ACCESS_KEY_ID'和'settings.AWS_SECRET_ACCESS_KEY'。 'boto3'本身並不知道django設置文件,因此它不會使用您在該文件中配置的任何內容。這就是爲什麼在嘗試建立S3連接時必須指定「boto3」的密鑰和祕密。 – birryree

+0

謝謝,如果你把它作爲答案,我會接受。現在我回到了我開始不幸的地方;我仍然不知道是什麼造成了403s。 – Escher

+0

來自S3的HTTP/403實際上可能意味着很多事情。需要檢查的一件事是,您的憑證所針對的用戶/角色是否有權列出您嘗試訪問的存儲桶。如果您嘗試訪問存儲桶中不存在的密鑰,但無權列出存儲桶內容,則S3將返回403.如果您可以通過代碼重新創建問題或可以顯示日誌信息,則可以發佈新問題/請求我的幫助。 – birryree

回答

1

django存儲中間件使用它自己的S3Storage class。該課程具有django settings.py的知識,如果已配置,將使用settings.AWS_ACCESS_KEY_IDsettings.AWS_SECRET_ACCESS_KEY

boto3本身並不知道django設置文件,因此它不會使用您在該文件中配置的任何內容。這就是爲什麼當你嘗試建立S3連接時,你必須指定密鑰和祕密boto3