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

Я разрабатываю приложение Google App Engine (стандартная среда), которое использует Google Cloud Storage. Я использовал API App Engine для облака Хранилище до настоящего момента, которое обеспечивает локальную эмуляцию облачного хранилища с использованием Datastore. Поскольку сейчас эти 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

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

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

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

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

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


person Suma    schedule 10.10.2019    source источник


Ответы (1)


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

Есть несколько способов решить эту проблему.

Метод 1. Настройте интерфейс командной строки для использования учетной записи службы:

gcloud auth activate-service-account [email protected] --key-file=test_google_account.json

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

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

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

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

Метод 3:

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

Установите эту переменную среды перед запуском IntelliJ.

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

person John Hanley    schedule 10.10.2019
comment
Создайте флаг или переменную среды, я думаю, что приму решение на основе среды производства / разработки. - person Suma; 10.10.2019