Разрешить неизвестные пары ключ-значение в предварительно подписанном URL-адресе S3

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

Пример

Если мой предварительно подписанный 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>

person pc70    schedule 03.05.2019    source источник
comment
Почему добавляются эти параметры запроса? Я не думаю, что это возможно, поскольку процесс подписи AWS V4 использует параметр строки запроса как часть канонического запроса, который хешируется и сравнивается при выполнении фактического запроса. docs.aws.amazon.com/general/ последний / gr /.   -  person JD D    schedule 04.05.2019


Ответы (1)


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

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

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

person Michael - sqlbot    schedule 04.05.2019