如何为GCP服务账号配置Firebase Storage读取访问权限
问题场景
调用Google Cloud Vision的Vision API Product Search功能读取Firebase Storage内存储的图片时,返回以下报错:
"message": "Error opening file: gs://swaepone.appspot.com/bag.jpeg."
可按以下步骤为对应服务账号配置Firebase Storage读取权限:
操作步骤
- 先确认实际调用API的服务账号身份
不要直接给默认服务账号配权限,先找对主体:可以从你调用API时用的服务账号密钥文件里的client_email字段、Cloud Console的Vision API调用日志里拿到发起请求的服务账号完整邮箱,格式一般是[自定义名称]@[项目ID].iam.gserviceaccount.com。
注意:Vision API不会自动用Firebase默认服务账号访问资源,必须匹配你发起请求时携带凭证对应的服务账号,配错主体权限不会生效 - 为服务账号配置存储桶读取权限,二选一即可:
- 方式1:IAM角色授权(适合存储桶开启统一IAM访问控制的场景)
进入Google Cloud Console的Cloud Storage存储桶列表,找到报错对应的swaepone.appspot.com存储桶,打开「权限」页点击「授予访问权限」,主体填入刚才找到的服务账号邮箱,角色选择Storage 对象查看者,如果是旧版Firebase存储桶也可以选Storage 旧版存储桶读取者,保存后等待权限传播即可。 - 方式2:Firebase Storage安全规则授权(适合存储桶用Firebase原生规则管控的场景)
打开Firebase控制台对应项目的Storage板块,进入「规则」页,补充允许该服务账号读取资源的规则,示例配置:
发布规则后等待1-2分钟生效即可。rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read: if request.auth.token.email == "填入你找到的服务账号邮箱"; } } }
- 方式1:IAM角色授权(适合存储桶开启统一IAM访问控制的场景)
- 配置后校验
如果配置完还是报错,先排查三个点:- 确认
gs://swaepone.appspot.com/bag.jpeg路径下的文件真实存在,没有大小写、后缀拼写错误 - 确认没有配置VPC Service Controls、组织策略拦截该服务账号访问存储桶
- 刚配完权限等2分钟再重试,IAM和安全规则配置都有短时间的传播延迟
- 确认
内容的提问来源于stack exchange,提问作者Flutter Dev
相关产品推荐
相关产品推荐

