AWS S3 预签名 URL 对于不同区域的行为有所不同

问题描述 投票:0回答:1

我们在 us-east-1 上部署了 AWS python lambda,对于其中一项功能,我们从发送到前端的 lambda 以及从其生成预签名 URL 我们直接将文件上传到S3。这对于 us-east-1 来说工作得很好。 我们最近将相同的代码部署到 us-east-2,但他们的此功能不起作用。它正在生成预签名 URL,但当前端尝试将文件上传到 S3 时,它会给出 403 访问被拒绝。 我发现 boto3 s3 客户端使用不同版本的算法来生成预签名 URL。 我在使用 v4 的两个区域中记录了预签名算法版本。

我注意到前端对 S3 的 PUT 请求有一个不同之处:

1. for us-east-1 it is sending this parameters:
    Expires=1702627703
    
2. for us-east-2 it is sending this:
    X-Amz-Date=20231215T101608Z&
    X-Amz-Expires=36000&
    X-Amz-Algorithm=AWS4-HMAC-SHA256

对于 us-east-2,它使用 v4(X-Amz-Algorithm=AWS4-HMAC-SHA256 表示),但我不认为对于 us-east-1 它使用 v4,即使它在日志中打印 v4。 我该如何解决这个问题?

amazon-web-services amazon-s3 boto3
1个回答
0
投票

Botocore 在为 us-east-1 区域生成预签名帖子时使用签名版本 s3v2,并为其他区域使用 s3v4

您可以在Boto Core S3客户端中指定签名版本

s3 = boto3.client('s3', 'us-east-1', config=Config(signature_version='s3v4'))
© www.soinside.com 2019 - 2024. All rights reserved.