我的目标是防止用户使用 API 密钥和 API 网关访问我的云功能端点。我已经成功部署了 API 网关;但是,每个云功能的原始端点仍然存在并且可供公众访问。我想让云功能端点私有,同时让 api 网关端点公开,但我不知道如何实现这一点。任何建议都会很棒。
1 回答
您无法隐藏 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
使用/function
Cloud Functions 的根路径,直接调用没问题。
/function-path
添加/path
到 Cloud Functions 的根路径。我猜 API Gateway 使用相同的完整 URL(/path
末尾带有 ),这是该函数的错误受众。
您可以使用jwt_audience
参数覆盖它。