Разрешить неизвестные пары значений ключей в предварительно подписанном URL-адресе S3 - PullRequest
1 голос
/ 04 мая 2019

У меня есть случай использования, когда я хочу сгенерировать предварительно подписанный URL-адрес S3 для данного ключа объекта, но хочу, чтобы URL работал, если к нему добавлены некоторые случайные параметры запроса. Есть ли способ сделать это, используя GeneratePresignedUrlRequest из AWS Java SDK или какой-либо другой класс в SDK?

* ** 1003 тысяча два * Пример

Если мой предварительно подписанный URL-адрес http://test.s3.amazonaws.com/sdfasdlkfjsd и я запрашиваю http://test.s3.amazonaws.com/sdfasdlkfjsd?random=100&random=200,, я все еще хочу иметь возможность загружать этот контент, игнорируя параметр произвольного запроса. В настоящее время я получаю это вместо

<Error>
    <Code>SignatureDoesNotMatch</Code>
    <Message>
        The request signature we calculated does not match the signature you provided. Check your key and signing method.
    </Message>
    ....
</Error>

1 Ответ

1 голос
/ 04 мая 2019

Предварительно подписанные URL-адреса предназначены для защиты от несанкционированного доступа.Любая модификация, которая изменяет элементы URL, делает подпись недействительной.Это разработано и не связано с какими-либо ограничениями в Java SDK.

Конечно, вы можете добавить пользовательские значения перед подписью URL.В документации к журналу доступа S3 рекомендуется, чтобы они начинались с x-, и алгоритм подписи V4 определенно его поддерживает, но неясно, как это сделать с помощью Java SDK.С JavaScript SDK есть простой хак , включающий перехватчики событий.

В качестве альтернативы, поместите CloudFront перед корзиной.Предварительно подписанные URL-адреса CloudFront с использованием пользовательских политик поддерживают подстановочные знаки в поле Resource , которое является полем, в котором указан полный URL-адрес в пользовательской политике.

...