3

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

4

1 回答 1

0

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

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

然后,使用自定义(后端)服务帐户部署您的API 网关。授予此服务帐户调用 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

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

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

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

于 2021-03-20T13:03:03.797 回答