Я занимаюсь разработкой приложения 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?