google-cloud-platform - 我无法让 google cloud function

我最近切换到 google cloud functions gen 2 并且遇到了通过 API 网关进行身份验证的问题。我的网关调用了新的云功能,该功能本身不允许未经授权的用户使用。网关有一个附加到它的服务帐户,具有云函数调用者角色(以及所有者角色,因为我正在进行故障排除)。

云函数日志中的错误信息是

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header. Read more at https://cloud.google.com/run/docs/securing/authenticating Additional troubleshooting documentation can be found at: https://cloud.google.com/run/docs/troubleshooting#unauthorized-client

我有一个测试函数,其代码与使用云函数 gen 1 的代码相同,并且不允许未经身份验证的用户使用。当您点击我的 api 网关时,此功能非常有用。我还有一个第 2 代云功能,它确实允许未经身份验证的用户,并且在访问网关时也能按预期工作,只是我的第 2 代不允许未经身份验证的用户。

对于我的 API 网关 yaml 文件,这是文件的样子(敏感信息 XXX 已被删除)

swagger: "2.0"
info:
  title: XXXXXXXX api gateway for carson blade analytics app
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /convert_csv:
    get:
      summary: Converts an XLSX file to a CSV file
      operationId: convert
      x-google-backend:
        address: https://convert-csv-XXXXX-ue.a.run.app
      responses:
        "200":
          description: A successful response
          schema:
            type: string

当我点击未经身份验证的允许项并查看其 header 时,我明白了

{     
 "aud": "https://convert-csv-XXXXX-ue.a.run.app/",
 "azp": "XXXX",
 "email": "XXX@XXX.iam.gserviceaccount.com",
 "email_verified": true,
 "exp": 1660101164,
 "iat": 1660097564,
 "iss": "https://accounts.google.com",
  "sub": "XXXXX"
}

电子邮件是与具有正确云函数调用者角色的服务帐户相关联的电子邮件,aud 是与云 api yaml 中的地址相同的地址。因此,它按预期用其服务帐户替换了我发送的身份验证 header 。我已经尝试阅读所有文档并尝试了一堆不同的 yaml 配置,但我就是想不通。

总而言之,随着每个连接到云 api 网关并从 postman 访问端点,第 2 代允许未经身份验证关闭 -> 不起作用。允许未经身份验证的第 2 代打开 -> 工作。允许未经身份验证关闭的第 1 代 -> 有效

非常感谢任何帮助,谢谢。

最佳答案

第二代 Cloud Functions 是 Cloud Run 之上的包装器。很多时候,这两种产品纠缠在一起。

  • 您必须拥有 Cloud Functions Invoker 角色 Cloud Run Invoker 角色(您的问题)
  • 您可以通过选择 Cloud Run 服务而不是 Cloud Functions 来过滤日志

绝对不清楚,从 Alpha 版本开始。尽管我对 PM 和工程团队发表了评论,但该产品已经公开发布,现在由于缺乏明确的分离,存在很多错误和困惑。太糟糕了:(

关于google-cloud-platform - 我无法让 google cloud functions gen 2 仅处理来自 API 网关后面的授权请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73314662/

相关文章:

reactjs - 使用 React Router 将可选查询参数添加到动态路径

scala - 计算字符串列表中的元音

javascript - ECMA脚本 : What does `status` mean in S

snowflake-cloud-data-platform - 从 Snowflake 查询 del

amazon-web-services - 无法在 yum 上下载 caddy 包

javascript - 在映射函数中的 .then 内部分配变量

c# - 如果它是一个单独的方法,ASP.NET Core 异步请求处理程序总是以 200 OK 和

python - 根据另一个的范围和类别填充 Pandas 列

r - 使用 dplyr R 中的 mutate with across 将不存在的列添加到数据框

reactjs - 我可以给 react 查询一个超时(秒或毫秒......)所以在这段时间之后它会