访问谷歌云存储的应用引擎项目的默认凭据?

Posted

技术标签:

【中文标题】访问谷歌云存储的应用引擎项目的默认凭据?【英文标题】:Default credential for app engine project accessing google cloud storage? 【发布时间】:2015-09-08 00:47:05 【问题描述】:

我有一个应用引擎项目,我想访问我的谷歌云存储默认存储桶。获取 Credential 对象的第一步失败,在活动实例上执行以下操作:

Credential creds = GoogleCredential.getApplicationDefault();

我得到的异常消息:

“应用程序默认凭据不可用。如果在 Google Compute Engine 中运行,它们可用。否则,必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。有关详细信息,请参阅https://developers.google.com/accounts/docs/application-default-credentials。”

这里的文档说生产应用程序引擎项目应该有权访问默认凭据?:

https://developers.google.com/identity/protocols/application-default-credentials

“3. 如果您在 Google App Engine 生产环境中运行,将使用与应用程序关联的内置服务帐户。”

我缺少一些设置吗?

我的应用引擎版本(gradle):

com.google.appengine:appengine-java-sdk:1.9.18

和谷歌云存储库版本:

com.google.apis:google-api-services-storage:v1-rev35-1.20.0

谢谢

【问题讨论】:

我知道这个问题已经很久没有提出来了,但是您可以尝试使用包含您的私钥数据的 JSON 文件的路径导出此参数以设置默认的谷歌云帐户,export GOOGLE_APPLICATION_CREDENTIALS=/Users/googleCredentials.json 【参考方案1】:

转到 Google Developers Console -> Credentials 并创建一个默认服务帐户 .json 密钥。当你这样做时,它会为你下载一个像default-account-credentials.json 这样的文件。然后,您必须将该文件放在您的应用引擎项目中的某个位置。调用时会引用这个文件

Credential creds = GoogleCredential.getApplicationDefault();

但是,在此之前,您必须将环境变量设置为该文件位置。为此,请打开您的 appengine-web.xml 文件并将这一行放入其中:

<env-variables>
            <env-var name="GOOGLE_APPLICATION_CREDENTIALS"
                value="WEB-INF/default-account-credentials.json" />
        </env-variables>

其中value 是您刚刚下载的.json 凭据文件的路径。

现在它可以工作了。 (你的 gradle 进口很好)

【讨论】:

我已经按照上面的步骤添加了下载文件的环境变量。我仍然收到异常:嵌套在 java.lang.ExceptionInInitializerError: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:484) 请建议是否需要执行任何其他步骤。提前感谢您的帮助。 如何将文件放入应用引擎?文档说应用引擎将自动使用默认服务帐户。 我不认为将凭据存储在您的应用中是正确的,根据文档,它们必须可以从应用引擎访问(正如作者所建议的那样)

以上是关于访问谷歌云存储的应用引擎项目的默认凭据?的主要内容,如果未能解决你的问题,请参考以下文章

带有 gspythonlibrary 的谷歌云存储

通过 FS Crawler (elasticsearch) 访问谷歌云存储桶

如何从应用引擎将写入附加到谷歌云存储文件?

谷歌云抛出错误:无法在 Nodejs 中加载默认凭据

谷歌云数据存储与谷歌应用引擎

从 github 更新谷歌云应用引擎上的 nodejs 应用