意外的 v4 签名 url 使用 com.amazonaws:aws-java-sdk 1.11.18

Unexpected v4 signed url using com.amazonaws:aws-java-sdk 1.11.18

我们正在使用 (com.amazonaws:aws-java-sdk 版本 1.11.18)-

创建亚马逊 S3 签名 urls
AmazonS3 s3 = new AmazonS3Client(credentials);
s3.generatePresignedUrl(bucketName, objectName, expiration, method);

我们希望得到一个签名 url,其中包含一个名为“签名”(v2 签名)的查询参数。

我们注意到,在我们的服务器中,一些请求会导致 v4 签名 - 我们意外地得到一个“x-amz-signature”查询参数作为签名的一部分 url。

一旦开始 - 它可以在服务器上为相同请求的 s3 对象重现。 但是,对其他对象进行签名的请求仍将使用 v2 进行签名。 在损坏的服务器上重新启动 tomcat 服务“修复”了这个问题。

知道什么会导致库开始使用 v4 对某些对象进行签名吗?

该问题已在当前版本的 sdk (1.11.244) 中重现。 最终我们开始手动设置配置 -

s3 = new AmazonS3Client(credentials,
                    new ClientConfiguration().withSignerOverride("NoOpSignerType"));

我们怀疑此行为是由于 createSigner 方法的内部实现引起的,如果映射中包含存储桶,则使用 V4 对请求进行签名。 -

private static final Map<String, String> bucketRegionCache