Существует несколько типов учетных данных приложения по умолчанию (ADC): учетная запись пользователя и учетная запись службы, а также их разновидности. Предупреждающее сообщение в вашем вопросе означает, что вы настроили интерфейс командной строки SDK с учетными данными пользователя (gcloud auth login
). Я рекомендую перейти на учетные данные сервисного аккаунта.
Эта команда настроит интерфейс командной строки с учетной записью службы. Вам понадобится ваш идентификатор проекта и файл JSON сервисного аккаунта.
gcloud auth activate-service-account test@PROJECT_ID.iam.gserviceaccount.com --key-file=service_account.json
Я написал статью, в которой подробно рассказывается о том, как настроить CLI:
Настройка Gcloud с учетными данными учетной записи службы а>
Почему Google выдает предупреждение:
- Авторизация учетных данных пользователя требует дополнительных усилий в серверных службах Google.
- Для создания учетных данных учетной записи пользователя требуется вмешательство человека.
- Токен обновления часто хранится программным обеспечением на клиенте или серверной части. Это создает брешь в безопасности.
- Программное обеспечение должно использовать межмашинную аутентификацию с ограниченными разрешениями (областями). Учетные данные пользователя обычно выдаются со слишком большим количеством разрешений для выполняемых вызовов API. Это снова проблема безопасности.
- Google решил, что учетным данным пользователя не будет разрешено иметь области, необходимые для доступа ко многим сервисам Google Cloud Platform. Это очень очевидно при создании клиентов OAuth, и вы получаете большое предупреждение о проверке. Существует серьезный риск того, что Google перестанет разрешать учетные данные пользователей для облачных служб. Лучше использовать поддерживаемый и официальный метод учетной записи службы и не сталкиваться с этой проблемой в будущем.
Однако, учитывая приведенные выше сведения, ваш вариант использования предоставляет пользователям учетные данные. Это плохая идея. Я бы продолжил использовать учетные данные пользователя для общения с вашим веб-интерфейсом. Ваш веб-интерфейс использует учетную запись службы, которую пользователь никогда не видит, и предоставляет окончательный доступ к службе (API).
[ОБНОВИТЬ]
Я только что заметил ваш комментарий о том, что вы разрабатываете свой собственный интерфейс командной строки. Без дополнительной информации о том, к каким проектам / службам будет осуществляться доступ к этому интерфейсу командной строки, вы можете рассмотреть возможность использования учетных данных пользователя, которые взаимодействуют с вашей службой, которая выдает пользователю токен доступа. Этот токен действителен только в течение одного часа. Вы можете поддержать обновление этого токена в своем коде. Это дает вам возможность использовать аутентификацию пользователя, контролировать использование учетной записи службы и при этом поддерживать хорошую безопасность. Обратите внимание, что я пытаюсь увести вас от распространения файлов учетной записи службы напрямую пользователям. Если эти пользователи являются вашими сотрудниками, это не проблема. Для людей, неподконтрольных вам, подумайте внимательно.
[КОНЕЦ ОБНОВЛЕНИЯ]
Постараюсь дать подробности и дать совет по вашим вопросам. Обязательно примите во внимание мои предыдущие комментарии, выбирая лучшую для вас стратегию.
В другом случае (учетные данные для учетной записи службы) я предполагаю, что мне придется предоставить инструкции каждому разработчику для выпуска файла json, который соответствует учетной записи службы с тем же разрешением, что и его / ее.
Если бы мне пришлось написать приложение, использующее учетные данные учетной записи службы, я бы создал метод для загрузки / установки учетных данных. Просто предоставьте файл и скажите им сделать этот шаг в программе. Однако у вас есть проблема. Распространять одну и ту же учетную запись службы среди всех пользователей - не лучшая идея. Как вы справляетесь с отзывом и т. Д.? Учетные записи службы Google Cloud Platform не предназначены для однозначного распространения среди более чем нескольких десятков или сотен пользователей в рамках одного проекта.
А как насчет процесса обновления?
У файлов ключей JSON с учетными данными службы не истекает срок действия. Срок действия токенов, созданных из учетной записи службы, действительно истекает, но это управляется клиентскими библиотеками Google или вашим собственным кодом для их автоматического обновления.
Что происходит каждый раз, когда пользователю назначаются / отменяются некоторые разрешения? Как этот JSON синхронизируется?
Файл учетной записи службы не содержит разрешений. Они хранятся в Google Cloud IAM. После изменения ролей, назначенных учетной записи службы, они прозрачно применяются глобально в течение нескольких минут.
person
John Hanley
schedule
13.10.2019