GCP服务账户调用SKU查询接口返回403权限拒绝求助
问题分析与解决步骤
你遇到的服务账号调用Cloud Billing SKU接口返回403的问题,通常并非GCP调整了访问规则,而是由以下常见配置问题导致,可逐一排查:
1. 验证Access Token的Scope是否正确
调用Cloud Billing的SKU查询接口,要求token包含正确的权限范围,需满足以下任一条件:
- 包含
https://www.googleapis.com/auth/cloud-billing.readonly(只读权限,推荐) - 包含
https://www.googleapis.com/auth/cloud-billing(读写权限) - 包含
https://www.googleapis.com/auth/cloud-platform(全平台权限)
检查方法:
执行命令查看当前token的scope字段:
curl https://oauth2.googleapis.com/tokeninfo?access_token=<your-service-account-token>
若返回结果中scope未包含上述任一值,生成token时需指定对应scope:
- 使用gcloud生成:
gcloud auth application-default print-access-token --scopes=https://www.googleapis.com/auth/cloud-billing.readonly
- 使用服务账号密钥生成JWT时,在claims的
scope字段中添加对应权限范围。
2. 确认服务账号拥有结算账号级权限
项目级的Owner角色仅覆盖项目内资源权限,而SKU查询接口的部分数据关联到结算账号资源。即使服务账号是项目Owner,若未获得结算账号的访问权限,仍会返回403。
解决方法:
- 打开GCP控制台的结算账号页面
- 找到目标结算账号,进入「权限」标签页
- 添加服务账号邮箱,授予
Billing Viewer或Billing Account Administrator角色
3. 检查Cloud Billing API是否已启用
确保服务账号所属的GCP项目已启用Cloud Billing API:
- 进入GCP控制台的API库
- 搜索「Cloud Billing API」
- 确认状态为「已启用」,若未启用则点击启用按钮
4. 验证Token的有效性
检查token是否过期或关联错误的服务账号:
- 同样使用
tokeninfo接口,查看exp字段(过期时间戳)是否在当前时间之后 - 查看
issued_to字段是否与服务账号的OAuth2客户端ID一致
内容的提问来源于stack exchange,提问作者Evgeni Dimitrov
相关产品推荐
相关产品推荐

