3

我们正在使用(com.amazonaws:aws-java-sdk 版本 1.11.18)创建亚马逊 S3 签名的 url -

AmazonS3 s3 = new AmazonS3Client(credentials);
s3.generatePresignedUrl(bucketName, objectName, expiration, method);

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

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

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

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

4

1 回答 1

1

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

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

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

private static final Map<String, String> bucketRegionCache
于 2017-12-12T09:26:23.823 回答