Настройте корзину GCS, чтобы разрешить общедоступную запись, но не перезаписывать

В облачном хранилище Google я хочу, чтобы PUBLIC (все пользователи) мог загружать новые файлы и загружать существующие файлы, но я не хочу, чтобы PUBLIC мог перезаписывать существующий файл.

Справочная информация: URL-адреса загрузки и загрузки обычно определяются моим собственным приложением. Так что в нормальных условиях проблем нет, потому что приложение гарантирует, что URL-адреса всегда уникальны при записи. Но злоумышленник может взломать мое приложение и потенциально сможет загружать файлы (плохо) в мое облачное хранилище и перезаписывать существующие файлы (очень плохо).

Я знаю, что могу решить эту проблему, проксируя через App Engine или используя подписанные URL-адреса, чего я стараюсь избегать из-за временных ограничений. Своевременная обработка важна, поскольку мое приложение обрабатывает файлы (почти) в реальном времени, и дополнительная задержка всего в 1000 мс для обработки двух последовательных запросов была бы слишком долгой.

Можно ли настроить облачное хранилище таким образом, чтобы возвращалась ошибка в случае попадания в уже существующий файл во время загрузки, например:

Сегмент: PUBLIC имеет доступ на ЗАПИСЬ Отдельный файл: PUBLIC имеет доступ на чтение

Это сработает? Что происходит в GCS, если ACL ведра и файла противоречат друг другу? В приведенном выше примере корзина разрешает доступ на запись, но если загрузка попадает в уже существующий файл с доступом только для чтения, будет ли такой запрос выполняться GCS, или GCS будет рассматривать файл как уже существующий в этот момент и заменять его новым содержимым ?

Мы будем очень признательны за любой другой подход, который может сработать.


person Oliver Hausler    schedule 17.08.2014    source источник
comment
Интересен вопрос времени. Может ли ваш сервер выдать несколько подписанных URL-адресов до того, как они понадобятся?   -  person Brandon Yarbrough    schedule 18.08.2014
comment
Да @Brandon, спасибо за идею. Я тоже об этом думал, и если ничего не выйдет, то, наверное, воспользуюсь этим маршрутом.   -  person Oliver Hausler    schedule 20.08.2014
comment
В конце концов, я согласился с вашим предложением заранее сохранить несколько подписанных URL-адресов. Работает хорошо, несмотря на некоторую загрузку процессора для подписи, но до сих пор это действительно кажется единственным жизнеспособным решением. [Чтобы получить кредиты @BrandonYarbrough, отправьте ответ, чтобы я мог подтвердить его правильность.]   -  person Oliver Hausler    schedule 30.11.2014


Ответы (1)


Вы хотите установить эти роли IAM в корзине:

  • роли / storage.objectCreator
  • роли / storage.objectViewer

https://cloud.google.com/storage/docs/access-control/iam-roles гласит:

«objectCreator позволяет пользователям создавать объекты. Не дает разрешений на просмотр, удаление или перезапись объектов».

person Frank Farzan    schedule 06.02.2019