主体(用户或服务帐户)缺少资源的IAM权限“ cloudtasks.tasks.create”

时间:2018-11-14 22:40:13

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

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

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

此外,让我们确认以上所有条件均已存在并且正在运行。

当我通过发布到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具有以下两个角色:

  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"
        }
    }
}

这真让我感到困惑。

有人知道我在做什么错吗?

3 个答案:

答案 0 :(得分:0)

我不知道为什么这样起作用,但是我吹掉了所有角色,然后再次添加它们,然后它起作用了。似乎是Google Cloud Platform上的错误。

答案 1 :(得分:0)

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

查看节点云任务客户端的源代码后,我发现了此错误:

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

答案 2 :(得分:0)

首先检查哪个服务帐户用于调用API。看起来任何使API调用的行为都使用了可能没有适当权限的默认服务帐户。

有时,如果您省略了必须在API调用中使用wchich服务帐户的用户,则将使用默认帐户,并且您可能会得到authenticated with credentials,不允许您创建任务。

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

讨论(并解决)了非常相似的情况here