如何让我的Google Cloud App Engine访问我的Firebase存储分区

时间:2017-10-05 22:31:42

标签: google-app-engine google-cloud-storage firebase-storage

我收到错误:API error 7 (images: ACCESS_DENIED)

通常我会将Firebase应用与我的Google App Engine服务相关联,但由于Firestore与App Engine不兼容,因此我必须创建该服务的单独实例。但是,现在我需要我的app引擎映像服务才能引用firebase云存储文件夹中的文件。如何设置访问权限,是否需要创建某种跨两种服务共享的IAM?

我的app-engine go函数示例引用了firebase存储桶the-other-firebase-app

func photoHandler(w http.ResponseWriter, r *http.Request) {

    c := appengine.NewContext(r)
    v := r.URL.Query()
    fileName := v.Get("file")
    if (fileName == "") {
        fmt.Fprint(w, "file name is required")
    } else {
        filename := "/gs/the-other-firebase-app.appspot.com/photos/" + fileName;
        blobKey,err := blobstore.BlobKeyForFile(c, filename)
        if (err == nil) {
            url, urlErr := image.ServingURL(c, blobKey, nil)
            if (urlErr == nil) {
                fmt.Fprint(w, url)
            } else {
                fmt.Fprint(w, urlErr)
            }
        } else {
            fmt.Fprint(w, "image does not exist")
        }
    }  
}

2 个答案:

答案 0 :(得分:3)

如果您的应用是标准环境,则应该已有服务帐户,请参阅Using service accounts

  

App Engine应用程序使用App Engine的标识运行   默认服务帐户。您可以在IAM页面上看到此帐户   云平台控制台。

如果您的应用是灵活引擎,请参阅Service Account for the App Engine Flexible Environment

  

启用Google App Engine灵活环境API时,a   将自动创建特定服务帐户。你可以查看你的   项目的服务帐户在IAM section of the Cloud Platform Console。 App Engine灵活环境服务的电子邮件   帐户是   service-[PROJECT-NUMBER]@gae-api-prod.google.com.iam.gserviceaccount.com,   其中[PROJECT-NUMBER]IAM settings中列出的项目编号。

在Firebase应用项目中,您需要将GAE应用的服务帐户添加为团队成员,并为其授予必要的权限。

如评论中所述:

  

Firebase Dasbhoard - >项目设置Cog - >用户和权限 -   MonkeyBonkey

可能感兴趣的还有Integrate with Google Cloud Platform

答案 1 :(得分:0)

我遇到了一个非常类似的问题,但抛出的确切错误信息是:

  

_" your-project-name@appspot.gserviceaccount.com没有storage.objects.get访问storage_file_path_here>" _

我修复了它,感谢eltonnobrega对Github的建议:https://github.com/firebase/functions-samples/issues/299

以下是摘要:

  1. 点击 Google Cloud Console ,然后选择您的存储空间所在的项目 - 您要从服务帐户访问的存储桶。
  2. 转到“存储”标签
  3. 在浏览器选项卡上,您应该看到此项目中的存储桶。每个人都会在右边的行(三个垂直点)
  4. 处有一个选项图标
  5. 从这些选项中选择 编辑存储区权限
  6. 从那里你可以添加成员。添加您的服务帐户(your-project-name@appspot.gserviceaccount.com)并为其指定存储对象管理员角色
  7. enter image description here