Как добавить учетные данные учетной записи службы в Google App Engine при отладке с помощью IntelliJ IDEA? - PullRequest
1 голос
/ 10 октября 2019

Я занимаюсь разработкой приложения Google App Engine (стандартная среда), которое использует Google Cloud Storage. До сих пор я использовал API App Engine для облачного хранилища , которое обеспечивает локальную эмуляцию для облачного хранилища с использованием хранилища данных. Поскольку эти API устарели, я решил использовать рекомендуемые API , однако я борюсь с учетными данными при работе на локальном сервере (я уже использую новый плагин Cloud Code , а не старый App Engine один).

Я создал служебную учетную запись и создал и загрузил ключ для нее. Если бы я запускал обычное Java-приложение, я мог бы указать переменные окружения для виртуальной машины и предоставить необходимые параметры -DGOOGLE_APPLICATION_CREDENTIALS=xxxxx.json. Сервер, предоставляемый облачным кодом, похоже, не имеет никакого способа предоставить переменные среды, я могу только предоставить параметры виртуальной машины, поэтому я не знаю, как предоставить ему необходимую среду или как передать ему учетные данныекаким-то другим способом. Единственный способ, с помощью которого я работал, - это

gcloud auth application-default login

, который сохранил учетные данные в D:\Users\xxxx\AppData\Roaming\gcloud\application_default_credentials.json. Это работает, но каждый раз, когда я отлаживаю свое приложение, я получаю следующее предупреждение:

com.google.auth.oauth2.DefaultCredentialsProvider warnAboutProblematicCredentials

ВНИМАНИЕ: Ваше приложение аутентифицировано с использованием endучетные данные пользователя из Google Cloud SDK. Мы рекомендуем, чтобы большинство серверных приложений использовали учетные записи служб. Если ваше приложение продолжает использовать учетные данные конечного пользователя из Cloud SDK, вы можете получить сообщение об ошибке «Превышена квота» или «API не включен».

Я не уверен, насколько серьезно это предупреждение, но оноконечно, звучит страшно для меня.

В моем приложении я использую этот код (Scala, Java будет очень похож) для создания службы с учетными данными:

  val credentials = GoogleCredentials.getApplicationDefault
  val storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService

Как правильнопередать учетные данные учетной записи службы при запуске на локальном сервере Google App Engine?

1 Ответ

3 голосов
/ 10 октября 2019

Проблема с большим предупреждением заключается в том, что Google не хочет, чтобы вы использовали учетные данные пользователя вместо учетных данных учетной записи службы. Google блокирует (ограничивает) то, что могут запрашивать сторонние сервисы (данные). Мой совет: больше не использовать учетные данные пользователя, так как в конечном итоге они больше не будут работать.

Существует несколько способов решения этой проблемы.

Метод 1 : Установите для CLI значениеиспользуйте учетную запись службы:

gcloud auth activate-service-account test@development.iam.gserviceaccount.com --key-file=test_google_account.json

Используйте правильный адрес электронной почты для учетной записи службы. Это можно найти в консоли Google Cloud, а также в файле JSON. Библиотеки Google найдут эти учетные данные. На моем веб-сайте я написал несколько статей о деталях учетных записей служб, учетных данных приложения по умолчанию (ADC) и т. Д.

Способ 2. Укажите учетную запись службы в своем коде

credentials = GoogleCredentials.fromStream(new FileInputStream(service_account_filename))

Создайте флаг или переменную среды, чтобы ваш код мог при принятии решения при запуске на рабочем столе обрабатывать учетные данные, если-либо еще.

Метод 3:

Если установлена ​​системная переменная окружения (не командной строки VM) GOOGLE_APPLICATION_CREDENTIALS, библиотеки будут использовать имя файла, на которое указывает переменная, для учетных данных учетной записи службы. Этот файл представляет собой файл учетных данных учетной записи облачной службы Google в формате JSON.

Задайте эту переменную среды перед запуском IntelliJ.

Мои ссылки на документы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...