4

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

  • 项目编号: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. 角色/cloudtasks.admin
  2. 角色/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"
        }
    }
}

这真的让我很困惑。

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

4

3 回答 3

1

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

有时,如果您省略 wchich service account has to be user in API call,则将使用默认帐户,并且您可能会使用不允许您创建任务的凭据进行身份验证。

我建议使用API 密钥进行身份验证,以排除与正在验证的服务帐户的任何混淆。

这里讨论(并解决了)非常相似的案例。

于 2020-09-25T11:17:28.033 回答
0

我不知道为什么会这样,但我把所有角色都删掉了,然后再次添加它们,然后它就奏效了。似乎是谷歌云平台上的一个错误。

于 2018-11-15T08:31:11.970 回答
0

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

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

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

于 2019-09-24T15:54:34.203 回答