Список версий объектов в корзине S3 через подписанный URI

В нашем проекте мы храним объекты в корзине S3 с включенным управлением версиями. На сервере нет никакой логики, кроме создания подписанного URI для использования клиентом. Мы хотели бы сохранить это так, поскольку мы хотим, чтобы клиент выполнял всю обработку.

К проблеме. Мы успешно можем сгенерировать подписанные URI для объекта GET и PUT для всех объектов, но мы не можем сгенерировать URI для перечисления всех доступных версий.

Это пример GET-url для объекта в одной из наших корзин, которая работает (99/2 - это папки в корзине): https://bucketname.s3.amazonaws.com/99/2?AWSAccessKeyId=ourkey&Signature=signature&Expires=1410784420

Согласно документации (GET-версии) мы должны добавить «версии» и «разные версии». Мы пробовали следующее: https://bucketname.s3.amazonaws.com/99/2?AWSAccessKeyId=ourkey&Signature=signature&Expires=1410784420&versions

Это приводит к тому, что браузер жалуется на неправильную подпись, отсутствие «? Версий». Если я читаю документы, я интерпретирую это как следует ' t быть включенным в подпись, если мы также не добавим к ней значение, чего мы не делаем. Проблема в том, что не имеет значения, добавлю ли я его затем к созданию подписи, поскольку это все еще не удается с ошибкой «Не существует такой вещи, как подресурс? Версий для ключа».

Есть ли кто-нибудь, кто успешно создал подписанный uri для объекта, чтобы перечислить его версии? Нам бы очень хотелось получить подсказки о том, что мы делаем неправильно! Я также хотел бы отметить, что мы не используем встроенный URI-генератор, так как не смогли подобрать его для наших нужд.


person Johan    schedule 15.09.2014    source источник


Ответы (1)


Список версий объекта - это операция, выполняемая «против» корзины, а не против объекта ... так что ваш путь всегда будет /, независимо от того, какие ключи вы хотите перечислить.

Вы указываете префикс ключа в строке запроса как prefix=....

Строка для подписи будет тогда начинаться с /bucketname/?versions&prefix=....

Вы сортируете все параметры строки запроса лексически, кроме для вложенного ресурса (в данном случае versions), который идет первым. Если подресурсов более одного, вы также лексически сортируете их между собой, но они все равно идут первыми. В подписываемой строке все разделяется знаком &.

Важное предостережение: список api может не подходить для передачи клиенту, поскольку вы можете в конечном итоге вернуть неправильные вещи ... «префикс» - это всего лишь префикс. Если он не совпадает в точности, он может соответствовать подстрокам, что может быть не тем, что вам нужно. Вам также может потребоваться использовать delimiter и max-keys и быть готовым к обработке разбивки на страницы с помощью усеченных списков, которые станут необходимыми, когда будет возвращено большое количество результатов.

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETVersion.html

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

person Michael - sqlbot    schedule 15.09.2014