gpt4 book ai didi

python - 预签名 URL 和 x-amz-acl

转载 作者:太空狗 更新时间:2023-10-29 20:29:30 25 4
gpt4 key购买 nike

我想创建一个所谓的“预签名”URL,用于将特定对象 (PUT) 上传到 Amazon S3 存储桶。

到目前为止一切顺利。我正在使用 python 库 boto创建一个包含所有必要内容(过期、签名等)的 URL。网址如下所示:

https://<bucketname>.s3.amazonaws.com/<key>?Signature=<sig>&Expires=<expires>&AWSAccessKeyId=<my key id>&x-amz-acl=public-read

注意最后一个参数。

至少,据我所知,这限制了使用此 URL 的任何人将对象上传到特定存储桶中的特定键,并且还限制了将在对象上设置为“公共(public)读取”的固定 ACL。

虽然我最后的陈述是完全不正确的。

事实证明,如果您使用此 URL,则可以使用 x-amz-acl header(与查询字符串参数相对)执​​行以下操作具有相同的名称,您必须设置才能成功进行签名检查):

  1. 将其设置为“公开阅读”。对象的权限将包含两个条目:“Everyone”的“读取”和存储桶所有者的“完全控制”。这是意料之中的事情。
  2. 省略 x-amz-acl header 。对象的权限将与每个存储桶的默认权限相同(存储桶所有者具有完全控制权)。为什么?
  3. 将其设置为“公共(public)读写”。结果与(1)完全相同。
  4. 将其设置为“已验证读取”。 “经过身份验证的用户”获得“读取”权限,存储桶所有者拥有完全控制权。
  5. 将其设置为“bucket-owner-read”。结果与(2)完全相同。存储桶拥有者拥有完全控制权,未定义其他权限。
  6. 将其设置为“bucket-owner-full-control”。不出所料,存储桶拥有者将拥有完全控制权。
  7. 将它设置为一个不存在的固定 ACL 名称并得到一个错误。

看来是这样

  1. x-amz-acl header 不参与签名校验,因为你可以随意更改,请求成功。但是,在签名检查期间肯定会考虑查询字符串参数。
  2. x-amz-acl 查询字符串参数不会直接影响对象的权限,因为它自己什么都不做。
  3. 如果您发送 x-amz-acl header ,则生成的权限永远不会
    • 对存储桶拥有者的限制比默认情况下更多。
    • 对非 bucket-owner 的限制较少。
  4. 但是,对于非存储桶所有者,它们可以更具限制性。也就是说,如果您指定 x-amz-acl=public-read在查询字符串中,您可以设置 x-amz-acl标题为 authenticated-read而不是公开可读的对象,而是获取一个只能由经过身份验证的用户读取的对象。

x-amz-acl QS 参数和同名 header 之间的真实 关系是什么?有没有办法限制对象的权限,即通过 PUT 上传请求所谓的“预签名”URL?

最佳答案

据我了解(我在这里可能是错的), header x-amz-acl 优先于查询字符串参数——它们的作用相同。在签名检查期间仅考虑查询字符串参数的原因仅仅是因为 header 不是策略签名检查的一部分。

This page可能对你有帮助;在创建直接上传到 S3 的表单时,它对我帮助很大。

关于python - 预签名 URL 和 x-amz-acl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895775/

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