繁体   English   中英

Amazon S3 验证预签名 url

[英]Amazon S3 validate pre signed url

我给客户一个预签名的 url 用于 put_object 方法:

服务器:

s3_client = boto3.client('s3')
res = s3_client.generate_presigned_url('put_object', Params = {'Bucket': 'my-bucket', 'Key': 'filepath/inside-bucket/filename.json'}, ExpiresIn = 3600)

现在,如果客户端将预签名的 url 发送回服务器,服务器如何验证 url 是否有效(签名)?
理想情况下,我想调用 s3 服务 function 来做到这一点。
如我所见,无法为多种方法(head_object + put_object)生成预签名的 url

我的用例是:

  • 客户端从我的服务器 API 获得一个预签名的 url,具有 put_object 权限。
  • 客户端使用预签名的 url 将对象放入 S3。
  • 客户端使用预签名的 url + 额外元数据调用我的服务器 API
  • 我的服务器 API 将带有额外元数据的 s3 密钥存储在数据库中。 API 应该验证 s3 密钥是否存在(很容易从预签名的 url 中提取),并检查预签名的 url 是否有效(如何?)

我知道我可以使用 lambda s3 触发器,但这会使进程异步,更难知道 object 何时处理完成。

预签名 URL 仅包含请求中包含的参数的哈希签名,并使用密钥签名。

如果您有请求中显示的访问密钥的秘密密钥,您可以自己创建散列签名并验证签名是否正确(如果散列匹配)。

有可用代码: StackOverflow:AWS S3 presigned urls with boto3 - Signature mismatch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM