Безопасно установите GOOGLE_APPLICATION_CREDENTIALS

Я пытаюсь использовать Google Cloud Services безопасным способом. В настоящее время я предоставляю свои учетные данные через putenv('GOOGLE_APPLICATION_CREDENTIALS=путь к файлу JSON'); См. https://cloud.google.com/docs/authentication/production.

Я хочу протестировать публично, разместив свой код на общем хосте/виртуальном сервере Linux. Однако, если я установлю безопасные разрешения для файла JSON, к ним не будет доступа. Если я сделаю общедоступным, файл JSON, который мне нужно включить, будет иметь закрытый ключ в виде простого текста.

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

  • Должен ли я хранить файл на своем сервере в безопасном месте?
  • Есть ли альтернатива для рабочих веб-сайтов для передачи общедоступного URL-адреса в putenv?

person going    schedule 22.07.2019    source источник


Ответы (4)


На ваш вопрос нет простого ответа.

Часть 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
comment
ваш сайт не работает :с - person Ben; 06.09.2019
comment
@Ben - я только что проверил, все работает. Можешь перепроверить для меня? - person John Hanley; 06.09.2019
comment
@Ben - Stackdriver показывает, что сайт перезагружался несколько раз, начиная примерно с 23:00 по тихоокеанскому времени, и каждый раз сайт не работал примерно 6 минут. Вероятно, обслуживание Google (надеюсь). - person John Hanley; 06.09.2019
comment
могу подтвердить, это вверх - person Ben; 06.09.2019
comment
Ваш блог работает в облаке? Я получаю 1 или 2 небольших периода простоя в день для каждого приложения, которое я там запускаю (я запускаю какой-то внешний инструмент безотказной работы) - person Ben; 06.09.2019
comment
Мой сайт находится за балансировщиком нагрузки, CDN, автомасштабированием и т. д., за исключением последних двух дней, когда выполняются некоторые работы над сайтом. У меня так много трафика, что мне нужны большие экземпляры ВМ, Cloud SQL и т. д. - person John Hanley; 06.09.2019

Одно из решений состоит в том, чтобы поместить содержимое ваших учетных данных JSON (в кодировке base64) в переменную ENV в интерфейсе конфигурации сервера, а затем мы запускаем манифест файла сервера из переменной ENV.

Например: echo $CREDENTIALS | base64 -d > /path/to/cred.json, затем export GOOGLE_APPLICATION_CREDENTIALS="*file_json_path"

person jszule    schedule 22.07.2019
comment
Но разве файл cred.json не должен по-прежнему находиться в небезопасном месте? Разве это не та же проблема? Как упоминалось выше, это общий виртуальный хост. - person going; 22.07.2019
comment
Другие процессы вообще не должны иметь возможности читать ваши ресурсы. В идеале ваш env проявляется в докере или какой-либо другой полностью отдельной среде. Кроме того, только вы и другой человек, у которого есть разрешение, также должны иметь возможность читать настройки вашей среды, так что это также безопасно. (например, героку) - person jszule; 22.07.2019

Вы можете использовать «gcloud auth application-default login» со своего терминала, чтобы пройти аутентификацию с использованием учетных данных конечного пользователя.

После аутентификации вы можете использовать сервисные объекты по умолчанию для любого ресурса GCP.

person Dhruv Ahuja    schedule 22.07.2019
comment
Использование этого метода приведет к печати предупреждающих сообщений из библиотек. Не используйте этот метод, кроме как для локального тестирования. - person John Hanley; 22.07.2019
comment
Вы можете хранить свои учетные данные в файле карты конфигурации или в kms. - person Dhruv Ahuja; 22.07.2019
comment
KMS требуются учетные данные для доступа к вашим зашифрованным учетным данным. - person John Hanley; 22.07.2019

Вы можете отредактировать файл .bashrc: export GOOGLE_APPLICATION_CREDENTIALS="*file_json_path", затем использовать: source .bashrc

-- линукс мята 19

person voccer    schedule 22.07.2019