【问题标题】:Signature/Expires/Access Key ID appearing in URL Params. Django/Boto/S3出现在 URL 参数中的签名/过期/访问密钥 ID。 Django/博托/S3
【发布时间】:2012-07-20 17:48:17
【问题描述】:

缩略图 URL 中包含参数。我不确定为什么。我认为它们与我们正在使用的 sorl-thumbnail 或 boto 存储有关。 如何从 URL 中删除附加参数? 它们是来自 boto/s3 还是 sorl。 我不知道如何调试。

【问题讨论】:

标签: django amazon-s3 boto


【解决方案1】:

添加的额外参数用于实现Query String Authentication。这允许您对存储在 S3 中的私有资源的 URL 进行预签名。只要有人拥有预签名的 URL(并且尚未过期),他们就可以访问这些资源,即使这些资源不是公开可读的。

如果没有额外的参数,就无法提供对这些私有 S3 资源的公共访问。

【讨论】:

  • 为什么 S3 资源是私有的?我如何将它们公开?
  • 所有内容在 S3 中默认是私有的。您可以使用 boto 中 Key 对象的 make_public() 方法将其更改为公开可读,如果您更喜欢使用 GUI,也可以使用 AWS 控制台。
  • Boto3 不知道它们是否是私有的 - 默认是对 URL 进行签名,以便可以通过任何方式访问它。如果它们是公开的,您可以应用设置,以便将签名排除在 URL 之外
【解决方案2】:

使用:AWS_QUERYSTRING_AUTH = False

【讨论】:

  • 这个答案需要更多细节才能有用。
  • 它的文档记录很差,但这确实是您需要的东西。如果您的存储桶对所有人(您希望用于媒体)公开可见,则会删除身份验证参数。
【解决方案3】:

为我工作: AWS_QUERYSTRING_AUTH = 假

使用这个https://github.com/mstarinteractive/django-s3storage

from myapp.s3storage import S3BotoStorage
from django.contrib.staticfiles.storage import CachedFilesMixin


class CachedStaticS3BotoStorage(CachedFilesMixin, S3BotoStorage):

    """Extends S3BotoStorage to save static files with hashed filenames."""
    pass
StaticRootS3BotoStorage = lambda: CachedStaticS3BotoStorage(location='static')

【讨论】:

    【解决方案4】:

    这是奇怪的行为: Google Docs 预览器将工作并显示不带参数的预览,但如果 boto 附加签名,则会显示没有可用的预览。

    <iframe src="{% trans "https://docs.google.com/viewer?embedded=true&url=" %}{{ document.file.url }}" width="451" height="390" style="border: none;"></iframe>

    我一定是错过了什么。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2020-01-01
    • 2015-12-09
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多