gpt4 book ai didi

amazon-web-services - AWS S3 预签名 URL 限制

转载 作者:行者123 更新时间:2023-12-04 16:24:23 25 4
gpt4 key购买 nike

AWS S3 预签名 URL 中每个对象的预签名 URL 数量是否有任何限制。说如果我想在 2 分钟内为每个对象创建 1000 个预先签名的 url。这是有效的场景吗?

最佳答案

您可以根据需要创建任意数量的签名 URL。但是,根据您的动机和策略,对于完全相同的对象的唯一预签名 URL 的数量存在实际限制。

S3(在 2014 年之前首次部署的 S3 区域中)支持两种身份验证算法,V2 和 V4,并且签名的 url 看起来非常不同,因为算法非常不同。

在 V2 中,如果由相同的 AWS key 签名,给定到期时间的签名 URL 将始终看起来相同。

如果您对某个对象的 url 进行签名,并将其设置为在 future 一分钟后过期……并立即重复该过程,则两个签名的 URL 将是相同的。

接下来,恰好一秒后,为同一个对象签署一个 url 以在 future 59 秒到期,并且这个新的签名 URL 也将是相同的。

为什么?因为在 V2 中,到期时间是 UTC 中的绝对挂钟时间,而实际生成签名 URL 的历史特定时间不会改变任何内容。

V4 不一样。在上面的场景中,前两个仍然是相同的,但第二个不会,因为 V4 auth 包括您创建签名 url 的日期和时间,或者您说创建的日期和时间。到期时间是相对于签名时间的,而不是绝对的。

请注意,签名 URL 的两种形式都是防篡改的——过期时间嵌入在 url 中,但在签名后尝试调整它会使签名无效并使其无用。

如果您需要为同一个对象生成大量签名 url,则需要增加每次签名尝试的到期时间以获得唯一值。 (编辑:与否,如果你觉得自己很聪明……见下文)。

我还想到,您可能认为 S3 在签名过程中扮演着积极的角色,但事实并非如此。这一切都在您的本地代码中完成。

S3 在任何意义上都不知道您生成的签名 URL,除非或直到它们被使用。当签名请求到达时,S3 会做与您的代码完全相同的事情——它规范化请求的某些属性,并生成一个签名。然后,在给定完全相同的参数的情况下,将它生成的内容与您的代码应该生成的内容进行比较。如果他们生成的签名与您提供的签名匹配(并且您使用的 key 有权执行请求的操作),则请求成功。

更新:事实证明,有一种非官方机制允许您将额外的“熵”嵌入到签名过程中,为相同的对象和到期时间生成唯一的、每个用户(例如)签名的 URL。

在 V2 身份验证下,通常不希望您在签名逻辑中包含非 S3 特定的参数,它看起来像是一个错误和一个功能……添加 &x-amz-meta-{anything-here}={unique-value-here}查询字符串参数到您的 URL。这些在 PUT 中用作标题请求但在 GET 中毫无意义请求,然而,如果存在,S3 仍然要求将它们包含在签名计算中,即使参数键和值最终会被 S3 丢弃......但添加的值是防篡改的,不能被恶意在不使签名无效的情况下删除或更改。

相同的机制在 V4 中也有效,尽管原因不同。

此技术的功劳:http://www.bennadel.com/blog/2488-generating-pre-signed-query-string-authentication-amazon-s3-urls-with-user-specific-data.htm

关于amazon-web-services - AWS S3 预签名 URL 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24896743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com