跨项目及同项目Cloud Run认证调用失败求助(401错误)
解决Cloud Run跨/同项目认证调用401问题
跨项目调用(Project A的CR-A1调用Project B的CR-B1)
核心检查点
- 确认权限绑定有效性:
确保Project B中已将Cloud Run Invoker(roles/run.invoker)权限直接绑定到SA-Project A,而非通过组或间接绑定,同时检查是否存在IAM Deny策略覆盖该权限。 - 验证运行服务账号匹配:
进入Cloud Run控制台的CR-A1详情页,确认「容器」标签下的运行服务账号确实是SA-Project A,而非默认的Compute Engine服务账号。 - 检查Token生成逻辑:
生成Bearer Token时必须指定CR-B1的完整URL作为受众(Audience),示例gcloud命令:
用该Token执行curl测试:gcloud auth print-identity-token --audiences=https://cr-b1-xxxx.a.run.app --impersonate-service-account=sa-project-a@project-a.iam.gserviceaccount.com
若测试仍报错,说明权限配置存在问题;若测试成功,需排查CR-A1内部的Token生成代码是否符合要求。curl -H "Authorization: Bearer $(上述命令生成的Token)" https://cr-b1-xxxx.a.run.app
同项目调用(如CR-A1调用CR-A2)
- 同项目内开启认证的Cloud Run实例互调,同样需要给调用方的运行服务账号配置
Cloud Run Invoker权限,或根据场景给项目内所有服务账号批量添加该权限。 - 注意:同项目下开启认证后不会自动允许调用,必须显式配置IAM权限。
通用排查步骤
- 查看审计日志:在Cloud Logging中搜索CR-B1的访问日志,401错误日志会包含具体原因(如Token受众不匹配、服务账号无权限等),这是定位问题的关键。
- 检查VPC配置:若实例使用VPC连接器,确认网络策略未阻止跨项目/同项目的请求流量。
- 确认服务账号状态:在IAM控制台检查SA-Project A是否处于启用状态,禁用的服务账号无法生成有效Token。
内容的提问来源于stack exchange,提问作者Nagender Varma
相关产品推荐
相关产品推荐

