繁体   English   中英

使用 IntelliJ IDEA 进行调试时如何将服务帐户凭据添加到 Google App Engine?

[英]How to add service account credentials to Google App Engine when debugging with IntelliJ IDEA?

我正在开发一个使用 Google Cloud Storage 的 Google App Engine(标准环境)应用程序。 到目前为止,我一直使用App Engine APIs for Cloud Storage ,它为使用 Datastore 的 Cloud Storage 提供本地模拟。 由于这些 API 现在已经过时,我决定使用 推荐的 API ,但是在本地服务器上运行时我正在努力使用凭据(我已经在使用新的Cloud Code 插件,而不是旧的App Engine插件)。

我创建了一个服务帐户,并为它创建并下载了密钥。 如果我要运行一个普通的 Java 应用程序,我将能够为 VM 指定环境变量,并且我可以提供必要的-DGOOGLE_APPLICATION_CREDENTIALS=xxxxx.json参数。 Cloud Code提供的服务器似乎没有任何方法如何提供环境变量,我只能提供VM选项,因此我不知道如何为其提供必要的环境,或者如何将凭据传递给它以其他方式。 我让它工作的唯一方法是使用

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 服务器上运行时传递服务帐户凭据的正确方法是什么?

大警告的问题是 Google 不希望您使用用户凭据代替服务帐户凭据。 Google 正在锁定(限制)第三方服务(您)可以请求的范围/数据。 我的建议是不再使用用户凭据,因为它们最终将不再起作用。

有几种方法可以解决这个问题。

方法 1 :设置 CLI 以使用服务帐户:

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

为服务帐户使用正确的 email 地址。 这可以在 Google Cloud 控制台和 JSON 文件中找到。 Google 库会找到这些凭据。 在我的网站上,我写了几篇关于服务帐户、应用程序默认凭据 (ADC) 等详细信息的文章。

方法 2:在代码中指定服务帐户

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

创建一个标志或环境变量,以便您的代码可以 if-else 决定何时在桌面上运行以处理凭据。

方法三:

如果设置了系统(不是 VM 命令行)环境变量GOOGLE_APPLICATION_CREDENTIALS ,则库将使用该变量指向的文件名作为服务帐户凭据。 此文件是 JSON 格式的 Google Cloud 服务帐户凭据文件。

在启动 IntelliJ 之前设置此环境变量。

我的文档链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM