【问题标题】:gcloud: Default Application Credentials in appengine for Cloud Storage (java)gcloud:云存储的 appengine 中的默认应用程序凭据(java)
【发布时间】:2016-06-22 12:09:43
【问题描述】:

从 appengine 网络应用程序中访问 Google Cloud Storage 时,我遇到了身份验证问题。我想使用应用程序默认凭据。也许有人可以给我建议。

我有一个项目,服务帐号:“x@appspot.gserviceaccount.com”。

在 IAM 部分,该项目只有成员 y@gmail.com(这是我的电子邮件地址),角色为 Owner。

在项目中,我有两个 Cloud Storage 存储桶,staging.x.appspot.com 和 x.appspot.com。我没有编辑他们的权限。

在项目中,我有一个用 Java 编写的 appengine Web 应用程序。从它的代码中,我想像这样访问云存储:

    import com.google.cloud.AuthCredentials;
    import com.google.cloud.storage.Storage;

    AuthCredentials credentials=AuthCredentials.createApplicationDefaults();
    Storage storage=StorageOptions.builder().authCredentials(credentials).build().service();

使用 Maven 依赖项

    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>1.9.38</version>
    </dependency>

    <dependency>
        <groupId>com.google.auth</groupId>
        <artifactId>google-auth-library-appengine</artifactId>
        <version>0.4.0</version>
    </dependency>

    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>gcloud-java</artifactId>
        <version>0.2.3</version>
    </dependency>

我用

启动开发服务器
mvn clean appengine:devserver

并使用

进行部署
mvn clean appengine:update

我以为这就足够了。

但是在一台计算机上的 devserver 中它可以工作,在另一台计算机上我得到异常“401 Invalid authentication”或类似的东西。不知道这台电脑有什么区别。

在部署的应用程序中出现异常 403 Forbidden。

原因:com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 { “代码”:403, “错误”:[{ “域”:“全球”, “消息”:“禁止”, “原因”:“禁止” }], “消息”:“禁止” }

我做错了什么?

【问题讨论】:

  • 根据developers.google.com/identity/protocols/…,应用程序默认凭据在 App Engine 本身上运行时应该可以正常工作,但如果您使用“gcloud preview app run”启动 Appengine,则默认情况下可能只能在本地工作。或者,在运行示例之前尝试运行 gcloud auth login
  • ^^ 回应这个。您需要先运行 gcloud auth logingcloud auth activate-service-account (docs),然后默认凭据才能在 dev 中运行。
  • 此线程有任何更新吗?
  • 好吧,我去了存储桶配置并明确添加了用户“x@appspot.gserviceaccount.com”的权限,访问权限为“Writer”。这样我的应用程序就可以工作了,但我并没有结束这个问题,因为我认为这应该是自动的,所以也许我仍然做错了什么。

标签: java maven google-app-engine google-cloud-storage


【解决方案1】:

正如 Brandon 和 Nick 所说,gcloud auth login 使用作为所有者的 google 用户(因此不是服务帐户)成功了。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2015-09-08
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多