You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从GCP Cloud Tasks执行Workflow时遇401未授权错误,如何解决?

GCP Cloud Tasks调用Workflow报401未授权错误排查

问题描述

尝试通过GCP Cloud Tasks触发Workflow执行时,立即收到UNAUTHENTICATED 401错误。入队任务的Go代码如下:

req := &taskspb.CreateTaskRequest{
    Parent: fmt.Sprintf("projects/%v/locations/us-central1/queues/myqueue", projectID),
    Task: &taskspb.Task{
        PayloadType: &taskspb.Task_HttpRequest{
            HttpRequest: &taskspb.HttpRequest{
                HttpMethod: taskspb.HttpMethod_POST,
                Url:        fmt.Sprintf("https://workflowexecutions.googleapis.com/v1/projects/%v/locations/us-central1/workflows/myworkflow/executions", projectID),
                Body:       bodyJson,
                AuthorizationHeader: &taskspb.HttpRequest_OidcToken{
                    OidcToken: &taskspb.OidcToken{
                        ServiceAccountEmail: serviceAccount,
                    },
                },
            },
        },
    },
}

_, err = client.CreateTask(ctx, req)

错误截图:
错误截图

已为使用的服务账号分配Workflow Invoker权限,请问遗漏了哪些配置?

排查方案

  • 显式指定OIDC Token的受众(Audience)
    Cloud Tasks生成的OIDC Token默认受众并非Workflow的API端点,必须手动指定Audience字段与请求URL一致,否则Token的aud声明不匹配会被Workflow API拒绝。修改代码中OidcToken部分:

    OidcToken: &taskspb.OidcToken{
        ServiceAccountEmail: serviceAccount,
        Audience: fmt.Sprintf("https://workflowexecutions.googleapis.com/v1/projects/%v/locations/us-central1/workflows/myworkflow/executions", projectID),
    },
    
  • 确保入队身份具备Cloud Tasks权限
    运行上述代码的身份(即调用CreateTask的账号)需要拥有cloudtasks.tasks.create权限,可分配Cloud Tasks Enqueuer角色(roles/cloudtasks.enqueuer)。

  • 验证Workflow权限的绑定范围
    确认Workflow Invoker角色(roles/workflows.invoker)已绑定到目标Workflow资源上,而非仅绑定在项目级别(若项目级别绑定需确保无权限继承限制)。

  • 检查Cloud Tasks队列的IAM配置
    目标队列的IAM规则可能限制了任务创建操作,需确保执行入队的身份被允许对该队列执行任务创建操作。

内容的提问来源于stack exchange,提问作者Raz Omessi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:45:24