访问谷歌云存储的应用引擎项目的默认凭据?
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) 请建议是否需要执行任何其他步骤。提前感谢您的帮助。 如何将文件放入应用引擎?文档说应用引擎将自动使用默认服务帐户。 我不认为将凭据存储在您的应用中是正确的,根据文档,它们必须可以从应用引擎访问(正如作者所建议的那样)以上是关于访问谷歌云存储的应用引擎项目的默认凭据?的主要内容,如果未能解决你的问题,请参考以下文章