通过gcloud部署Firebase云函数遇storage权限错误求助
针对你遇到的***@appspot.gserviceaccount.com没有storage.objects.create权限的问题,给你几个排查方向:
确认权限绑定的服务账号无误
报错里的是App Engine默认服务账号,先去GCP控制台的IAM页面搜索这个账号,确认你添加的Storage Object Admin或Storage Admin角色已经生效(权限同步可能需要1-5分钟,别刚加完就测试)。注意别搞错账号——比如把权限加给了Github Actions的部署账号,而不是函数运行时用的这个App Engine账号。检查目标GCS资源的独立权限设置
有些存储桶可能设置了独立的IAM政策,没有继承项目级权限。去Cloud Storage控制台找到目标桶,查看它的权限列表,确认该@appspot.gserviceaccount.com账号是否有Storage Object Creator及以上权限。如果桶是私有桶,可能需要单独给这个账号授权。验证函数代码中的GCS路径是否正确
报错里提到“resource may not exist”,有可能是代码里写的存储桶名称或文件路径写错了,比如拼写错误、环境变量未正确传入导致路径无效。可以在函数里加日志输出目标GCS路径,或者直接在GCP控制台确认该路径是否存在——找不到资源时,系统也会抛出类似权限错误的提示。检查函数的运行身份是否被修改
默认Firebase云函数用App Engine默认账号运行,但如果部署时通过--service-account参数指定了其他服务账号,那实际运行的就不是@appspot.gserviceaccount.com了。查看你的部署命令,若有指定其他账号,要给那个账号添加存储权限。确认调用命令的项目/区域正确性
检查Github Actions里的调用命令/home/runner/google-cloud-sdk/bin/gcloud functions call $schema --region=us-central1 --project=${PROJECT_ID},确保${PROJECT_ID}是你已经添加权限的目标项目,别搞混了沙箱和生产环境的项目ID。
内容的提问来源于stack exchange,提问作者sumisakisora

