Я создаю приложение, которое будет запускаться в Google App Engine (GAE). Ему потребуется доступ к данным, хранящимся пользователем в других системах (например, пользовательский термостат Nest, почта Yahoo). Приложение, работающее в GAE, позволит пользователю предоставлять учетные данные для другой системы. Приложение будет хранить эти учетные данные в облаке Google (хранилище данных) для последующего использования приложением, запущенным в Google Compute Engine от имени пользователя. Приложение также позволит OAuth разрешить пользователю разрешить приложению обращаться к внешней системе от имени пользователя. Приложение должно будет хранить учетные данные пользователя (имя пользователя и пароль) или токены доступа OAuth в облаке Google.
Приложение должно будет зашифровать секреты перед их сохранением и иметь возможность дешифровать данные, чтобы отправить их во внешние системы. То есть, системе необходимо будет использовать симметричное шифрование, и для этого необходимо безопасно управлять ключами.
Как приложение может хранить эти секреты в хранилище данных Google Хранилище данных (Datastore) безопасно? Я думаю, что я ищу что-то вроде AWS CloudHSM для Google. То есть, я хотел бы хранить каждый секрет с идентификатором семени и ключа и использовать идентификатор ключа, чтобы получить ключ от системы управления ключами. Эта реализация также обеспечит ключевое вращение и другие стандартные методы обеспечения безопасности.
Я думаю, что я ищу Google Cloud-сервис или Google API, который обеспечивает управление секретами и позволяет только приложению с соответствующим идентификатором приложения Google обращаться к секретам.
Есть ли служба в Google Cloud или API Google, которая будет управлять секретами? Есть ли другая архитектура, которую я должен рассмотреть?
Кстати, приложение использует Google Identity Toolkit (GitKit) для аутентификации и авторизации пользователей для использования размещенного приложения GAE. Приложение позволяет пользователям создавать учетные записи, используя либо идентификаторы федерации, либо имя пользователя и пароли через GitKit.
Спасибо, Крис