Можно ли хранить секреты пользователя в PropertiesService.getUserProperties()?

Я разрабатываю надстройку Google Workspace (автономный скрипт), которая будет выполнять вызовы REST API к внешней службе, и для этой цели ему необходимо предоставить ключ API. Я запрашиваю ввод ключа API у пользователя, а затем сохраняю его вPropertiesServiceследующим образом:

СuserPropertiesограничены текущим пользователем, кажется, все в порядке. Но у меня есть несколько проблем с этим решением:

  1. Это действительно безопасно? Я имею в виду, что он хранится в виде простого текста, поэтому, возможно, есть способы получить его другим почтовым пользователем?
  2. Идея, что по ошибке я бы использовалgetScriptProperties()и, таким образом, утечка ключа API одного пользователя всем другим пользователям вызывает у меня кошмары. Это высокочувствительный ключ API. Злоупотребление обойдется пользователю в кучу денег.

Я читал, что некоторые пользователи предлагают https://cloud.google.com/secret-manager , но я не уверен, что он подходит для этого конкретного сценария. Это потребует еще одного внешнего вызова API. Это не бесплатно. И, наконец, насколько я понимаю, я буду своего рода владельцем всех этих секретов, поскольку я буду владельцем проекта Google Cloud, в котором работает этот API.

Все, что я хочу, это чтобы пользователи могли безопасно хранить свои ключи, чтобы никто, включая меня, никогда не смог получить к ним доступ. Что ты предлагаешь? Спасибо!

1 ответ

Это действительно безопасно? Я имею в виду, что он хранится в виде простого текста, поэтому, возможно, есть способы получить его другим почтовым пользователем?

Безопасность относительна. Абсолютной секретности не бывает. Вот несколько сценариев атаки:

  • Сотрудники или служба поддержки Google могут иметь неограниченный доступ

  • Если конкретный пользователь установил триггер, этот триггер запускается, поскольку этот пользователь и другие пользователи, если они могут запускать сценарий и имеют доступ к редактированию сценария, смогут получить доступ к ключам. Распространенным сценарием может быть установленный триггер редактирования на листе. Пользователь B может получить доступ к пользователю A, если он может вносить изменения, а также редактировать сценарий. Как упоминалось в комментариях doubleunary, это не проблема в опубликованном дополнении, поскольку исходный код недоступен или редактируется.

  • Возможно шифрование ключей. Но где бы вы хранили ключ дешифрования? Вы можете попросить каждого пользователя иметь собственный пароль для расшифровки ключа. Но сколько раз вы собираетесь делать вызов API? Придется ли им каждый раз вводить ключ? В какой момент удобство преобладает над необходимостью секретности?

Мысль о том, что по ошибке я воспользуюсь getScriptProperties() и таким образом передам ключ API одного пользователя всем другим пользователям, вызывает у меня кошмары. Это высокочувствительный ключ API. Злоупотребление обойдется пользователю в кучу денег.

Это возможно, но этого легко избежать путем тщательного просмотра кода вами и вашими коллегами.

Вот такие сценарии я мог придумать.

Связанный:

Безопасное хранение секретов API, используемых в скрипте Google Apps — опубликованная библиотека