调用GCP Python API获取SQL实例CPU利用率报403权限错误如何解决
问题排查步骤
- 修正代码参数错误
Query类的
project参数仅需要传入纯项目ID,不需要带projects/前缀,你当前传入了带前缀的projects/my-first-project会导致资源定位错误,这是该报错最高发的原因。同时你漏了service_account的导入语句,会先触发命名未定义错误。
修正后可运行代码如下:
from google.cloud import monitoring_v3 from google.cloud.monitoring_v3 import query # 补全缺失的依赖导入 from google.oauth2 import service_account credential_file = "/home/user/my-first-project.json" GCP_SCOPES = [ 'https://www.googleapis.com/auth/sqlservice.admin', "https://www.googleapis.com/auth/logging.read", "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/monitoring.read" ] gcp_credential = service_account.Credentials.from_service_account_file(credential_file,scopes=GCP_SCOPES) client = monitoring_v3.MetricServiceClient(credentials=gcp_credential) # 仅传入纯项目ID,不要加projects/前缀 project_id = "my-first-project" cpu_query = query.Query(client, project=project_id, metric_type='cloudsql.googleapis.com/database/cpu/utilization', minutes=5) next(cpu_query.iter())
- 校验服务账号权限配置
确认你的服务账号在my-first-project项目下被授予了roles/monitoring.viewer(监控查看者)角色,不要误将权限授予到其他项目。可以通过以下命令校验权限:gcloud projects get-iam-policy my-first-project --filter="bindings.members:serviceAccount:<替换为你的服务账号邮箱>"
如果输出中没有出现roles/monitoring.viewer,需要重新绑定权限:gcloud projects add-iam-policy-binding my-first-project --member="serviceAccount:<替换为你的服务账号邮箱>" --role="roles/monitoring.viewer" - 确认指标资源存在
先登录GCP控制台,进入「监控」-「指标浏览器」,搜索cloudsql.googleapis.com/database/cpu/utilization指标,确认对应项目下的SQL实例有该指标的上报数据,如果控制台无法查询到数据,说明实例未正常上报指标或实例不存在,也会触发该报错。
内容的提问来源于stack exchange,提问作者Nitesh
相关产品推荐
相关产品推荐

