На ваш вопрос нет простого ответа.
Часть 1. Ваш хост не находится в Google Cloud
Защищен ли ваш хост? Если да, то можно поместить ключ JSON сервисного аккаунта в каталог, недоступный для общедоступных приложений. Здесь я имею в виду не помещайте файл в тот же каталог, что и ваш веб-сервер. Используйте такое расположение, как /config
, а затем усилите безопасность этого каталога, чтобы только авторизованные пользователи и ваше приложение могли читать файл.
После того, как вы определили безопасное расположение файла для вашего файла учетных данных, укажите эту учетную запись службы непосредственно в коде. Не используйте переменные среды или параметры командной строки. Не используйте GOOGLE_APPLICATION_CREDENTIALS
. Некоторые комментарии касаются использования KMS. Использование KMS — хорошая идея, но у вас есть ситуация «курица или яйцо». Вам нужны учетные данные для использования расшифровки KMS. Если злоумышленник может получить доступ к вашим зашифрованным учетным данным, он также может получить доступ к вашему исходному коду или перепроектировать приложение, чтобы увидеть метод дешифрования и учетную запись службы, используемую для дешифрования.
Примечание. Указание статического расположения для файлов учетных данных не рекомендуется для DevOps. Ваш вопрос касается безопасности, а не CI/CD. Вы используете общий сервер, что может означать многое, и DevOps, вероятно, не интегрирован в ваши развертывания или дизайн системы.
Если ваш хост не защищен, у вас нет реальных вариантов. Ничто из того, что вы можете сделать, не может помешать «опытному» инженеру изменить ваш метод «затенения».
Часть 2. Ваш хост находится в Google Cloud (Compute Engine, Cloud Run, App Engine и т. д.)
Примечание. Приведенные ниже методы находятся в стадии бета-тестирования. Это будущее авторизации в облаке Google, которая представляет собой управление доступом на основе идентификационных данных, дополняющее управление доступом на основе ролей и в некоторых случаях заменяющее его.
Вы можете назначить хосту учетную запись службы с нулевыми разрешениями. Обратите внимание на слово «назначить», а не «создать». Никакие файлы не задействованы. Затем вы можете использовать управление доступом на основе удостоверений (идентификатор учетной записи члена IAM учетной записи службы) для доступа к ресурсам. Я написал две статьи об этом для Google Cloud Run, которые применимы к другим службам Google (Compute Engine, Cloud Functions, KMS, Cloud Storage, Cloud Scheduler и т. д.):
person
John Hanley
schedule
22.07.2019