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
爲什麼不博託能夠連接?
django存儲中間件使用自己的'S3Storage'類。該類具有django的'settings.py'的知識,並且如果它們被配置,將使用'settings.AWS_ACCESS_KEY_ID'和'settings.AWS_SECRET_ACCESS_KEY'。 'boto3'本身並不知道django設置文件,因此它不會使用您在該文件中配置的任何內容。這就是爲什麼在嘗試建立S3連接時必須指定「boto3」的密鑰和祕密。 – birryree
謝謝,如果你把它作爲答案,我會接受。現在我回到了我開始不幸的地方;我仍然不知道是什麼造成了403s。 – Escher
來自S3的HTTP/403實際上可能意味着很多事情。需要檢查的一件事是,您的憑證所針對的用戶/角色是否有權列出您嘗試訪問的存儲桶。如果您嘗試訪問存儲桶中不存在的密鑰,但無權列出存儲桶內容,則S3將返回403.如果您可以通過代碼重新創建問題或可以顯示日誌信息,則可以發佈新問題/請求我的幫助。 – birryree