【问题标题】:Presigned URL dont work for PUT but it works for GET S3预签名 URL 不适用于 PUT,但适用于 GET S3
【发布时间】:2017-11-26 07:04:24
【问题描述】:

我在使用 Amazon S3 预签名 URL 时遇到问题。在我的存储桶策略配置中,我只向特定 IAM 用户授予访问权限,我的意思是,不是公开的。因此,如果我在浏览器中导航到我的 S3 存储桶的文件 url,我会收到拒绝访问消息。 因此,我使用 aws-cli 工具生成该文件的预签名 url。使用该 URL,我能够正确获取文件,但问题是当我尝试将文件放入存储桶时。使用该网址我无法放置文件,因为我收到此消息错误:

<Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

我错过了什么?

【问题讨论】:

  • 我相信 HTTP 动词(例如 GETPOST)被编码到预签名 URL 中,所以如果您在 POST 请求中使用为 GET 创建的预签名 URL,你会得到这个错误。我不确定是否可以制作一个可用于两者的预签名 URL。

标签: amazon-s3 aws-cli


【解决方案1】:

PUT 方法和 GET 方法需要不同的预签名 URL。这是因为 HTTP 动词(PUTGET 等)是用于构造签名的“CanonicalResource”的一部分。详情请见"Authenticating Requests" in the Amazon S3 reference docs

【讨论】:

  • 考虑 s/POST/PUT/g。 POST 上传需要签名的策略文档,但 PUT 上传可以使用签名 URL。
  • 已编辑。 (最初的问题是关于PUT。)
猜你喜欢
  • 1970-01-01
  • 2016-10-26
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2021-09-08
  • 2015-01-04
相关资源
最近更新 更多