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

调用Google Monitoring timeSeries API:未计费项目下账号报错差异咨询

问题:未启用计费的GCP项目中,服务账号调用Monitoring API返回403,普通账号返回400

当调用GCP Monitoring的REST API https://monitoring.googleapis.com/v3/projects/${projectId}/timeSeries 时,出现两类账号调用结果不一致的情况:

  • 使用普通谷歌账号生成的访问令牌调用,返回预期的400错误(提示参数无效),此时项目未启用计费。
  • 使用服务账号生成的访问令牌调用,返回403错误,提示“此API方法需要启用计费”,即使已给服务账号配置所有者权限和宽泛作用域,问题仍未解决。

启用项目计费后,服务账号的403错误消失,但想明确两类账号的处理差异,同时希望在不启用计费的情况下,服务账号调用能返回参数相关错误而非计费要求的403。

TLDR

项目未启用计费时:

curl https://monitoring.googleapis.com/v3/projects/${projectId}/timeSeries -H "authorization: Bearer ${google_account_access_token}"

返回400(参数无效,符合预期)

curl https://monitoring.googleapis.com/v3/projects/${projectId}/timeSeries -H "authorization: Bearer ${service_account_access_token}"

返回403(提示需启用计费,存疑)


原因分析

这是GCP针对不同身份类型的权限校验逻辑差异导致的:

  1. 普通谷歌账号属于用户身份,在未启用计费的项目中,GCP会先完成身份校验,再进入API的参数校验环节,因此会优先返回参数错误(400),不会触发计费校验。
  2. 服务账号属于机器身份,GCP对这类身份的API调用会优先进行计费状态校验——即便项目配置了足够权限,只要未启用计费,就会直接拦截请求返回403,跳过后续参数校验步骤。

这种设计是为了防止服务账号在未计费项目中批量发起调用,规避潜在的资源滥用风险。


解决建议

如果希望服务账号调用时返回参数相关错误而非403,可选择以下方案:

  • 临时启用计费:若仅需调试API参数,可临时开启项目计费,调试完成后关闭(注意GCP免费额度,调用量在免费范围内不会产生费用)。
  • 使用本地模拟环境:借助GCP本地模拟工具(如gcloud beta emulators monitoring start)测试API参数,无需依赖线上项目的计费状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:32:07