Proteger los servicios de backend
Además de autenticar las solicitudes de los usuarios finales a la puerta de enlace implementada, es importante proteger el acceso entre API Gateway y tus servicios de backend. Puedes evitar el acceso público a tus servicios administrados de backend (Cloud Run, Cloud Run Functions, App Engine, etc.) de las siguientes maneras:
- Permitir solo el acceso autenticado a tu servicio de backend.
- Otorgar los permisos necesarios a la cuenta de servicio asociada con la configuración de la API de tu puerta de enlace para que esta tenga autorización para invocar el backend
En esta página, se describen los pasos necesarios para proteger tu servicio de backend y los roles y permisos que requiere la cuenta de servicio de tu puerta de enlace para acceder a esos servicios.
Cloud Run
Todos los servicios de Cloud Run completamente administrados se implementan de forma privada de forma predeterminada, lo que significa que no se puede acceder a ellos sin proporcionar credenciales de autenticación en la solicitud.
Los servicios de Cloud Run están protegidos por IAM. De forma predeterminada, cualquier servicio que contenga el permiso run.routes.invoke puede llamar a los servicios de Cloud Run.
Puedes configurar IAM en los servicios de Cloud Run (completamente administrados) para otorgar acceso a usuarios adicionales.
En el caso de API Gateway, el acceso a los servicios de Cloud Run se habilita otorgando a la cuenta de servicio de la puerta de enlace los roles y permisos adecuados: el rol roles/run.invoker o un rol que contenga el permiso run.routes.invoke.
Puedes controlar el acceso de una puerta de enlace a un servicio individual con la IAM a nivel de servicio o a todos los servicios dentro de un proyecto con la IAM a nivel de proyecto.
Si se rechaza una solicitud de puerta de enlace al servicio de Cloud Run, asegúrate de que se otorga a la cuenta de servicio de la puerta de enlace la función roles/run.invoker y de que la cuenta de servicio de la puerta de enlace tiene el permiso run.routes.invoke. Obtén más información sobre las funciones y los permisos de invocador en la referencia de IAM de Cloud Run.
Cloud Run Functions
En el caso de los servicios de backend de Cloud Run Functions, se usa Identity and Access Management (IAM) para controlar la capacidad de ver, crear, actualizar y borrar funciones. IAM aplica la autenticación de los emisores de llamadas a los servicios de Cloud Run Functions, como API Gateway, otorgando roles.
Otorgar roles y permisos con IAM permite controlar dos conjuntos de acciones:
- Operaciones de desarrollador: crear, actualizar y borrar funciones, así como administrar el acceso a las funciones.
- Invocación de función: hace que se ejecute una función.
El otorgamiento de la capacidad de invocar una función difiere para las funciones de HTTP y las funciones en segundo plano.
- Las funciones de HTTP requieren autenticación de forma predeterminada. Puedes configurar IAM en funciones de HTTP para especificar si una función permite la invocación no autenticada.
- Las funciones en segundo plano solo se pueden invocar desde la fuente del evento al que están suscritas.
Para habilitar API Gateway para que llame a tu servicio de backend de Cloud Run Functions, otorga a la cuenta de servicio de la puerta de enlace el rol roles/cloudfunctions.invoker o cualquier rol que contenga el permiso cloudfunctions.functions.invoke.
Puedes controlar el acceso de una puerta de enlace a una función individual con la IAM a nivel de servicio o a todas las funciones de un proyecto con la IAM a nivel de proyecto.
Si se rechazan las solicitudes de una puerta de enlace a tu servicio de Cloud Run Functions, asegúrate de que a la cuenta de servicio de la puerta de enlace se le otorgue el rol roles/cloudfunctions.invoker y que la cuenta de servicio de la puerta de enlace tenga el permiso cloudfunctions.functions.invoke. Obtén más información sobre los roles y permisos de invocador en la referencia de IAM de Cloud Functions.
App Engine
Para proteger tu app de App Engine, debes usar Identity-Aware Proxy (IAP) para garantizar que se autentiquen las solicitudes.
Sigue los pasos para habilitar IAP en el proyecto en el que se implementa el servicio de backend de App Engine. Habilitar IAP garantizará que el acceso a tu aplicación de backend de App Engine esté protegido.
Para habilitar API Gateway para que llame a tu servicio de backend de App Engine, sigue los pasos que se indican en
Configura el acceso de IAP para otorgar el rol IAP-secured Web App User a la cuenta de servicio asociada con tu puerta de enlace. Además, otorga a la cuenta de servicio un rol que contenga los siguientes permisos:
appengine.applications.updateclientauthconfig.clients.createclientauthconfig.clients.getWithSecret
Otras APIs de Google Cloud
Las APIs deGoogle Cloud , como aiplatform.googleapis.com o bigquery.googleapis.com, requieren un token de acceso y rechazan el token de ID que API Gateway envía a otros backends. La capacidad de una puerta de enlace para llamar a estas APIs depende de su modo de transmisión:
Puertas de enlace de transmisión: Una puerta de enlace con un
effectiveStreamingModedeEFFECTIVE_STREAMING_MODE_ENABLEDse autentica con un token de acceso para la cuenta de servicio de la puerta de enlace en cada backend cuyo host termina en.googleapis.como.vertexai.goog. El token de acceso solo tiene el permisohttps://www.googleapis.com/auth/cloud-platform, por lo que la puerta de enlace no puede llamar a métodos de la API que requieran un permiso de OAuth diferente.Otros backends en la misma puerta de enlace aún reciben un token de ID. Un backend con
disable_auth(OpenAPI 2.0) odisableAuth(OpenAPI 3.x) configurado no recibe ningún token. Los camposjwt_audience(OpenAPI 2.0) yjwtAudience(OpenAPI 3.x) no tienen efecto en estos backends.Otorga a la cuenta de servicio de la puerta de enlace el rol de IAM que requiere la API de destino, como el rol de usuario de Agent Platform (
roles/aiplatform.user) para Gemini Enterprise Agent Platform (aiplatform.googleapis.com). Una puerta de enlace de transmisión que aún no envía tokens de acceso comienza a hacerlo cuando API Gateway implemente una actualización de la puerta de enlace. Para cambiarla de inmediato, actualízala a una nueva configuración de API.Otras puertas de enlace: Una puerta de enlace con un
effectiveStreamingModedeEFFECTIVE_STREAMING_MODE_DISABLEDno admite llamadas a las APIs de Google Cloud, y las llamadas pueden fallar con un código de respuesta401.