gcloud调用Google Analytics Data API权限不足错误原因排查
Google Analytics Data API 403权限问题排查
问题描述
我在Ubuntu 24服务器上想定期执行bash脚本,调用Google Analytics Data API提取网站访问量Top20页面,已完成以下配置:
- 成功安装gcloud CLI(Google Cloud CLI);
- 在Google Cloud账号中创建服务账号,分配密钥并下载key.json文件;
- 在Google Analytics管理后台为服务账号邮箱添加了至少具备analytics数据读取权限的用户。
编写的bash脚本如下:
#!/bin/bash # Set environment variables export KEY_FILE="/home/yesitsme/utilities/scripts/gcloud.json" export PROPERTY_ID="278767000" # Authenticate using the service account gcloud auth activate-service-account --key-file=$KEY_FILE # Get access token ACCESS_TOKEN=$(gcloud auth print-access-token) # Make API request for page views in the last 24 hours curl -X POST \ "https://analyticsdata.googleapis.com/v1beta/properties/$PROPERTY_ID:runReport" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "dateRanges": [ { "startDate": "yesterday", "endDate": "today" } ], "dimensions": [ { "name": "pagePath" } ], "metrics": [ { "name": "screenPageViews" } ], "limit": 5 }'
单独执行gcloud auth命令能成功生成访问令牌,但执行完整脚本时出现403错误:
Activated service account credentials for: [zwischengas-google-cloud-api@zwischengas.iam.gserviceaccount.com] { "error": { "code": 403, "message": "Request had insufficient authentication scopes.", "status": "PERMISSION_DENIED", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "ACCESS_TOKEN_SCOPE_INSUFFICIENT", "domain": "googleapis.com", "metadata": { "method": "google.analytics.data.v1beta.BetaAnalyticsData.RunReport", "service": "analyticsdata.googleapis.com" } } ] } }
请问为何新创建的服务账号权限不足?需要相关排查提示。
排查提示
1. 明确指定访问令牌的授权范围
gcloud auth print-access-token默认生成的令牌可能未包含Google Analytics Data API所需的权限范围,需在激活服务账号或获取令牌时明确指定:
- 修改激活命令:
gcloud auth activate-service-account --key-file=$KEY_FILE --scopes=https://www.googleapis.com/auth/analytics.readonly
- 或直接在获取令牌时指定:
ACCESS_TOKEN=$(gcloud auth print-access-token --scopes=https://www.googleapis.com/auth/analytics.readonly)
2. 检查Cloud IAM角色配置
在Google Cloud控制台的IAM页面,确认服务账号已被分配Analytics Admin或Analytics Data Viewer角色。仅在GA后台添加用户权限不够,必须确保Cloud IAM层面的角色配置正确。
3. 验证GA4属性的权限绑定
确认在Google Analytics 4管理后台,服务账号邮箱已被添加为目标GA4属性的用户,且分配的权限为查看者及以上级别。注意要选择正确的GA4属性,避免选错属性导致权限不匹配。
4. 清除旧令牌缓存
若之前生成过不带正确scope的令牌,gcloud可能会缓存旧凭证,执行以下命令清除后重新激活:
gcloud auth revoke zwischengas-google-cloud-api@zwischengas.iam.gserviceaccount.com
5. 用gcloud命令直接测试API
跳过curl,用gcloud内置的analytics-data命令测试权限是否正常:
gcloud analytics-data properties run-report $PROPERTY_ID --date-ranges start-date=yesterday,end-date=today --dimensions pagePath --metrics screenPageViews --limit 5
如果该命令能成功返回数据,说明服务账号权限没问题,问题出在curl调用时的令牌scope配置上。
内容的提问来源于stack exchange,提问作者basZero
相关产品推荐
相关产品推荐

