Неожиданный подписанный URL-адрес версии 4 с использованием com.amazonaws:aws-java-sdk 1.11.18
Мы создаем подписанные URL-адреса amazon S3, используя (com.amazonaws:aws-java-sdk версия 1.11.18) -
AmazonS3 s3 = new AmazonS3Client(credentials);
s3.generatePresignedUrl(bucketName, objectName, expiration, method);
Мы ожидаем получить подписанный URL-адрес, который содержит параметр запроса с именем "signature" (подпись v2).
Мы заметили, что на наших серверах некоторые запросы приводят к подписанию v4, когда мы неожиданно получаем параметр запроса "x-amz-signature" как часть подписанного URL.
Как только это начнется - он воспроизводится на сервере для того же запрошенного объекта s3. Однако запросы на подпись других объектов все равно будут подписываться с использованием v2. Перезапуск службы tomcat на сломанном сервере "исправляет" проблему.
Любая идея, что может заставить библиотеку начать подписывать некоторые объекты с v4?
1 ответ
Эта проблема была воспроизведена в текущей версии SDK (1.11.244). В конце концов мы пошли о настройке вручную -
s3 = new AmazonS3Client(credentials,
new ClientConfiguration().withSignerOverride("NoOpSignerType"));
Мы подозреваем, что такое поведение было вызвано внутренней реализацией createSigner
метод, подписывает запросы с V4, если ведро содержится в карте. -
private static final Map<String, String> bucketRegionCache