云函数的端点返回 403 Forbidden

云函数的端点返回 403 Forbidden

我正在关注 Google 的教程为我的云功能设置端点。

当我尝试使用 URL 从浏览器访问端点时,service_name.a.run.app/function1我得到了

Error: Forbidden
Your client does not have permission to get URL /function1GET from this server

作为上述教程的一部分,回答从 Google 产品经理那里,我通过授予 ESP 调用我的函数的权限来保护我的函数。

gcloud beta functions add-iam-policy-binding function1 --member "serviceAccount:[email protected]" --role "roles/cloudfunctions.invoker" --project "project_id"

我的openapi-functions.yaml

swagger: '2.0'
info:
  title: Cloud Endpoints + GCF
  description: Sample API on Cloud Endpoints with a Google Cloud Functions backend
  version: 1.0.0
host: HOST
x-google-endpoints:
- name: "HOST"
  allowCors: "true
schemes:
  - https
produces:
  - application/json
paths:
  /function1:
    get:
      operationId: function1
      x-google-backend:
        address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/function1GET
      responses:
        '200':
          description: A successful response
          schema:
            type: string

请注意我添加了

- name: "HOST"
  allowCors: "true'

到我的.yaml文件,因为我需要从 Firebase 上托管的静态站点访问端点。

答案1

我最近遇到了这个问题。原来,自 2020 年 1 月 15 日起,新功能默认需要身份验证。

文档在这里了解详情。

解决方案是在 Google Cloud Console 的 Cloud Functions 页面中手动Cloud Functions Invoker向用户添加权限。allUsers

答案2

Google Cloud Functions 最近(不确定是多久前)添加了一些新的 IAM 功能,现在新功能默认不具有公共访问权限。

为了允许调用您的函数,您首先必须为该函数添加权限,您可以查看以下步骤:

https://lukestoolkit.blogspot.com/2020/06/google-cloud-functions-error-forbidden.html

答案3

您收到此错误消息“您的客户端无权从该服务器获取 URL /...”的原因有多种,其中包括:

您的互联网浏览器历史记录 - 尝试删除您的历史记录/缓存

帐户权限不足 - 尝试使用具有更高权限的其他帐户

缺少 SSL 参数 - 尝试使用“curl”命令直接访问 URL

检查恶意软件

答案4

虽然以上两个答案都是正确的,但通常要注意的是,您的功能部署会显示错误(与应用于部署的 IAM 策略有关),但无论如何都会部署该功能。

就我而言,我遵循的是Google Cloud 代码实验室示例当我遇到错误时。

我正在使用一个服务帐户,该帐户具有项目编辑器访问权限,因此我认为我可以应用该--allow-unauthenticated策略,但事实证明项目编辑器仅提供该策略iam.roles.listiam.roles.get因此该策略从未应用于该功能(因此出现上述错误)。

为了修复我必须:

  • 删除该函数(仅在您应用该--allow-unauthenticated策略时才需要,因为它仅适用于该函数的第一次部署,并且在对函数的任何后续更新中都会被忽略)
  • 赋予服务账户额外的 IAM 相关角色。
  • 再次部署该函数

我能够成功卷曲端点。

相关内容