You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用向GCP PubSub发消息时遇403权限拒绝错误

解决方案:Spring Boot + GCP PubSub 403权限错误排查与修复

1. 优先修复依赖版本冲突

你的依赖配置存在严重版本不兼容问题:

  • 你使用了spring-cloud-gcp-dependencies:3.2.1(较新的BOM管理包),但手动指定了spring-cloud-gcp-starter-pubsub:1.2.5.RELEASE(老旧版本,与3.x系列BOM完全不匹配)
  • 同时引入google-cloud-pubsub和starter依赖,会导致重复依赖、类加载冲突

替换为以下build.gradle配置,通过BOM统一管理所有GCP相关依赖版本:

bomImport platform('io.pivotal.spring.cloud:spring-cloud-services-dependencies:2.4.1')
bomImport platform(group: 'com.google.cloud', name: 'spring-cloud-gcp-dependencies', version: '3.2.1')
// 无需指定版本,由spring-cloud-gcp-dependencies BOM自动控制
implementation 'org.springframework.cloud:spring-cloud-gcp-starter-pubsub'
// 移除重复的google-cloud-pubsub依赖,starter已包含该依赖

2. 确认应用与gcloud使用同一服务账号

虽然gcloud pubsub topics publish能成功,但要确保Spring Boot应用使用的是同一个服务账号:

  • 设置环境变量GOOGLE_APPLICATION_CREDENTIALS,指向你的服务账号密钥JSON文件路径
  • 执行gcloud config get-value account,确认当前gcloud活跃账号与应用使用的服务账号一致
  • 检查服务账号权限:确保该账号拥有pubsub.topics.publish权限,以及iam.serviceAccounts.getAccessToken权限(后者是获取认证令牌的基础权限,通常默认包含在服务账号的基本角色中)

3. 简化配置,先验证核心发布功能

暂时移除PubSubConfiguration中的订阅相关逻辑,排除订阅代码的干扰,先验证发布功能:

  • 注释掉PubSubConfiguration类的所有内容,依赖starter自动配置PubSubTemplate
  • 重新启动应用,再次调用/postMessage接口测试发布

4. 开启调试日志定位问题

在application.properties中添加日志配置,查看认证和PubSub客户端的详细流程:

logging.level.com.google.cloud=DEBUG
logging.level.org.springframework.cloud.gcp=DEBUG
logging.level.io.grpc=DEBUG

启动应用后,观察日志中是否有令牌获取失败的详细错误,这能帮助确认是否是版本冲突导致的认证逻辑异常。


内容的提问来源于stack exchange,提问作者scottyboombox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:33:36