Habilita IAP para Cloud Run

Existen dos formas de habilitar el IAP para tus servicios de Cloud Run: directamente en un servicio de Cloud Run o en el servicio de backend que se encuentra frente a los servicios de Cloud Run.

Te recomendamos que habilites IAP directamente en Cloud Run. Esto protege el extremo run.app y, si configuras un balanceador de cargas, también el extremo del balanceador de cargas.

Si necesitas una administración de acceso central o deseas enrutar el tráfico a varias regiones, continúa con los siguientes procedimientos.

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 cargas. Si ejecutas Cloud Run en varias regiones conectadas al mismo servicio de backend global del balanceador de cargas, sigue las instrucciones de esta página para configurar IAP una vez para el servicio de backend.

Limitaciones conocidas

  • Cuando habilitas IAP en un balanceador de cargas, IAP protege el tráfico solo a través del balanceador de cargas y no con el tráfico que podría llegar al servicio de Cloud Run a través de su URL de run.app. Para permitir solo el tráfico autorizado por el IAP, consulta Cómo configurar Cloud Run para limitar el acceso.

  • IAP se autentica en Cloud Run con el encabezado X-Serverless-Authorization. Cloud Run pasa este encabezado a tu servicio después de quitar su firma. Si tu servicio está diseñado para reenviar la solicitud a otro servicio de Cloud Run que requiere autenticación de IAM, primero actualiza tu servicio para quitar este encabezado.

  • IAP no es compatible con Cloud CDN.

  • La IAP aumenta la latencia. Habilita IAP solo para las instancias que no sean sensibles a la latencia.

Antes de comenzar

Para habilitar IAP para los recursos de Cloud Run en IAP, necesitas lo siguiente:

IAP usa un cliente de OAuth administrado por Google para autenticar a los usuarios. Solo los usuarios de la organización pueden acceder a la aplicación habilitada para las IAP. Si deseas permitir el acceso a usuarios fuera de tu organización, consulta Habilita IAP para aplicaciones externas.

Habilita IAP desde un servicio de backend o un balanceador de cargas

Para habilitar IAP desde IAP detrás de un servicio de backend o un balanceador de cargas, sigue estas instrucciones.

Console

El cliente de OAuth administrado por Google no está disponible cuando se habilita IAP con la consola de Google Cloud .

Si aún no has configurado la pantalla de consentimiento de OAuth para tu proyecto, se te solicitará hacerlo. Para configurar la pantalla de consentimiento de OAuth, consulta Configura tu pantalla de consentimiento de OAuth.

Configura el acceso de IAP

  1. Ve a la página Identity-Aware Proxy.
  2. Selecciona el proyecto que deseas proteger con IAP.
  3. En APPLICATIONS, selecciona la casilla de verificación junto al servicio de backend del balanceador de cargas al que deseas agregar miembros.
  4. En el panel de la derecha, haz clic en Agregar principal.
  5. En el cuadro de diálogo Agregar principal, ingresa las cuentas de los grupos o las personas que deben tener el rol Usuario de aplicación web protegida con IAP para el proyecto. Las siguientes cuentas pueden ser miembros:

    • Cuenta de Google: usuario@gmail.com (también puede ser una cuenta de Google Workspace, como usuario@google.com o algún otro dominio de Workspace)
    • Grupo de Google: administradores@googlegroups.com
    • Cuenta de servicio: servidor@ejemplo.iam.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  6. En la lista desplegable Roles, selecciona Cloud IAP > Usuario de aplicación web protegida con IAP.

  7. Haz clic en Guardar.

Activa IAP

  1. En la página de IAP, en APLICACIONES, busca el servicio de backend del balanceador de cargas al que deseas restringir el acceso. Para activar IAP en un recurso, haz clic en el botón de activación IAP. Para habilitar IAP, haz lo siguiente:
    • Al menos un protocolo en la configuración del frontend del balanceador de cargas debe ser HTTPS. Obtén información para configurar un balanceador de cargas.
    • Necesitas los permisos compute.backendServices.update, clientauthconfig.clients.create y clientauthconfig.clients.getWithSecret. Estos permisos se otorgan por funciones, como la función de Editor de proyectos. Para obtener más información, consulta Administra el acceso a los recursos protegidos por IAP.
  2. En la ventana Activar IAP que aparece, haz clic en Activar para confirmar que deseas que IAP proteja tu recurso. Después de activar IAP, se requieren credenciales de acceso para todas las conexiones a tu balanceador de cargas. Solo las cuentas con el rol Usuario de la aplicación web protegida con IAP en el proyecto tendrán acceso.
  3. Sigue las instrucciones en Control de acceso con IAM para autorizar a IAP a enviar tráfico al servicio de Cloud Run de backend.

    • Principal: service-[PROJECT-NUMBER]@gcp-sa-iap.
    • 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 está 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
    

gcloud

  1. Si no lo hiciste antes en el proyecto, ejecuta el siguiente comando para crear el agente de servicio de IAP. Si ya creaste el agente de servicio, ejecutar el comando no lo duplicará.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Ejecuta el siguiente comando para otorgar permiso al invocador en la cuenta de servicio que creaste en el paso anterior.
    gcloud run services add-iam-policy-binding [SERVICE-NAME] \
    --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.'  \
    --role='roles/run.invoker'
    
  3. Para habilitar IAP, ejecuta el comando con alcance global o regional, según si el servicio de backend del balanceador de cargas es global o regional. Usa el ID de cliente y el secreto de OAuth del paso anterior.

    Alcance global

    gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
    

    Alcance regional

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
    
    Reemplaza lo siguiente:

    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • REGION_NAME: Es la región en la que deseas habilitar la IAP.

Después de habilitar IAP, puedes usar Google Cloud CLI para manipular una política de acceso de IAP con el rol de Identity and Access Management roles/iap.httpsResourceAccessor. Consulta Administra el acceso a los recursos protegidos por IAP para obtener más información.

Terraform

  1. Si no lo hiciste antes, en un proyecto, crea el agente de servicio de IAP ejecutando el siguiente comando. Si ya creaste el agente de servicio, ejecutar el comando no lo duplicará.
    resource "google_project_service" "project" {
      project = "your-project-id"
      service = "iap.googleapis.com"
    }
    
  2. Ejecuta el siguiente comando para otorgar permiso de invocador al agente de servicio creado en el paso anterior.
    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",
      ]
    }
    
  3. Para habilitar IAP, ejecuta el comando global o regional según tu balanceador de cargas. Usa el ID de cliente y el secreto de OAuth del paso anterior.

    • Alcance 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"
        }
      }
      

    • Alcance 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"
        }
      }
      

Configura Cloud Run para limitar el acceso

Para evitar que el tráfico se enrute a través de la URL run.app predeterminada de un servicio de Cloud Run, inhabilita la URL predeterminada. De lo contrario, configura los parámetros de entrada para restringir la entrada de red para Cloud Run.

Solución de errores

Se denegó el permiso 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 haber otorgado el rol de Invocador de Cloud Run a la siguiente cuenta de servicio: service-[PROJECT-NUMBER]@gcp-sa-iap..

  • Si otorgaste el rol de invocador de Cloud Run a la cuenta de servicio anterior y sigues teniendo este problema, vuelve a implementar tu servicio de Cloud Run.

La falla del agente de servicio provoca un error de configuración de IAM

Habilitar las IAP en un proyecto nuevo por primera vez puede provocar el siguiente error:

Setting IAM permissions failed

Esto se debe a que falló el agente de servicio de Cloud Run. Para resolver el problema, vuelve a habilitar IAP o establece la política de IAM de forma manual.

No se puede configurar la IAP a través de gcloud CLI

 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 versión preliminar de IAP con Cloud Run, Cloud Run no realizó la verificación de permisos run.routes.invoke para las llamadas de IAP que usan el rol de Cloud Run Invoker. Con la disponibilidad general (DG), Cloud Run realiza esta verificación de permisos.

Para evitar cambios que interrumpan el funcionamiento, algunos proyectos de clientes que dependían de este comportamiento durante la versión preliminar se colocaron en una lista de entidades permitidas para que no se verificara el permiso. Comunícate con el equipo de asistencia de Cloud Run para quitar esos proyectos de la lista de entidades permitidas solo para la versión preliminar.

¿Qué sigue?

Para ayudarte a configurar IAP para Cloud Run con Terraform, explora un ejemplo de código de Terraform.