带有 boto3 的 AWS S3 预签名网址 - 签名不匹配

kid*_*n01 5 python amazon-s3 amazon-web-services boto3

我想为存储桶中的对象创建一个预先签名的 url。我使用以下python代码:

    client = boto3.client(
    's3',
    aws_access_key_id=os.environ['AWS_ACCESS_KEY'],
    aws_secret_access_key=os.environ['AWS_SECRETS_KEY'],
    config=botocore.client.Config(signature_version='s3v4'),
    region_name='eu-central-1'
)
url = client.generate_presigned_url(
    ClientMethod='get_object',
    ExpiresIn=60,
    Params={
        'Bucket': MYBUCKET,
        'Key': MYKEY
    })
Run Code Online (Sandbox Code Playgroud)

然后我将生成的 URL 发送到我的前端。在客户端上,我将使用生成的链接创建一个标签,并在其上使用 click() 方法。这在其他项目中运行良好,但在这里我只收到错误:

The request signature we calculated does not match the signature you provided. Check your key and signing method.
Run Code Online (Sandbox Code Playgroud)

这很奇怪。用户应该拥有所有必要的权限。因为列出我的存储桶中的所有文件工作正常。

有人可以指出我为什么这不起作用的正确方向吗?

编辑

如果这有帮助,我将在前端使用 next.js。

kid*_*n01 1

问题是boto3的版本。

我尝试了最新版本(boto3 1.7.14),它产生了上述错误。

1.6.6 版的工作效果与我想要的完全一样。