【问题标题】:Securing Cloud Function Using API Gateway使用 API 网关保护云功能
【发布时间】:2021-03-19 22:01:34
【问题描述】:

我的目标是防止用户使用 API 密钥和 API 网关访问我的云功能端点。我已经成功部署了 API 网关;但是,每个云功能的原始端点仍然存在并且可供公众访问。我想让云功能端点私有,同时让 api 网关端点公开,但我不知道如何实现这一点。任何建议都会很棒。

【问题讨论】:

标签: api google-cloud-platform google-cloud-functions google-cloud-api-gateway


【解决方案1】:

您无法隐藏 Cloud Functions 端点。在任何配置中,它都是公开可见的。

但是,您可以限制有权访问的人。在您的情况下,以安全模式部署您的 Cloud Functions(设置参数 --no-allow-unauthenticated 或从权限部分删除 allUsers)

然后,部署您的 API Gateway with a custom (backend) service account。授予此服务帐号调用 Cloud Functions 的权限(角色:cloudfunctions.invoker)。

完成此操作后,将仅允许 API Gateway 身份访问您的 Cloud Functions。用户将能够查看和请求 Cloud Functions URL,但他们会收到 403 或 401 错误。


编辑 1

经过测试,使用 Cloud Functions(我没有使用 Cloud Run 的这种情况),Cloud Functions 生成的目标受众是错误的,因为您在后端使用了添加路径。这是我的conf

  /function:
    get:
      summary: Greet a user
      operationId: function
      x-google-backend:
        address: https://us-central1-gdglyon-cloudrun.cloudfunctions.net/gdg-go
      responses:
        '200':
          description: A successful response
          schema:
            type: string
  /function-path:
    get:
      summary: Greet a user
      operationId: function-path
      x-google-backend:
        address: https://us-central1-gdglyon-cloudrun.cloudfunctions.net/gdg-go/path
        jwt_audience: https://us-central1-gdglyon-cloudrun.cloudfunctions.net/gdg-go
      responses:
        '200':
          description: A successful response
          schema:
            type: string

/function使用的是Cloud Functions的根路径,直接调用没问题。

/function-path/path 添加到 Cloud Functions 的根路径。我猜 API 网关使用了相同的完整 URL(末尾带有 /path),这是该函数的错误受众。

您可以使用 jwt_audience 参数覆盖它。

【讨论】:

  • 所以我从权限部分删除了 allUsers,然后我为我的服务帐户赋予了 cloudfunctions.invoker 的角色;但是,在调用该函数时出现 401 错误:未授权?
  • 我编辑了我的答案。您要么处于特殊情况,要么处于错误中。我提出了一个对我有用的解决方法。让我知道是否也适合你。
猜你喜欢
  • 2019-12-27
  • 2021-03-10
  • 2016-09-22
  • 2022-07-05
  • 2020-02-03
  • 1970-01-01
  • 2021-11-30
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多