使用GitHub Actions部署Firebase Functions 2nd Gen时遇403权限错误
核对部署用服务账号身份
先确认你给权限的服务账号,和GitHub Actions里GCP_DEV_KEY对应的是同一个。可以解码密钥JSON里的client_email字段,拿到准确的账号邮箱,再去GCP IAM控制台核对这个账号的角色是否正确生效(IAM权限可能需要1-2分钟同步)。手动配置Cloud Run服务账号的Secret访问权限
Functions 2代底层依赖Cloud Run,使用的是格式为[项目编号]-compute@developer.gserviceaccount.com的默认计算服务账号。部署时Firebase会尝试自动给这个账号添加Secret的访问权限,但你的部署账号缺少设置IAM策略的权限。可以跳过自动配置,手动绑定权限:- 打开GCP控制台的「Secret Manager」,找到你用到的每个Secret
- 进入该Secret的「权限」页面,添加成员
[项目编号]-compute@developer.gserviceaccount.com,授予Secret Manager Secret Accessor角色
更换稳定版的GitHub Action
w9jds/firebase-action@master是开发分支,可能存在兼容性问题。切换到指定稳定版本,比如w9jds/firebase-action@v10.4.0,避免版本bug导致的权限处理异常。排查组织级IAM限制
如果你的GCP项目属于某个组织,检查组织级IAM是否有拒绝策略,限制了secretmanager.secrets.setIamPolicy权限。这种情况下,即使给服务账号加了项目级角色,也会被组织策略覆盖。本地验证权限
本地测试部署:把GCP_DEV_KEY保存为JSON文件,设置环境变量export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json",然后运行firebase deploy --only functions。如果本地也报同样的403错误,说明是服务账号权限问题;如果本地正常,排查GitHub Actions的环境变量配置是否有误(比如密钥是否完整、有没有被转义)。
内容的提问来源于stack exchange,提问作者Guillaume Prévost

