保护后端服务
除了对已部署的网关验证最终用户的请求之外,请务必保护 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,可以通过向网关的服务账号授予适当的角色和权限来启用对 Cloud Run 服务的访问权限:roles/run.invoker
角色或包含 run.routes.invoke
权限的角色。
您可以使用服务级 IAM 控制网关对单个服务的访问权限,或使用项目级 IAM 控制对项目内所有服务的访问权限。
如果网关向 Cloud Run 服务发出的请求被拒绝,请确保网关的服务账号被授予了 roles/run.invoker
角色,并且网关的服务账号拥有 run.routes.invoke
权限。如需详细了解调用方的角色和权限,请参阅 Cloud Run IAM 参考文档。
Cloud Functions
对于 Cloud Run 函数后端服务,Identity and Access Management (IAM) 用于控制查看、创建、更新和删除函数的权限。IAM 通过授予角色来强制对 Cloud Run 函数服务(例如 API Gateway)的调用者进行身份验证。
使用 IAM 授予角色和权限可以控制以下两组操作:
- 开发者操作:创建、更新和删除函数,以及管理对函数的访问。
- 函数调用:使函数得到执行。
对于 HTTP 函数和后台函数,在授予调用函数的权限时是有所不同的。
- HTTP 函数默认要求进行身份验证。您可以为 HTTP 函数配置 IAM,以指定函数是否允许未经身份验证的调用。
- 后台函数只能由为其订阅的事件源调用。
如需使 API Gateway 能够调用 Cloud 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.update
clientauthconfig.clients.create
clientauthconfig.clients.getWithSecret