Habilita IAP para aplicaciones locales

En esta guía se explica cómo proteger una aplicación local basada en HTTP fuera de Google Cloud con Identity-Aware Proxy (IAP) mediante la implementación de un conector IAP.

Para obtener más información sobre cómo IAP protege los recursos y las apps locales, consulta la descripción general de IAP para las aplicaciones locales.

Antes de comenzar

Antes de comenzar, necesitas lo siguiente:

  • Tener instalado el SDK de Google Cloud
  • Una aplicación local basada en HTTP a la que se puede acceder a través de un nombre de host DNS y que acepte tráfico HTTPS. La aplicación también debe tener su propia instancia de IAP
  • Si tu app no es de acceso público, establece una conexión entre Google Cloud y tu app local mediante Cloud Interconnect.
  • Que un miembro de Cloud Identity haya otorgado la función Propietario a tu proyecto de Google Cloud
  • Un proyecto de Google Cloud con facturación habilitada
  • El nombre de host DNS que se usará como punto de entrada para el tráfico a Google Cloud. Por ejemplo, www.hr-domain.com
  • El nombre de host DNS de tu aplicación local. Por ejemplo, hr-internal.domain.com
  • Un certificado SSL o TLS para el nombre de host DNS que se usa como punto de entrada para el tráfico a Google Cloud. Se puede usar un certificado autogestionado o administrado por Google existente. Si no tienes un certificado, crea uno con Let's Encrypt

Habilita las API obligatorias

Para configurar un conector IAP, debes habilitar las siguientes API:

  1. Habilita la API de Compute Engine.

    Habilitar la API de Compute Engine

  2. Habilita la API de Google Kubernetes Engine.

    Habilitar la API de Google Kubernetes Engine

  3. Habilita la API de Cloud Deployment Manager V2.

    Habilitar la API de Cloud Deployment Manager V2

Crea una implementación de conector IAP

Un conector IAP es una plantilla de Deployment Manager. Cuando se implementa, la plantilla genera recursos y reglas de enrutamiento necesarias para reenviar las solicitudes autenticadas y autorizadas por IAP a tu aplicación local. En las siguientes secciones, se explica cómo configurar y, luego, implementar un conector IAP.

Configura los permisos

Para implementar un conector IAP, la cuenta del agente de servicios de las API de Google del proyecto de Google Cloud necesita la función Administrador de Kubernetes Engine. Esta cuenta de servicio permite que Deployment Manager cree un clúster de Google Kubernetes Engine (GKE) y todos los recursos que se ejecutan en él.

Para otorgar la función de Administrador de Kubernetes Engine a la cuenta del agente de servicios de las API de Google, haz lo siguiente:

  1. Ir a la página IAM.
    Ir a la página de IAM
  2. Edita los permisos del miembro PROJECT_NUMBER@cloudservices.gserviceaccount.com mediante un clic en Editar miembro .
  3. Haz clic en Agregar otra función y selecciona Kubernetes > Administrador de Kubernetes Engine en el menú desplegable Función.
  4. Haz clic en Guardar.

Ahora, tu cuenta de agente de servicios de las API de Google tiene las funciones de Editor y Administrador de Kubernetes Engine en tu proyecto.

Crea un recurso de certificado SSL

Se necesita un nuevo recurso de certificado SSL para configurar el proxy del balanceador de cargas HTTP(S) del conector IAP.

Para crear un recurso de certificado SSL a partir de la herramienta de línea de comandos de gcloud con tu certificado SSL o TLS y tu clave privada, haz lo siguiente:

  1. Crea un recurso de certificado SSL con compute ssl-certificates create.

    gcloud compute ssl-certificates create CERTIFICATE_NAME --private-key=PRIVATE_KEY_FILE.pem
    --certificate=CERTIFICATE_FILE.pem
    
  2. De manera opcional, confirma que tu nuevo recurso de certificado SSL esté disponible.

    1. Ve a la página Balanceo de cargas.
      Ir a la página Balanceo de cargas
    2. Debajo de la lista de balanceadores de cargas, haz clic en Menú avanzado.
    3. Haz clic en Certificados.

Descarga y configura un conector IAP

Para adaptarse a tus necesidades de implementación, se debe actualizar la plantilla configurable de Deployment Manager del conector IAP. Para descargar y configurar tu plantilla, haz lo siguiente:

  1. Clona el repositorio de GitHub del conector IAP para descargar su plantilla de Deployment Manager.

  2. Abre la carpeta del repositorio clonado y actualiza los campos obligatorios en el archivo iap-connector.yaml. Para obtener información sobre las reglas de enrutamiento, consulta la descripción general de IAP para aplicaciones locales.

         resources:
         - name: iap-connector
           type: iap-connector.py
           properties:
             zone: ZONE
             serviceAccountName: PROJECT_NUMBER@cloudservices.gserviceaccount.com
             routing:
             - name: BACKEND_SERVICE_NAME
               mapping:
               - name: host
                 source: SOURCE
                 destination: DESTINATION_URL
             tls:
             - CERTIFICATE_NAME
    
    Campos obligatorios:

    • zone: Es la zona en la que se implementa el conector IAP. Por ejemplo, us-central1-a.
    • serviceAccountName: Es el nombre de la cuenta del agente de servicios de las API de Google a la que se le otorga la función Administrador de Kubernetes Engine.
    • routing.mapping.source: Es la URL de las solicitudes que llegan a Google Cloud. Esta URL es por donde ingresa el tráfico al entorno.
    • routing.mapping.destination: Es la URL de la aplicación local a la que IAP enruta el tráfico después de que se autorizó y autenticó a un usuario. IAP enruta el tráfico a esta URL mediante TLS y la aplicación alojada allí debe proporcionar un punto final HTTPS.
    • tls: Es el nombre de tu recurso de certificado SSL.
    • routing.name: Es el nombre del nuevo servicio de backend detrás del balanceador de cargas HTTP(S).

    Campos opcionales:

    • initialNodeCount: Es la cantidad inicial de nodos deseado en el clúster. De forma predeterminada, el recuento de nodos inicial es 3.
    • imageVersion: Es la versión de la imagen de Ambassador que se ejecutará. De forma predeterminada, la versión de la imagen es 0.39.0.
    • replicas: Es la cantidad inicial de réplicas para la implementación de Ambassador. De forma predeterminada, la cantidad de réplicas es 3.

    Para ver la especificación del conector IAP, consulta el archivo iap-connector.py.schema.

  3. Guarda tu archivo iap-connector.yaml actualizado.

Implementa un conector IAP

  1. Para implementar el conector IAP y su clúster de Google Kubernetes Engine, ejecuta el siguiente comando de gcloud:

    gcloud deployment-manager deployments create NAME_OF_DEPLOYMENT --config=iap-connector.yaml
    
  2. De manera opcional, supervisa la implementación desde Google Cloud Console:

    1. Ve a la página Deployment Manager.
      Ir a la página Deployment Manager
    2. Para ver el estado de tu implementación, selecciona el nombre de tu implementación. Si implementaste recientemente tu conector IAP, es posible que debas esperar varios minutos para que se complete la implementación antes de que puedas ver su estado.
  3. De manera opcional, puedes ir a la página de clústeres de Kubernetes para consultar el estado de tu clúster de Google Kubernetes Engine.
    Ir a la página de clústeres de Kubernetes

  4. La implementación crea un balanceador de cargas HTTP(S) de Cloud Load Balancing. Asocia tu dominio de origen con la dirección IPv4 pública del balanceador de cargas mediante la actualización de los registros de recursos de DNS en tu administrador de dominio.

    Para obtener la dirección IPv4 pública, haz lo siguiente:

    1. Ve a la página Balanceo de cargas.
      Ir a la página Balanceo de cargas
    2. Haz clic en el Nombre del recurso del balanceador de cargas que se generó.

      La dirección IPv4 se encuentra en Frontend y está asociada al nombre del certificado.

El tráfico de solicitudes web a tu aplicación se está reenviando ahora desde el conector IAP a tu aplicación local.

Configura la pantalla de consentimiento de OAuth

Si no configuraste la pantalla de consentimiento de OAuth de tu proyecto, debes hacerlo. Para esto, se requiere una dirección de correo electrónico y un nombre de producto.

  1. Ve a la pantalla de consentimiento de OAuth.
    Configuración de la pantalla de consentimiento
  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 otro tipo de información opcional que desees mostrar.
  5. Haz clic en Guardar.

Para cambiar la información en 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 configurarla.

Configura el acceso de IAP

  1. Ve a la página Identity-Aware Proxy.
    Ir a la página Identity-Aware Proxy
  2. Selecciona el proyecto que deseas proteger con IAP.
  3. Selecciona la casilla de verificación junto al recurso 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 que aparece, ingresa las direcciones de correo electrónico 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
    • Grupo de Google: administradores@googlegroups.com
    • Cuenta de servicio: servidor@ejemplo.cuentadeserviciog.com
    • Dominio del lugar de trabajo de Google: example.com

    Asegúrate de agregar una Cuenta de Google a la que tengas acceso.

  6. En la lista desplegable Funciones, selecciona Cloud IAP > Usuario de aplicación web protegida con IAP.
  7. Haz clic en Guardar.

Activa IAP

  1. En la página Identity-Aware Proxy, en Recursos de HTTPS, busca el nombre de la implementación del conector de IAP. Para activar IAP,
  2. En la ventana Activar IAP que aparece, haz clic en Activar para confirmar que deseas que IAP proteja tu aplicación local. Después de activar IAP, se requieren credenciales de acceso para todas las conexiones con el balanceador de cargas. Solo se otorgará acceso a las cuentas con la función Usuario de la aplicación web protegida con IAP en el proyecto.
  3. Para confirmar que IAP está habilitado, dirígete a la URL interna de tu aplicación local. IAP está habilitado si aparece una solicitud de autenticación.

IAP ahora está autenticando y autorizando todo el tráfico a tu aplicación local.

Protege el tráfico saliente

Un conector IAP reenvía las solicitudes a tu backend local una vez implementado. Dado que la política de acceso de IAM se aplica en el conector IAP, asegúrate de que IAP haya autenticado y autorizado todas las solicitudes a tu backend.

Para confirmar que el tráfico saliente proviene del conector IAP, revisa las solicitudes en busca de un encabezado firmado por IAP. Las solicitudes autenticadas y autorizadas por IAP tienen adjunto un encabezado de JWT firmado de IAP.

Actualiza una implementación de conector IAP

Las reglas de enrutamiento de tu conector IAP se pueden actualizar y enviar a tu clúster de GKE implementado mediante el siguiente proceso. Para obtener más información, consulta Actualizar una implementación.

  1. Actualiza tu archivo iap-connector.yaml con nuevos parámetros de enrutamiento.
  2. Ejecuta el siguiente comando de gcloud:

    gcloud deployment-manager deployments update NAME_OF_DEPLOYMENT
    

Borra una implementación de conector IAP

Si borras tu implementación de conector IAP, se desactivará IAP, lo que dejará tu aplicación sin un sistema de autenticación de acceso. Se quitarán todos los recursos que creó la implementación, incluidas las reglas de enrutamiento.

Para borrar la implementación del conector IAP, haz lo siguiente:

  1. Ve a la página Deployment Manager.
    Ir a la página Deployment Manager
  2. En la lista de implementaciones, selecciona la casilla de verificación junto a tu implementación de IAP.
  3. En la parte superior de la página, haz clic en Borrar.

Si necesitas volver a crear la implementación del conector IAP que borraste, puedes usar el archivo de configuración original. Una implementación recreada se considera una implementación nueva, con recursos nuevos.