Нет, это невозможно.
Подписанный URL-адрес разрешает ровно один конкретный запрос, который преобразуется в каноническую форму перед подписанием.Служба затем собирает то же представление и вычисляет, какой должна была быть подпись, и в этот момент есть только один правильный ответ для того, какой может быть действительная подпись для данного глагола (например, PUT
), ресурс (ведро + ключ),набор учетных данных, отметка времени и срок действия.
На самом деле подпись не включает в себя копию разрешенных параметров запроса - они выводятся из запроса при его выполнении - поэтому механизм отсутствуетдля передачи любой информации службе, которая может быть использована для указания, например, того, что должен быть разрешен путь с подстановочными знаками.
Подписание URL PUT
для самого контейнера разрешает владельцу этого URL отправлять запрос на созданиекорзина с таким именем, как следует из полученной ошибки.
Одним из решений является создание веб-службы, которая отвечает на авторизованный запрос (что бы это ни значило в вашей среде, например, на основе веб-cookie пользователя).) с предварительно подписанным URL для параметров, указанных вквест, как только веб-сервис проверяет их.Имейте в виду, что если это веб-сайт или приложение, которое нужно записывать в корзину, вы никогда не можете доверять этим вещам только в том, чтобы делать разумные / безопасные запросы, потому что они находятся вне вашего контроля - поэтому проверка параметров будет иметь решающее значениечтобы избежать злонамеренных действий.
Другой вариант может быть awscurl
, который представляет собой инструмент, похожий на скручивание, который выполняет собственную подпись запроса.GCS имеет режим совместимости с AWS, так что это может означать, что вы можете использовать этот инструмент как есть, или, возможно, его можно адаптировать или, возможно, есть аналогичный инструмент для GCS.Но я предполагаю, что вам нужен подписанный URL в другом месте, а не на локальном компьютере, иначе вы просто использовали бы gsutil для загрузки.