【发布时间】:2016-12-31 00:27:57
【问题描述】:
我无法通过 django-s3-storages 中间件在我的 django 环境中创建 S3 连接(我收到了来自 S3 的 403 响应)。
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
为什么boto无法连接?
【问题讨论】:
-
django 存储中间件使用自己的
S3Storage类。该类了解 django 的settings.py,如果已配置,将使用settings.AWS_ACCESS_KEY_ID和settings.AWS_SECRET_ACCESS_KEY。boto3本身不了解 django 设置文件,因此它不使用您在该文件中配置的任何内容。这就是为什么您在尝试建立 S3 连接时必须为boto3指定密钥和秘密。 -
谢谢,如果你把它作为答案,我会接受。现在我又回到了我不幸开始的地方;我仍然不知道是什么导致了 403。
-
来自 S3 的 HTTP/403 实际上可能意味着很多事情。要检查的一件事是您的凭据所针对的用户/角色是否有权列出您尝试访问的存储桶。如果您尝试访问存储桶中不存在的密钥,但无权列出存储桶内容,S3 将返回 403。如果您可以通过代码重新创建问题或可以显示日志信息,您可以发布新问题/向我寻求帮助。
-
是的,我已经验证了凭据。我已经重新提出了这个问题,如果你能想到其他任何事情,我将不胜感激:stackoverflow.com/q/41399502/3790954
标签: django amazon-web-services amazon-s3 boto