Cloud Run运行一段时间后出现服务调用授权错误该如何解决
GCP Cloud Run间歇式未授权报错排查方案
核心结论
Cloud Run不存在会触发未授权报错的单日调用次数上限,你遇到的The request was not authorized to invoke this service.报错属于身份认证/授权类问题,和调用量超限无关。
优先级最高的排查方向
如果你的任务初始运行正常、运行1小时左右就批量出现授权报错,重新部署Cloud Function后又能恢复正常,90%以上的概率是ID令牌未刷新导致的:
GCP OIDC ID令牌默认有效期仅为1小时,若你在Cloud Function的全局初始化逻辑中一次性获取了调用Cloud Run的ID令牌,后续所有请求都复用该固定令牌,令牌过期后就会触发授权报错。
修复方案:调整Cloud Function代码,每次发起Cloud Run调用前重新获取有效ID令牌,不要全局缓存长期复用令牌。
其他排查方向
- 检查Cloud Function所用服务账号的状态:确认该服务账号未被禁用,且仍持有Cloud Run服务的
roles/run.invoker权限,无组织/项目层面的服务账号权限限制。 - 检查VPC服务控制配置:若项目启用了VPC服务控制边界,确认Cloud Function的服务账号、出口网段已加入对应边界的允许列表,无近期规则变更导致的拦截。
- 检查审计日志:查看对应报错时间点的Cloud Audit Logs,确认是否存在未记录的IAM权限变更、服务账号配置变更、Cloud Run安全配置变更操作。
- 检查Cloud Function运行身份配置:确认Cloud Function运行时所用的服务账号拥有
iam.serviceAccounts.getOpenIdToken权限,可正常获取调用Cloud Run所需的有效令牌。
内容的提问来源于stack exchange,提问作者p_mo
相关产品推荐
相关产品推荐

