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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:43:17