Hay dos formas de habilitar IAP para tus servicios de Cloud Run: directamente en un servicio de Cloud Run o en el servicio de backend que está delante de los servicios de Cloud Run.
Te recomendamos que habilites IAP directamente en Cloud Run.
De esta forma, se protege el endpoint run.app
y, si configuras un balanceador de carga, también se protege el endpoint del balanceador de carga.
Si necesitas una gestión de acceso centralizada o quieres dirigir el tráfico a varias regiones, sigue los procedimientos que se indican a continuación.
En esta página se explica cómo proteger un servicio de Cloud Run con IAP desde un servicio de backend o un balanceador de carga. Si ejecutas Cloud Run en varias regiones asociadas al mismo servicio de backend global del balanceador de carga, sigue las instrucciones de esta página para configurar IAP una vez en el servicio de backend.
Limitaciones conocidas
Cuando habilitas IAP en un balanceador de carga, IAP protege el tráfico solo a través del balanceador de carga y no el tráfico que pueda llegar al servicio de Cloud Run a través de su URL
run.app
. Para permitir solo el tráfico autorizado por IAP, consulta Configurar Cloud Run para limitar el acceso.IAP se autentica en Cloud Run mediante el encabezado
X-Serverless-Authorization
. Cloud Run envía este encabezado a tu servicio después de eliminar su firma. Si tu servicio está diseñado para reenviar la solicitud a otro servicio de Cloud Run que requiere autenticación de gestión de identidades y accesos, actualiza tu servicio para eliminar primero este encabezado.IAP no es compatible con Cloud CDN.
IAP aumenta la latencia. Habilita IAP solo en las instancias que no sean sensibles a la latencia.
Antes de empezar
Para habilitar IAP en los recursos de Cloud Run en IAP, necesitas lo siguiente:
- Un proyecto de la consola de Google Cloud con la facturación habilitada. Google Cloud
- Grupo de uno o varios servicios de Cloud Run, atendidos por un balanceador de carga.
- Consulta información sobre cómo configurar un balanceador de carga HTTPS externo.
- Consulta información sobre cómo configurar un balanceador de carga HTTPS interno.
- Un nombre de dominio registrado en la dirección de tu balanceador de carga.
- Código de aplicación para verificar que todas las solicitudes tienen una identidad.
- Consulta cómo obtener la identidad del usuario.
IAP usa un cliente de OAuth gestionado por Google para autenticar a los usuarios. Solo los usuarios de la organización pueden acceder a la aplicación con IAP. Si quieres permitir el acceso a usuarios ajenos a tu organización, consulta Habilitar las compras en aplicaciones para aplicaciones externas.
Habilitar IAP desde un servicio de backend o un balanceador de carga
Para habilitar IAP desde IAP detrás de un servicio de backend o un balanceador de carga, sigue estas instrucciones.
Consola
El cliente de OAuth gestionado por Google no está disponible al habilitar IAP mediante la Google Cloud consola.
Si no has configurado la pantalla de consentimiento de OAuth de tu proyecto, se te pedirá que lo hagas. Para configurar la pantalla de consentimiento de OAuth, consulta el artículo Configurar la pantalla de consentimiento de OAuth.
Configurar el acceso a IAP
- Ve a la página Identity-Aware Proxy.
- Selecciona el proyecto que quieras proteger con IAP.
- En APLICACIONES, marca la casilla situada junto al servicio de backend del balanceador de carga al que quieras añadir miembros.
- En el panel de la derecha, haz clic en Añadir principal.
En el cuadro de diálogo Añadir principal, introduce las cuentas de los grupos o las personas que deben tener el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto. Pueden ser miembros los siguientes tipos de cuentas:
- Cuenta de Google: usuario@gmail.com. También puede ser una cuenta de Google Workspace, como usuario@google.com u otro dominio de Workspace.
- Grupo de Google: admins@googlegroups.com
- Cuenta de servicio: servidor@example.iam.gserviceaccount.com
- Dominio de Google Workspace: example.com
En la lista desplegable Roles, selecciona Cloud IAP > Usuario de aplicación web protegida por IAP.
Haz clic en Guardar.
Activando IAP
- En la página de IAP, en APLICACIONES, busca el servicio de backend del balanceador de carga al que quieras restringir el acceso. Para activar IAP en un recurso, haz clic en el interruptor IAP.
Para habilitar IAP, sigue estos pasos:
- Al menos un protocolo de la configuración de frontend del balanceador de carga debe ser HTTPS. Consulta información sobre cómo configurar un balanceador de carga.
- Necesitas los permisos
compute.backendServices.update
,clientauthconfig.clients.create
yclientauthconfig.clients.getWithSecret
. Estos permisos se conceden mediante roles, como el rol Editor de proyecto. Para obtener más información, consulta Gestionar el acceso a recursos protegidos por IAP.
- En la ventana Activar IAP que aparece, haz clic en Activar para confirmar que quieres que IAP proteja tu recurso. Después de activar IAP, se requieren credenciales de inicio de sesión para todas las conexiones con tu balanceador de carga. Solo se concederá acceso a las cuentas que tengan el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.
Sigue las instrucciones de Control de acceso con IAM para autorizar a IAP a enviar tráfico al servicio de backend de Cloud Run.
- Principal:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- Rol: Invocador de Cloud Run
La cuenta de servicio de IAP se crea cuando se habilita IAP. Si la cuenta de servicio de IAP no aparece en la lista de principales, puedes crearla ejecutando el siguiente comando de gcloud:
gcloud beta services identity create --service=iap.googleapis.com --project=PROJECT_ID
- Principal:
gcloud
- Si aún no lo has hecho en el proyecto, crea el agente de servicio de IAP ejecutando el siguiente comando. Si ya has creado el agente de servicio, al ejecutar el comando no se duplicará.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Concede el permiso de invocador a la cuenta de servicio que has creado en el paso anterior ejecutando el siguiente comando.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
Habilita IAP ejecutando el comando de ámbito global o regional, en función de si el servicio de backend del balanceador de carga es global o regional. Usa el ID y el secreto de cliente de OAuth del paso anterior.
Ámbito global
gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
Ámbito regional
Sustituye lo siguiente:gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
- BACKEND_SERVICE_NAME: el nombre del servicio de backend.
- REGION_NAME: la región en la que quieres habilitar IAP.
Una vez que hayas habilitado IAP, podrás usar la CLI de Google Cloud para manipular una política de acceso de IAP con el rol de gestión de identidades y accesos roles/iap.httpsResourceAccessor
. Para obtener más información, consulta Gestionar el acceso a recursos protegidos por IAP.
Terraform
- Si aún no lo has hecho, crea el agente de servicio de IAP en un proyecto ejecutando el siguiente comando. Si ya has creado el agente de servicio, al ejecutar el comando no se duplicará.
resource "google_project_service" "project" { project = "your-project-id" service = "iap.googleapis.com" }
- Concede el permiso de invocador al agente de servicio creado en el paso anterior ejecutando el siguiente comando.
resource "google_cloud_run_service_iam_binding" "binding" { location = google_cloud_run_v2_service.default.location service = google_cloud_run_v2_service.default.name role = "roles/run.invoker" members = [ "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com", ] }
Habilita IAP ejecutando el comando global o el regional, en función de tu balanceador de carga. Usa el ID y el secreto de cliente de OAuth del paso anterior.
Ámbito global
resource "google_compute_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Ámbito regional
resource "google_compute_region_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Configurar Cloud Run para limitar el acceso
Para evitar que el tráfico se enrute a través de la run.app
URL predeterminada de un servicio de Cloud Run, inhabilita la URL predeterminada.
De lo contrario, configura los ajustes de entrada para restringir la entrada de red en Cloud Run.
Solucionar errores
Permiso denegado para acceder a Cloud Run
Your client does not have permission to get URL from this server
IAP usa los permisos de la cuenta de servicio de IAP para invocar tu servicio de Cloud Run. Asegúrate de que has concedido el rol de invocador de Cloud Run a la siguiente cuenta de servicio:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
.Si has concedido el rol Cloud Run Invoker a la cuenta de servicio anterior y sigues teniendo este problema, vuelve a desplegar tu servicio Cloud Run.
El error del agente de servicio provoca un error de IAM
Si habilitas IAP en un proyecto nuevo por primera vez, puede producirse el siguiente error:
Setting IAM permissions failed
Esto se debe a que el agente de servicio de Cloud Run ha fallado. Para solucionar el problema, vuelve a habilitar IAP o define la política de gestión de identidades y accesos manualmente.
No se puede configurar IAP mediante la CLI de gcloud
The IAP service account is not provisioned
Si ves este error, ejecuta el siguiente comando:
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
La cuenta de servicio de IAP no necesita el permiso run.routes.invoke
Durante la vista previa de IAP con Cloud Run, Cloud Run no realizaba la comprobación del permiso run.routes.invoke
para las llamadas de IAP que usaban el rol Invocador de Cloud Run. Con la disponibilidad general, Cloud Run realiza esta comprobación de permisos.
Para evitar cambios que supongan un problema, se han añadido a una lista de permitidos algunos proyectos de clientes que dependían de este comportamiento durante la vista previa, de modo que no se comprobara el permiso. Ponte en contacto con el equipo de Asistencia de Cloud Run para eliminar estos proyectos de la lista de permitidos de la versión preliminar.
Siguientes pasos
Para configurar IAP en Cloud Run con Terraform, consulta un ejemplo de código de Terraform.