【问题标题】:Amazon S3 validate pre signed urlAmazon S3 验证预签名 URL
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2018-12-26
      • 2013-03-20
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      相关资源
      最近更新 更多