我收到错误: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")
}
}
}
答案 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
以下是摘要: