【发布时间】:2021-10-18 08:31:27
【问题描述】:
我正在给客户一个 put_object 方法的预签名 URL:
服务器:
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 服务函数来做到这一点。
正如我所见,无法为多个方法(head_object + put_object)生成预签名 url
我的用例是:
- 客户端通过 put_object 权限从我的服务器 API 获取预签名 url。
- 客户端 put_object 使用预签名的 url 到 S3。
- 客户端使用预签名的 url + 额外元数据调用我的服务器 API
- 我的服务器 API 将 s3 密钥与额外的元数据一起存储在 DB 中。 API 应该验证 s3 密钥是否存在(很容易从预签名的 url 中提取), 并检查预签名的网址是否有效(如何?)
我知道我可以使用 lambda s3 触发器,但这会使进程异步,更难知道我们何时完成了对象的处理。
【问题讨论】:
标签: amazon-web-services amazon-s3 boto3