保护后端服务
除了对发送到已部署网关的最终用户请求进行身份验证之外,确保 API Gateway 与后端服务之间的访问安全也至关重要。您可以通过以下方式阻止对后端托管式服务(Cloud Run、Cloud Run functions、App Engine 等)的公开访问:
- 仅允许对后端服务进行经过身份验证的访问。
- 向与网关的 API 配置关联的服务账号授予必要的权限,以便网关有权调用后端。
本页面介绍了保护后端服务所需的步骤,并介绍了网关的服务账号访问这些服务所需的角色和权限。
Cloud Run
所有 Cloud Run 全代管式服务在默认情况下都会以私密方式部署,这意味着,如果不在请求中提供身份验证凭证,就无法访问这些服务。
Cloud Run 服务受 IAM 保护。默认情况下,包含 run.routes.invoke 权限的任何角色均可调用 Cloud Run 服务。
您可以通过在 Cloud Run(全托管式)服务配置 IAM 来向其他用户授予访问权限。
对于 API Gateway,您可以通过向网关的服务账号授予适当的角色和权限(roles/run.invoker 角色或包含 run.routes.invoke 权限的角色)来启用对 Cloud Run 服务的访问权限。
您可以使用服务级 IAM 控制网关对单个服务的访问权限,或使用项目级 IAM 控制对项目内所有服务的访问权限。
如果网关向 Cloud Run 服务发出的请求被拒绝,请确保网关的服务账号被授予了 roles/run.invoker 角色,并且网关的服务账号拥有 run.routes.invoke 权限。如需详细了解调用方的角色和权限,请参阅 Cloud Run IAM 参考文档。
Cloud Run functions
对于 Cloud Run functions 后端服务,Identity and Access Management (IAM) 用于控制查看、创建、更新和删除函数的能力。IAM 通过授予角色来强制执行对 Cloud Run functions 服务(例如 API Gateway)的调用方的身份验证。
使用 IAM 授予角色和权限可以控制以下两组操作:
- 开发者操作:创建、更新和删除函数,以及管理对函数的访问。
- 函数调用:使函数得到执行。
对于 HTTP 函数和后台函数,在授予调用函数的权限时是有所不同的。
- HTTP 函数默认要求进行身份验证。您可以为 HTTP 函数配置 IAM,以指定函数是否允许未经身份验证的调用。
- 后台函数只能由为其订阅的事件源调用。
如需使 API Gateway 能够调用 Cloud Run functions 后端服务,请向网关的服务账号授予 roles/cloudfunctions.invoker 角色或包含 cloudfunctions.functions.invoke 权限的任何角色。
您可以使用服务级 IAM 控制网关对单个函数的访问权限,或使用项目级 IAM 控制对项目中的所有函数的访问权限。
如果网关向 Cloud Run functions 服务发出的请求被拒绝,请确保网关的服务账号已被授予 roles/cloudfunctions.invoker 角色,并且网关的服务账号具有 cloudfunctions.functions.invoke 权限。如需详细了解调用方的角色和权限,请参阅 Cloud Functions IAM 参考文档。
App Engine
为了保护 App Engine 应用,您必须使用 Identity-Aware Proxy (IAP) 来确保请求经过身份验证。
按照相关步骤为部署了 App Engine 后端服务的项目启用 IAP。启用 IAP 可确保对您的 App Engine 后端应用的访问受到保护。
如需使 API Gateway 能够调用 App Engine 后端服务,请按照设置 IAP 访问权限中的步骤,向与网关关联的服务账号授予 IAP-secured Web App User 角色。此外,请向服务账号授予包含以下权限的角色:
appengine.applications.updateclientauthconfig.clients.createclientauthconfig.clients.getWithSecret
其他 Google Cloud API
Google Cloud API(例如 aiplatform.googleapis.com 或 bigquery.googleapis.com)需要访问令牌,并会拒绝 API Gateway 发送到其他后端的 ID 令牌。网关能否调用这些 API 取决于其流式传输模式:
流式传输网关:
effectiveStreamingMode为EFFECTIVE_STREAMING_MODE_ENABLED的网关会使用网关服务账号的访问令牌向主机以.googleapis.com或.vertexai.goog结尾的每个后端进行身份验证。访问令牌仅具有https://www.googleapis.com/auth/cloud-platform范围,因此网关无法调用需要其他 OAuth 范围的 API 方法。同一网关上的其他后端仍会收到 ID 令牌。设置了
disable_auth(OpenAPI 2.0) 或disableAuth(OpenAPI 3.x) 的后端不会收到令牌。jwt_audience(OpenAPI 2.0) 和jwtAudience(OpenAPI 3.x) 字段对这些后端没有影响。向网关的服务账号授予目标 API 所需的 IAM 角色,例如 Gemini Enterprise Agent Platform (
aiplatform.googleapis.com) 的 Agent Platform User (roles/aiplatform.user) 角色。尚未发送访问令牌的流式网关将在 API Gateway 下次发布网关更新时开始发送访问令牌。如需立即切换,请将其更新为新的 API 配置。其他网关:
effectiveStreamingMode为EFFECTIVE_STREAMING_MODE_DISABLED的网关不支持调用 Google CloudAPI,调用可能会失败并返回401响应代码。