【问题标题】:expired s3 presigned url过期的 s3 预签名网址
【发布时间】:2020-10-05 04:03:30
【问题描述】:

我有一个image,我使用预签名的 url 上传到了 S3。起初,图像是可见的...

  1. 用于我应用的image_tag,或
  2. 用于任何 html 文档的 <img src="">。

...但是当它被复制粘贴到我的浏览器时,它是不可见的。

现在过期日期已过,图像仍可查看...但仅在我的应用程序请求时才可见。过期日期不是应该阻止访问吗?

我在某处读到,到期日期应该只影响文件上传,但对this question 的响应则不然。

【问题讨论】:

  • “当我的应用请求时”是什么意思?应用程序是否生成新的预签名 URL?如果您查看应用程序生成的 URL,是否每次都不同(例如在签名中)?
  • 你是对的。我正在使用一个名为 Shrine 的 rails gem,以及一个名为 Uppy 的直接上传节点包。当文件上传到存储桶时,文件元数据被插入到表单中,当我提交时,它被保存到我的数据库中。我的印象是,硬编码的 url 被保存了。手动检查<attachment>_url后,似乎url每次都在变化。

标签: ruby-on-rails amazon-web-services amazon-s3 pre-signed-url


【解决方案1】:

过期时间仅与 URL 相关,与对象本身无关。 如果您使用预签名 URL 上传对象并使用公开读取 ACL 配置预签名 URL,则该对象将对任何人公开。不过,如果您使用私有 ACL 配置上传它,则只能上传此对象。要阅读它,您需要使用 getObject 操作创建一个新的预签名 URL。 我写了一篇关于如何使用预签名 URL 的文章,它在 nodeJS 中,但我认为它可以帮助你。查看代码 sn-ps。

https://www.altostra.com/blog/aws-s3-presigned-url

【讨论】:

    【解决方案2】:

    我认为您的应用程序本身每次加载页面时都会从 S3 请求预签名 URL,因此您实际上会获得一个新的预签名 URL 来查看图像。

    如果您在创建预签名 url 时未指定到期日期,则将应用默认到期日期。此link 具有到期值。

    任何拥有有效安全凭证的人都可以创建预签名 URL。但是,为了成功访问对象,预签名 URL 必须由有权执行预签名 URL 所基于的操作的人创建。

    可用于创建预签名 URL 的凭据包括:

    IAM 实例配置文件:有效期最长为 6 小时

    AWS Security Token Service : 签名后有效期最长为 36 小时 永久凭证,例如 AWS 账户根的凭证 用户或 IAM 用户

    IAM 用户:使用 AWS 签名版本 4 时有效期最长为 7 天

    要创建有效期最长为 7 天的预签名 URL,请先 指定 IAM 用户凭证(访问密钥和秘密访问密钥) 到您正在使用的 SDK。然后,使用 AWS 生成预签名 URL 签名版本 4。

    如果您使用临时令牌创建了预签名 URL,则该 URL 令牌过期时过期,即使 URL 是使用 过期时间。

    根据您创建预签名 URL 的方式,它们可用于对象共享(例如图像查看)或用于将对象上传到 S3。它们是不同类型的 URL,因为每个 URL 都附加了一组不同的权限,因此您不能将相同的预签名 URL 用于上传和下载。无论如何,在这两种情况下,您都可以为预签名 URL 定义到期时间。

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 2020-11-16
      • 2023-03-25
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2018-06-24
      相关资源
      最近更新 更多