Я разрабатываю приложение 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?