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

标签: django amazon-web-services amazon-s3 boto


【解决方案1】:

django 存储中间件使用自己的S3Storage class。该类了解 django 的 settings.py,如果已配置,将使用 settings.AWS_ACCESS_KEY_IDsettings.AWS_SECRET_ACCESS_KEY

boto3 本身不了解 django 设置文件,因此它不使用您在该文件中配置的任何内容。这就是为什么您在尝试建立 S3 连接时必须为 boto3 指定密钥和秘密。

【讨论】:

  • 不知道 django 设置的 boto3 应用程序怎么样?
  • @ManjitKumar 在您的环境中设置AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,或使用any of the methods specified here
猜你喜欢
  • 2020-12-21
  • 2017-06-06
  • 2020-10-30
  • 1970-01-01
  • 2011-03-30
  • 2018-12-17
  • 2014-04-03
  • 1970-01-01
  • 2016-05-12
相关资源
最近更新 更多