sri*_*apa 5 amazon-s3 amazon-web-services
AWS S3预签名URL中每个对象的预签名URL数量是否有限制.说如果我想在2分钟内为每个对象创建1000个预先签名的URL.这是有效的情况吗?
Mic*_*bot 19
您可以根据需要创建任意数量的已签名URL.但是,根据您的动机和策略,对于完全相同的对象,唯一的预先签名的URL 的数量存在实际限制.
S3(在2014年之前首次部署的S3区域)支持两种认证算法V2和V4,并且签名的URL看起来非常不同,因为算法非常不同.
在V2中,如果由相同的AWS密钥签名,则给定过期时间的签名URL将始终保持相同.
如果您为某个对象的URL签名,将来设置为一分钟...并立即重复该过程,这两个签名的URL将是相同的.
接下来,恰好一秒钟之后,为同一个对象签署一个URL,以便将来过期59秒,并且新签名的URL 也将是相同的.
为什么?因为在V2中,到期时间是UTC的绝对挂钟时间,并且实际生成签名URL时的历史记录中的特定时间不会更改任何内容.
V4是不同的.在上面的场景中,前两个仍然是相同的,但第二个不会,因为V4 auth包含您创建签名URL的日期和时间,或者您说的时间.到期时间相对于签名时间而不是绝对时间.
请注意,这两种形式的签名URL都是防篡改的 - 过期时间嵌入在URL中,但是在签名后尝试调整它将使签名无效并使其无效.
如果需要为同一对象生成大量已签名的URL,则需要增加每次单独签名尝试的到期时间,以获取唯一值.(编辑:或不,如果你感觉聪明......见下文).
在我看来,您可能会认为S3在签名过程中有积极的作用,但事实并非如此.这一切都在您的本地代码中完成.
在任何意义上,S3都不知道您生成的签名网址,除非或直到使用它们.当签名请求到达时,S3会执行与您的代码完全相同的操作 - 它会对请求的某些属性进行规范化,并生成签名.然后,它将生成的内容与代码应生成的内容进行比较,并给出相同的参数.如果他们生成的签名与您提供的签名匹配(并且您使用的密钥有权执行请求的操作),则请求成功.
更新:事实证明,有一种非官方机制允许您在签名过程中嵌入额外的"熵",为同一对象和到期时间生成唯一的,每用户(例如)签名的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
| 归档时间: |
|
| 查看次数: |
5430 次 |
| 最近记录: |