Configurar el reenvío de TCP de IAP con una dirección IP o un nombre de host en un entorno de Google Cloud o que no sea de Google Cloud

En esta página se describe cómo configurar y usar la función de reenvío de TCP de Identity-Aware Proxy (IAP) con una dirección IP o un nombre de host.

Información general

Puedes usar la CLI de Google Cloud para crear túneles a recursos mediante la dirección IP privada o el nombre de host del recurso. Si tienes recursos externos que no estánGoogle Cloud conectados Google Cloud a través de Cloud Interconnect o una VPN, puedes usar el reenvío de TCP de IAP con esos recursos.

Antes de empezar

Si necesitas crear un túnel a recursos externos a Google Cloud, debes tener configurada la conectividad híbrida. Se necesita conectividad híbrida para conectar tus recursos externos que no sean deGoogle Cloud aGoogle Cloud. Para obtener más información, consulta la documentación de Cloud Interconnect o Cloud VPN.

Tu router de Cloud debe anunciar el intervalo de IPs de IAP-TCP 35.235.240.0/20 para que los destinos envíen el tráfico de respuesta a través de Cloud VPN o Cloud Interconnect, y no a través de Internet. Si no tienes esta configuración, no podrás crear túneles a recursos externos a tu proyecto de Google Cloud .

Para configurar tu router de Cloud para que anuncie el intervalo de direcciones IP de IAP-TCP 35.235.240.0/20, sigue las instrucciones que se indican en Anunciar intervalos de direcciones IP personalizadas.

En los siguientes procedimientos se proporcionan ejemplos de gcloud para completar las tareas. Para obtener información sobre cómo interactuar con grupos de destino mediante las APIs, consulta Recurso REST: projects.iap_tunnel.locations.destGroups.

Crear un grupo de destinos de túnel

Cuando configuras un túnel, especificas un grupo de destino que se usará para las comprobaciones de permisos. Los grupos de destino de túnel representan recursos que tienen las mismas restricciones de acceso al túnel. Puede crear tantos grupos de destino como quiera, cada uno con el número de intervalos de IP o FQDNs coincidentes que necesite. Los grupos de destino pueden solaparse para ofrecer más flexibilidad.

Al crear un grupo de destino, debe especificar una región. Para obtener los mejores resultados, la región que especifiques debe coincidir con la ubicación de los recursos de destino. Por ejemplo, si los recursos están conectados mediante una VPN, debes usar la región de la pasarela de VPN.

Para crear un grupo de destino, debe tener el permiso iap.tunnelDestGroups.create, que puede conceder a través del rol iap.tunnelDestGroupEditor. Para asignar un solo rol, consulta la sección Asignar un solo rol de la documentación de gestión de identidades y accesos.

Consola

  1. Ve a la página de IAP y selecciona un proyecto si aún no lo has hecho.

  2. En la pestaña Recursos SSH y TCP, haz clic en Crear grupo de destino.

  3. Escribe un nombre para el grupo. El nombre del grupo solo puede contener letras minúsculas (a-z) y guiones (-).

  4. En la lista desplegable, selecciona la región en la que quieras crear el grupo de destino.

  5. En la sección Dirección IP, haz clic en Añadir fila y, a continuación, introduce las direcciones IP o los nombres de dominio completos (FQDN) de los recursos.

    Un intervalo de IP consta de intervalos separados por comas que usan la notación CIDR, como 10.1.2.0/24,172.0.0.0/8.

    Una lista de FQDNs es una lista de nombres de host separados por comas, como *.internal.company.com. Puedes usar comodines con tu entrada de FQDN.

  6. Haz clic en Crear grupo de destino.

CLI de gcloud

gcloud iap tcp dest-groups create YOUR_GROUP_NAME \
  --region=REGION \
  --ip-range-list=IP_RANGE_LIST \
  --fqdn-list=FQDN_LIST

Haz los cambios siguientes:

  • YOUR_GROUP_NAME: el nombre del grupo. El nombre de un grupo solo puede contener letras minúsculas (a-z) y guiones (-).
  • REGION: región en la que se creará el grupo de destino, como us-central1.
  • IP_RANGE_LIST: opcional. La lista de intervalos de IP, que consta de intervalos separados por comas con notación CIDR, como 10.1.2.0/24,172.0.0.0/8.
  • FQDN_LIST: opcional. La lista de FQDNs es una lista de nombres de host separados por comas, como *.internal.company.com. Si una entrada FQDN tiene un prefijo de comodín, coincidirá con cualquier nombre de host que tenga el final especificado. De lo contrario, requiere una coincidencia exacta. Si una solicitud coincide con algún intervalo de IPs o FQDN, se considera que hay una coincidencia.

Si no sabes qué grupos ya existen, ejecuta el siguiente comando para verlos:

gcloud iap tcp dest-groups list \
  --region=REGION

Gestionar grupos de destinos de túneles

Puedes ver los detalles de un grupo de destino, modificarlo y eliminarlo.

Consola

  1. Ve a la página IAP y haz clic en la pestaña Recursos SSH y TCP.

    • Para ver los detalles de un grupo de destino, haga clic en su nombre.

    • Para modificar un grupo de destino, selecciónalo y haz clic en el icono del lápiz para abrir el panel Editar grupo de destino. También puedes eliminar el grupo de destino desde este panel.

    • Para eliminar un grupo de destino, selecciónalo y haz clic en el icono de papelera.

CLI de gcloud

Para obtener información sobre cómo gestionar grupos de destino con la CLI de gcloud, consulta los comandos de gcloud para grupos de destino.

Configurar permisos de túnel

Para crear un túnel, debe tener el permiso iap.tunnelDestGroups.accessViaIAP en el grupo de destino correspondiente. Puedes conceder el permiso a través del rol iap.tunnelResourceAccessor.

Para configurar los permisos de los grupos de destino, debes tener el permiso iap.tunnelDestGroups.setIamPolicy, que puedes conceder a través del rol iap.admin.

Consola

  1. Ve a la página de IAP.

  2. En la pestaña Recursos SSH y TCP, selecciona el grupo de destino para el que quieras configurar permisos.

  3. En el panel que se abre, haz clic en Añadir principal e introduce la dirección de correo del usuario.

  4. En la sección Asignar roles, selecciona un rol para asignarlo a la entidad de seguridad.

  5. Haz clic en Guardar.

CLI de gcloud

gcloud iap tcp dest-groups add-iam-policy-binding \
  --member=MEMBER \
  --role=ROLE \
  --dest-group=GROUP_NAME \
  --region=REGION

Haz los cambios siguientes:

  • MEMBER: la dirección de correo del usuario, como user:exampleuser@company.com.
  • ROLE: el rol de IAP obligatorio, roles/iap.tunnelResourceAccessor.
  • GROUP_NAME: el nombre del grupo de destino.
  • REGION: el nombre de la región, como us-central1.

Información sobre el uso de túneles

Hay tres comandos de la CLI de gcloud que puedes usar cuando trabajes con IAP-TCP: start-iap-tunnel, ssh y scp.

Los comandos de IAP-TCP se han actualizado para admitir la creación de túneles basados en IP y FQDN. Para cambiar a una dirección IP o a un FQDN, haz lo siguiente cuando uses los comandos:

  • Especifica una dirección IP o un FQDN en lugar del nombre de la instancia.
  • Usa --region en lugar de --zone.
  • Usa --dest-group para especificar el grupo de destino que quieres usar.
  • Usa --network para especificar el nombre de la red de VPC que quieras usar.

La dirección IP que especifiques debe ser la dirección IP privada del destino. No puedes usar IAP-TCP con direcciones IP públicas. Si usas un FQDN, debe resolverse en la dirección IP privada del destino. Ten en cuenta que la resolución de nombres se realiza desde la red VPC que especifiques, no desde la red del cliente. Por ejemplo, si intentas crear un túnel a vm.corp.company.com, el paso que convierte vm.corp.company.com en una dirección IP se produce en el contexto de la red de VPC.

La región que especifiques debe coincidir con la del grupo de destino.

La red que especifiques debe coincidir con el nombre de la red de VPC que tenga acceso al destino. Un nombre de red habitual es default. Puedes ver la lista de nombres de redes en la página Redes de VPC de la Google Cloud consola o recuperar la lista de nombres de redes ejecutando el siguiente comando:

gcloud compute networks list --format='value(name)'

Ejemplos

En los ejemplos siguientes se usa la dirección IP 172.16.1.2. Cada comando también puede usar un FQDN (por ejemplo, example.internal.company.com) en lugar de la dirección IP.

Ejemplo de SSH

Para iniciar una sesión SSH en 172.16.1.2, ejecuta el siguiente comando:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Sustituye DESTINATION_GROUP_NAME por el nombre del grupo de destino.

Ten en cuenta que --plain está implícito, por lo que no se intenta gestionar ni enviar automáticamente las claves SSH cuando se usa una dirección IP.

Si recibes el error Permission denied (publickey), significa que el comando no ha encontrado el archivo que contiene las claves SSH. Para solucionar este problema, añade la ruta al archivo que contiene las claves privadas SSH como parámetro del comando SSH, tal como se muestra en el siguiente ejemplo:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap \
    -- -i ~/.ssh/google_compute_engine

Sustituye DESTINATION_GROUP_NAME por el nombre del grupo de destino.

Si quieres iniciar sesión como un usuario específico, usa el formato USER@IP en lugar de especificar solo la IP:

gcloud compute ssh user@172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Si la cuenta está protegida con contraseña, debes introducirla. Si la cuenta está protegida por un par de claves SSH privadas o públicas, debes especificarlo con la marca -- -i, tal como se ha indicado anteriormente.

Ejemplo de túnel

Para establecer un túnel a otro puerto TCP, usa el comando start-iap-tunnel. Para crear un túnel de localhost:8022 al puerto 172.16.1.2:8085, ejecuta el siguiente comando:

gcloud compute start-iap-tunnel 172.16.1.2 8085 \
    --local-host-port=localhost:8022 \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default

Ten en cuenta que el ordenador de destino debe estar escuchando el puerto 8085 en este ejemplo.

Una vez que hayas establecido un túnel, podrás usar cualquier herramienta, como PuTTY, para establecer una conexión.

Ejemplo de SCP

Para copiar un archivo en 172.16.1.2 mediante SCP, ejecuta el siguiente comando:

gcloud compute scp file.txt 172.16.1.2:~/ \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default \
    --tunnel-through-iap

Ten en cuenta que --plain está implícito, por lo que no se intenta gestionar ni enviar automáticamente las claves SSH cuando se usa una dirección IP.

Ejemplo de ProxyCommand de SSH

Para usar el comando como ProxyCommand que siempre crea un túnel a 172.16.1.2, añade una entrada a tu configuración de ~/.ssh/config o equivalente, como se muestra en el siguiente ejemplo:

Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' \
    --listen-on-stdin \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default \
    --verbosity=warning
  

ProxyCommand se aplica cuando ejecutas el siguiente comando: ssh example

También puedes configurar ProxyCommand para que gestione muchos nombres de host, como se muestra en el siguiente ejemplo:

Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' 
--listen-on-stdin
--region=us-central1
--dest-group=destination-group-name
--network=default --verbosity=warning

ProxyCommand se aplica cuando ejecutas el siguiente comando: ssh example.internal.company.com