Python 预签名URL和x-amz-acl
我想创建一个所谓的“预签名”URL,用于将特定对象(PUT)上传到AmazonS3存储桶 到目前为止还不错。我正在使用python库创建一个URL,其中包含所有必要的内容(过期、签名等)。URL如下所示:Python 预签名URL和x-amz-acl,python,amazon-web-services,amazon-s3,boto,Python,Amazon Web Services,Amazon S3,Boto,我想创建一个所谓的“预签名”URL,用于将特定对象(PUT)上传到AmazonS3存储桶 到目前为止还不错。我正在使用python库创建一个URL,其中包含所有必要的内容(过期、签名等)。URL如下所示: https://.s3.amazonaws.com/?Signature=&Expires=&AWSAccessKeyId=&x-amz acl=公共读取 请注意最后一个参数 据我所知,这至少限制了使用此URL的人将对象上载到特定bucket中的特定密钥,还限制了将在对象上设置为“public
https://.s3.amazonaws.com/?Signature=&Expires=&AWSAccessKeyId=&x-amz acl=公共读取
请注意最后一个参数
据我所知,这至少限制了使用此URL的人将对象上载到特定bucket中的特定密钥,还限制了将在对象上设置为“public read”的固定ACL
不过,我的最后一句话完全不正确
事实证明,如果使用此URL,则可以使用x-amz-acl头执行以下操作(与同名的查询字符串参数相反,必须设置该参数才能成功进行签名检查):
- 对bucket所有者的限制比默认情况下更严格
- 对非桶所有者的限制更少
x-amz-acl=public read
,则可以将x-amz-acl
头设置为authenticated read
,而不是公开可读的对象,获取一个只能由经过身份验证的用户读取的对象PUT
请求上传到所谓的“预签名”URL?据我所知(这里我可能是错的),headerx-amz-acl
优先于querystring参数——它们的作用是相同的。签名检查期间只考虑querystring参数的原因很简单,因为头不是策略签名检查的一部分
可能会帮助你;在创建表单以直接上载到S3时,它对我帮助很大。似乎您对acl参数使用了错误的名称。根据他们关于签名请求的指南,尝试使用acl: 如果请求处理子资源,如版本控制、位置、acl、torrent、生命周期或版本ID,则附加子资源、其值(如果有)和问号。注意,如果有多个子资源,子资源必须按子资源名称按字典顺序排序,并用“&”分隔。e、 g.?acl和versionId=值 构建CanonicalizedResource元素时必须包含的子资源列表包括:acl、生命周期、位置、日志记录、通知、零件号、策略、requestPayment、torrent、uploadId、uploads、versionId、版本控制、版本和网站
因为你是唯一一个在这个问题上付出了一些努力的人,所以你得到了赏金才是公平的,尽管很不幸,答案对我毫无帮助;我只是想把我在这方面的知识传授给大家。不,你所引用的内容谈到了针对子资源的请求,如cors、acl、lifecycle等。如果我试图创建一个请求,它将允许修改acl,即在特定存储桶上设置的acl,那么这将是相关的。我的问题是关于将对象上载到bucket并在正在上载的对象上指定acl。那是完全不同的。