【问题标题】:Google Analytics RunReport return 7 PERMISSION_DENIED: User does not have sufficient permissions for this propertyGoogle Analytics RunReport 返回 7 PERMISSION_DENIED:用户对此属性没有足够的权限
【发布时间】:2021-12-03 12:22:18
【问题描述】:

我想使用 runReport 运行谷歌分析报告。 我已按照https://developers.google.com/analytics/devguides/reporting/data/v1/quickstart-client-libraries 的说明进行操作,并在https://github.com/googleapis/nodejs-analytics-data/blob/main/samples/quickstart_json_credentials.js 复制了使用json-credentials 的代码

我有一个分析帐户,其中包含两个属性和应用程序 - DEV 和 STAGE。

在他们每个人中,我都创建了一个具有 OWNER 权限的服务帐户。之后,我创建了一个密钥并下载了生成的 JSON 文件。

我可以通过https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport 的“试用此 API”链接为我的两个属性测试和运行 API,并且它对它们都适用。 (但我当然会使用 OAuth 身份验证)。

但是,当我使用 JSON 凭据运行代码时,DEV 始终可以正常工作。 STAGE 总是失败。我尝试从我的机​​器和https://shell.cloud.google.com/ 运行代码,结果相同。 失败信息是:

7 PERMISSION_DENIED: User does not have sufficient permissions for this property. To learn more about Property ID, see https://developers.google.com/analytics/devguides/reporting/data/v1/property-id.

我已多次检查 DEV 和 STAGE 属性是否正确,并且我使用了与正确属性关联的 JSON 凭据文件。

在呼叫总是失败的 STAGE 中,我多次创建了新的服务帐户(使用 Basic->Owner 凭据)、创建了密钥并下载了 JSON 凭据。但结果都是一样的。 STAGE 总是失败。

我已经比较了 DEV 和 STAGE 中服务帐户的权限,它们似乎是相同的。

我已阅读并尝试过其他人在堆栈溢出时遇到“权限被拒绝”问题的提示,但没有一个能解决我的问题。

是否有我从谷歌控制台读取的任何授权日志? 我现在有点卡住了。

我运行的代码(属性和文件名被混淆):

"use strict";
function main(propertyId = "YOUR-GA4-PROPERTY-ID", credentialsJsonPath = "") {
  propertyId = "27..DEV property";
  credentialsJsonPath = "./DEVcredentials.json";
  //   propertyId = "27..STAGE property";
  //   credentialsJsonPath = "./STAGEcredentials.json";
  const { BetaAnalyticsDataClient } = require("@google-analytics/data");
  const analyticsDataClient = new BetaAnalyticsDataClient({
    keyFilename: credentialsJsonPath,
  });
  async function runReport() {
    const [response] = await analyticsDataClient.runReport({
      property: `properties/${propertyId}`,
      dateRanges: [
        {
          startDate: "2020-03-31",
          endDate: "today",
        },
      ],
      dimensions: [
        {
          name: "country",
        },
      ],
      metrics: [
        {
          name: "activeUsers",
        },
      ],
    });
    console.log("Report result:");
    response.rows.forEach((row) => {
      console.log(row.dimensionValues[0], row.metricValues[0]);
    });
  }

  runReport();
}

process.on("unhandledRejection", (err) => {
  console.error(err.message);
  process.exitCode = 1;
});
main(...process.argv.slice(2));

【问题讨论】:

    标签: node.js google-api google-analytics-api service-accounts google-api-nodejs-client


    【解决方案1】:

    用户对此属性没有足够的权限。

    表示您已通过身份验证的用户无权访问该视图。在这种情况下,我们谈论的是properties/${propertyId}

    如果您使用的是服务帐户,请确保在帐户级别而不是视图级别授予它权限。

    需要通过管理部分中的谷歌分析网站授予权限

    【讨论】:

    • 感谢您的回答。两个后续问题。 1)我已经在项目级别授予服务帐户 Owner-permissions(似乎无法在帐户级别添加) 2)为什么具有 Owner 权限的帐户缺少足够的权限?使用以下查询验证权限:console.cloud.google.com/iam-admin/analyzer/… { "role": "roles/owner", "members": [ "serviceAccount:jeotest-apiaccount1@proj-STAGE.iam.gserviceaccount.com", "user:jan-erik .ohman@cybercom.com", ] }
    • 检查我的编辑。需要在谷歌分析网站的管理部分授予权限。查找帐户访问管理并在其中添加服务帐户的电子邮件地址。
    • 谢谢!现在它起作用了。我在文档中找不到这个过程。一定会在我们的内部文档中记录程序。
    • 我会 ping 团队,让他们知道他们需要处理文档。
    猜你喜欢
    • 2014-01-24
    • 2021-01-20
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2018-08-08
    相关资源
    最近更新 更多