【问题标题】:PERMISSION_DENIED 403 error when triggering HTTP Cloud Function from Cloud Tasks从 Cloud Tasks 触发 HTTP Cloud Function 时出现 PERMISSION_DENIED 403 错误
【发布时间】:2020-12-29 08:59:39
【问题描述】:

我正在尝试Using Cloud Tasks to trigger Cloud Functions 教程,但是当我尝试运行创建的任务时出现错误:

Status code: 7 (PERMISSION_DENIED)
Reason for retrying: PERMISSION_DENIED(7): HTTP status code 403

我创建了一个具有Cloud Functions Invoker 角色的新服务帐户。 并修改了我的代码,以便使用此服务帐户创建任务:

const task = {
    httpRequest: {
      httpMethod: protos.google.cloud.tasks.v2.HttpMethod.POST,
      url,
      oidcToken: {
        serviceAccountEmail: 'cloud-tasks-client@my-actual-project.iam.gserviceaccount.com',
      },

任务是从云函数创建的。

我还修改了目标 Cloud Function 访问控制,以便 allAuthenticatedUsers 使用角色 Cloud Functions Invoker 访问它。 我可以使用云功能控制台测试触发该功能而不会出现任何错误。

我错过了什么?有什么想法吗?

【问题讨论】:

    标签: google-cloud-functions service-accounts google-cloud-tasks


    【解决方案1】:

    我刚刚想通了。我使用ingress-settings=internal-only 部署了该功能。认为 Cloud Tasks 将被视为内部服务。我不得不把它改成默认的all,然后它就起作用了。 internal-and-gclb 也没有用。

    【讨论】:

    • 我在推送到云运行端点时遇到了这个问题。我在多层 prod-canary-etc 设置中部署了几个相同的应用程序,并且仅将一个入口设置为 internal-only。为了向其他旅行者重申您的答案的重要性,请先检查您的服务的入口!
    • 显然不言而喻,这样做也会将服务暴露给公众。
    • 正如@AlexanderTrauzzi 所说,这会将您的服务公开。有没有解决办法?
    【解决方案2】:

    进入IAM页面,找到云任务服务代理服务账号:service-<projectNumber>@gcp-sa-cloudtasks.iam.gserviceaccount.com,并为其授予角色roles/iam.serviceAccountTokenCreator

    你的教程中没有提到。我猜你没有这样做。

    【讨论】:

    • 感谢您的回复,但我才知道真正的原因。所以这个 IAM 更改对我来说是不必要的。
    • @guillaume 这对我仍然不起作用。
    猜你喜欢
    • 1970-01-01
    • 2021-05-14
    • 2020-10-26
    • 2018-09-20
    • 2021-06-18
    • 2021-06-14
    • 1970-01-01
    • 2020-07-26
    • 2018-08-29
    相关资源
    最近更新 更多