当我尝试将任务添加到队列时,抛出了以上错误消息。这是我的设置以及有关此问题的信息:
my-project
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
具有以下两个角色:
这两个角色都具有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"
}
}
}
这真让我感到困惑。
有人知道我在做什么错吗?
答案 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。