Google api 主体(用户或服务帐户)缺少IAM权限”;cloudtasks.tasks.create";为了资源

Google api 主体(用户或服务帐户)缺少IAM权限”;cloudtasks.tasks.create";为了资源,google-api,google-cloud-platform,google-iam,Google Api,Google Cloud Platform,Google Iam,当我尝试将任务添加到队列时,会抛出上述错误消息。以下是我的设置和有关此问题的信息: 项目ID:我的项目 服务帐户ID:我的服务帐户 任务队列名称:my Queue 任务队列位置:asia-northeast1(云任务目前处于测试阶段的少数位置之一) 另外,让我们确认以上所有内容都存在并正在运行 当我通过发布到https://cloudresourcemanager.googleapis.com/v1/projects/my-project:getIamPolicy 我收到的回复类似于: {

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

  • 项目ID:
    我的项目
  • 服务帐户ID:
    我的服务帐户
  • 任务队列名称:
    my Queue
  • 任务队列位置:
    asia-northeast1
    (云任务目前处于测试阶段的少数位置之一)
另外,让我们确认以上所有内容都存在并正在运行

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

  • 角色/cloudtasks.admin
  • 角色/cloudtasks.enqueuer
  • 这两个角色都具有内置的
    cloudtasks.tasks.create
    权限

    当我尝试使用以下命令将任务添加到云任务时:

    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"
            }
        }
    }
    
    这真让我困惑


    有人知道我可能做错了什么吗?

    我不知道为什么会这样,但我把所有的角色都删掉了,然后又添加了一次,然后就成功了。似乎是Google云平台上的一个bug。

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

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


    首先检查用于调用API的服务帐户。看起来,任何进行API调用的操作都会使用默认服务帐户,该帐户可能没有适当的权限。

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

    我建议使用以排除与正在验证的服务帐户的任何混淆


    我们讨论了(并解决了)非常类似的案例。

    我不知从哪里得到了同样的问题。我的信条工作得很好,没有代码更改,这个错误开始出现。我这边没有解决方案。要解决这个问题,我必须炸掉所有角色,然后重新添加它们。我唯一想到的是我更改了控制台上的角色,然后我还使用了API。我觉得更新混合了API和控制台的角色可能会导致该错误。find with client_电子邮件正在使用此功能,您将在service.json中找到它。转到云控制台IAM并单击add role。。赋予它管理员角色:D我知道这可能有点不安全,但如果它起作用,那么你可以围绕一些好的角色来提高安全性