Habilita IAP para Cloud Run

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta página, se explica cómo proteger un servicio de Cloud Run con Identity-Aware Proxy (IAP).

Limitaciones conocidas

  • IAM debe configurarse para otorgar a allUsers la función de Invocador en el servicio de Cloud Run. Aún puedes bloquear el acceso a nivel de red, por lo que todas las solicitudes externas deben autorizarse mediante IAP. Si deseas obtener más información, consulta Configura Cloud Run para limitar el acceso. Se está abordando esta limitación para que puedas otorgar de forma explícita acceso IAP específico del proyecto al servicio de Cloud Run.

  • Los servicios de Cloud Run con HTTP/2 habilitado tienen un bucle de redireccionamiento infinito a pedido cuando se protegen con IAP. Este comportamiento no es intencional y Google anticipa que se abordará en el futuro. Por ahora, para evitar este comportamiento, Google recomienda inhabilitar la configuración HTTP/2 (configuración predeterminada) cuando un servicio está protegido por IAP.

  • Los servicios de Cloud Run que entrega un modo de balanceador de cargas basado en Envoy (Global external HTTP(S) load balancer) no tienen el encabezado X-Goog-IAP-JWT-Assertion de IAP. Para evitar este comportamiento, te recomendamos usar el modo Global external HTTP(S) load balancer (classic).

  • Cloud Run con un balanceador de cargas interno requiere una suscripción a BeyondCorp Enterprise.

Antes de comenzar

A fin de habilitar IAP para Cloud Run, necesitas lo siguiente:

  • Un proyecto de la consola de Google Cloud con la facturación habilitada
  • Un grupo de uno o más servicios de Cloud Run, entregados por un balanceador de cargas.
  • Un código de aplicación para verificar que todas las solicitudes tengan una identidad

Habilita IAP

Consola

Si aún no configuraste la pantalla de consentimiento de OAuth de tu proyecto, debes hacerlo con una dirección de correo electrónico y un nombre de producto.

  1. Ve a la pantalla de consentimiento de OAuth.
  2. En Correo electrónico de asistencia, selecciona la dirección de correo electrónico que deseas mostrar como contacto público. Esta debe ser tu dirección de correo electrónico o un Grupo de Google de tu propiedad.
  3. Ingresa el Nombre de la aplicación que deseas mostrar.
  4. Agrega cualquier detalle opcional.
  5. Haz clic en Guardar.

Para cambiar la información de la pantalla de consentimiento de OAuth más tarde, como el nombre del producto o la dirección de correo electrónico, repite los pasos anteriores para configurar esa pantalla.

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 Aplicaciones, 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 miembro.
  5. En el cuadro de diálogo Agregar miembros, ingresa las cuentas de los grupos o personas a quienes se debe asignar la función Usuario de app 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.cuentadeserviciog.com
    • Dominio de Google Workspace: example.com
  6. Selecciona Cloud IAP > Usuario de aplicación web protegida con IAP en la lista desplegable Funciones.

  7. Haz clic en Guardar.

Activa IAP

  1. En la página de IAP, en Aplicaciones, busque el servicio de backend del balanceador de cargas al que desea restringir el acceso. Para activar IAP para 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 más información sobre cómo 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 con 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 al balanceador de cargas. Solo las cuentas con la función Usuario de la aplicación web protegida con IAP en el proyecto tendrán acceso.
  3. En la página IAM, agrega un nuevo permiso con la siguiente configuración:

    • Principal: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
    • Función: Invocador de Cloud Run

    Puedes agregar condiciones para restringir esta función a los servicios obligatorios de Cloud Run.

    Ir a la página IAM

gcloud

  1. Sigue las instrucciones de la página sobre cómo crear clientes de OAuth de forma programática para IAP a fin de configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
  2. Guarda el secreto y el ID de cliente de OAuth.
  3. Si aún no lo hiciste, crea una cuenta de servicio con el siguiente comando. Si creaste una cuenta de servicio con anterioridad, la ejecución del comando no crea cuentas de servicio duplicadas.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  4. Otorga permiso de invocador a la cuenta de servicio creada en el paso anterior mediante la ejecución del 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`
    
  5. Habilita IAP mediante la ejecución del 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,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    

    Alcance regional:

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    
    Reemplaza lo siguiente:

    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • CLIENT_ID: Es el ID de cliente de OAuth del paso anterior.
    • CLIENT_SECRET: Es el secreto del cliente de OAuth del paso anterior.
    • REGION_NAME: Es la región en la que deseas habilitar IAP.

Después de habilitar IAP, puedes usar Google Cloud CLI para manipular una política de acceso de IAP con la función de Identity and Access Management roles/iap.httpsResourceAccessor. Consulta Cómo administrar funciones y permisos para obtener más información.

Configura Cloud Run para limitar el acceso

Completa los siguientes pasos para configurar el acceso a tu servicio de Cloud Run.

  1. Configure el servicio de Cloud Run y configure Ingress como Internal y Cloud Load Balancing. Consulta Restringe la entrada para Cloud Run a fin de obtener más detalles.

    Este paso garantiza que solo los clientes internos y el balanceador de cargas externo puedan llamar al servicio de Cloud Run y que se bloqueen las solicitudes directas de la Internet pública.

  2. Para el servicio de Cloud Run, otorga a allUsers la función de Invocador. Para obtener más información, consulta Cómo permitir el acceso público (sin autenticar).

    Este paso es importante para garantizar que tu configuración de IAP funcione correctamente, ya que configura Cloud Run a fin de que no intente autenticar y autorizar solicitudes por su cuenta. En cambio, IAP completa la autenticación y la autorización.

Ten en cuenta que esta configuración permite que todos los clientes que se consideren internos (según la definición en Restringe la entrada para Cloud Run) accedan al servicio de Cloud Run sin necesidad de autenticarse. Todos los demás clientes que ingresan a través del balanceador de cargas externo se autentican a través de IAP. Esta es una limitación conocida que se abordará en el futuro.