【问题标题】:The principal (user or service account) lacks IAM permission "cloudtasks.tasks.create" for the resource委托人(用户或服务账户)缺少资源的 IAM 权限“cloudtasks.tasks.create”
【发布时间】:2019-04-17 23:40:08
【问题描述】:

当我尝试将任务添加到队列时,会抛出上述错误消息。这是我的设置和有关此问题的信息:

  • 项目ID:my-project
  • 服务帐号 ID:my-service-account
  • 任务队列名称:my-queue
  • 任务队列位置:asia-northeast1(Cloud Task 目前处于测试阶段的少数几个位置之一)

另外,让我们确认以上所有内容都存在并且正在运行。

当我通过 POSTING 到 https://cloudresourcemanager.googleapis.com/v1/projects/my-project:getIamPolicy 来检查我的服务帐户角色时

我收到类似于以下内容的回复:

{
    "status": 200,
    "data":
    {
        "version": 1,
        "etag": "BwV6nNWJg4E=",
        "bindings": [
        {
            "role": "roles/cloudtasks.admin",
            "members": [
                "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
            ]
        },
        {
            "role": "roles/cloudtasks.enqueuer",
            "members": [
                "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
            ]
        }]
    }
}

如您所见,my-service-account 具有以下 2 个角色:

  1. roles/cloudtasks.admin
  2. roles/cloudtasks.enqueuer

这两个角色都有cloudtasks.tasks.create 权限。

当我尝试使用以下命令向 Cloud Task 添加任务时:

POST https://cloudtasks.googleapis.com/v2beta3/projects/my-project/locations/asia-northeast1/queues/my-queue/tasks + 任务负载

我收到以下错误消息:

{
    "status": 403,
    "data":
    {
        "error":
        {
            "code": 403,
            "message": "The principal (user or service account) lacks IAM permission \"cloudtasks.tasks.create\" for the resource \"projects/my-project/locations/asia-northeast1/queues/my-queue\" (or the resource may not exist).",
            "status": "PERMISSION_DENIED"
        }
    }
}

这真的让我很困惑。

有没有人知道我做错了什么?

【问题讨论】:

  • 我突然遇到了同样的问题。我的信用很好,没有代码更改,这个错误开始弹出。我这边没有解决方案。
  • 为了解决这个问题,我不得不炸毁所有角色,然后重新添加它们。我唯一想到的是我在控制台上更改了角色,然后我也使用了 API。我觉得更新混合 API 和控制台的角色可能会产生这个错误。
  • find with client_email 正在使用此功能,您将在 service.json 中找到它 转到云控制台 IAM 并单击添加角色 .. 给它管理员角色:DI 知道这可能有点不安全,但如果它起作用了,那么您可以围绕一些好的角色来计划以提高安全性
  • 这能回答你的问题吗? creating Google Cloud Task in a firebase function

标签: google-api google-cloud-platform google-iam


【解决方案1】:

首先检查调用 API 的服务帐号。看起来无论做什么 API 调用都使用可能没有适当权限的默认服务帐户。

有时如果您省略 wchich service account has to be user in API call,那么将使用默认帐户,您可能会收到不会让您创建任务的authenticated with credentials

我建议使用API keys to authenticate 来排除与正在验证哪个服务帐户的任何混淆。

讨论(并解决)了非常相似的案例here

【讨论】:

    【解决方案2】:

    我不知道为什么会这样,但是我删除了所有角色,然后再次添加它们,然后就成功了。似乎是 Google Cloud Platform 上的一个错误。

    【讨论】:

      【解决方案3】:

      对我来说,我在请求中列出了错误的 queue.name(即不是完全限定名称),这导致了这个奇怪的 API 错误。

      我在查看 Node Cloud Tasks 客户端的源代码后发现了这个错误:

      https://github.com/googleapis/nodejs-tasks/blob/master/samples/createQueue.js

      【讨论】:

        猜你喜欢
        • 2020-06-09
        • 2022-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-14
        相关资源
        最近更新 更多