启用Pub/Sub推送授权后端点无法接收通知且未确认消息数上涨
问题根因及排查方案
核心常见原因
- 权限角色不匹配:你当前授予的
Cloud Functions Invoker、Cloud Run Invoker等角色仅适用于GCP托管的Cloud Functions、Cloud Run端点,如果你用的是自定义域名的独立服务端点,上述角色完全不生效,不属于必要配置。 - 端点侧JWT验证失败:Pub/Sub推送请求会在
Authorization头携带OIDC令牌,只要端点侧验证环节任意一步出错(签名校验不通过、受众不匹配、发行方验证失败、令牌过期),都会返回401/403状态码,Pub/Sub会判定投递失败,不会确认消息,触发持续重试。 - 状态码不符合投递成功规则:Pub/Sub推送模式仅将2xx状态码判定为投递成功,会确认消息并从队列移除;只要返回4xx(除429外)、5xx状态码、请求超时,都会判定为投递失败,消息重回队列待重试。
- 订阅配置错误:需确认推送订阅绑定的服务账号和你授权的服务账号完全一致,同时配置的
Audience值和你端点侧校验的受众值完全匹配,哪怕末尾多一个斜杠都会导致验证失败。 - 重试策略放大堆积:你当前配置的
立即重试策略会在投递失败后立刻重试,持续失败的场景下会快速推高未确认消息数。
可落地排查步骤
- 优先查询Cloud Logging日志,使用过滤器
resource.type="pubsub_subscription" AND log_id("pubsub.googleapis.com/push_request"),查看具体的投递错误类型,是身份认证错误、超时还是服务端错误。 - 临时关闭端点的身份验证功能,观察未确认消息数是否停止上涨,若恢复正常则可直接定位问题出在身份验证环节。
- 校验Pub/Sub推送携带的令牌:解码令牌的payload字段,确认发行方为
accounts.google.com或pubsub.googleapis.com、受众值和配置完全一致、令牌未过期,再使用Google公开的OIDC公钥验证签名有效性。 - 临时将重试策略调整为指数退避重试,避免未确认消息数过快上涨影响业务。
内容的提问来源于stack exchange,提问作者Pankaj Verna
相关产品推荐
相关产品推荐

