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

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

Descripción general

Puedes usar Google Cloud CLI para crear túneles a recursos con la dirección IP privada o el nombre de host del recurso. Si tienes recursos externos que no estánGoogle Cloud conectados a 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 comenzar

Si necesitas crear un túnel a recursos fuera de Google Cloud, debes tener configurada la conectividad híbrida. Se requiere 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 en la nube debe anunciar el rango de IP IAP-TCP 35.235.240.0/20 para que los destinos reenví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 puedes crear túneles a recursos externos a tu proyecto de Google Cloud .

Para configurar tu router en la nube para que anuncie el rango de IP IAP-TCP 35.235.240.0/20, sigue las instrucciones que se indican en Cómo anunciar rangos de IP personalizados.

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

Crea un grupo de destino de túnel

Cuando configuras un túnel, especificas un grupo de destino para usar en las verificaciones de permisos. Los grupos de destino de túneles representan recursos que tienen las mismas restricciones de acceso a túneles. Puedes crear cualquier cantidad de grupos de destino, cada uno con cualquier cantidad de rangos de IP o FQDN coincidentes. Los grupos de destino pueden superponerse para brindar mayor flexibilidad.

Cuando crees un grupo de destino, debes 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 a través de una VPN, debes usar la región de la puerta de enlace de VPN.

Para crear un grupo de destino, debes tener el permiso iap.tunnelDestGroups.create, que puedes otorgar a través del rol iap.tunnelDestGroupEditor. Para otorgar un solo rol, consulta Otorga un solo rol en la documentación de IAM.

Console

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

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

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

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

  5. En la sección IP address, haz clic en Add row y, luego, ingresa las direcciones IP o los nombres de dominio completamente calificados (FQDN) de los recursos.

    Un rango de IP consta de rangos separados por comas con notación CIDR, como 10.1.2.0/24,172.0.0.0/8.

    Una lista de FQDN 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.

gcloud CLI

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

Reemplaza lo siguiente:

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

Si no sabes qué grupos ya existen, ejecuta el siguiente comando para obtener una lista de ellos:

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

Cómo administrar grupos de destino de túneles

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

Console

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

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

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

    • Para quitar un grupo de destino, selecciónalo y, luego, haz clic en el ícono de la papelera.

gcloud CLI

Para obtener detalles sobre cómo administrar grupos de destino con gcloud CLI, consulta los comandos de gcloud para grupos de destino.

Cómo configurar los permisos del túnel

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

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

Console

  1. Ve a la página de IAP.

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

  3. En el panel que se abre, haz clic en Agregar principal y, luego, ingresa una dirección de correo electrónico para el usuario.

  4. En la sección Asignar roles, selecciona un rol para asignarlo al principal.

  5. Haz clic en Guardar.

gcloud CLI

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

Reemplaza lo siguiente:

  • MEMBER: Es la dirección de correo electrónico del usuario, como user:exampleuser@company.com.
  • ROLE: Es el rol de IAP requerido, roles/iap.tunnelResourceAccessor.
  • GROUP_NAME: Es el nombre del grupo de destino.
  • REGION: Es 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 trabajas con IAP-TCP: start-iap-tunnel, ssh y scp.

Se actualizaron los comandos IAP-TCP para admitir túneles basados en IP y FQDN. Para cambiar a la dirección IP o al FQDN, haz lo siguiente cuando uses los comandos:

  • Especifica una dirección IP o un FQDN en lugar del nombre de la instancia.
  • Usar --region en lugar de --zone
  • Usa --dest-group para especificar el grupo de destino que se usará.
  • Usa --network para especificar el nombre de la red de VPC que se 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, este debe resolverse en la dirección IP privada del destino. Ten en cuenta que la resolución de nombres se realiza desde la red de 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 región del grupo de destino.

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

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

Ejemplos

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

Ejemplo de SSH

Para iniciar una sesión de SSH a 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

Reemplaza DESTINATION_GROUP_NAME por el nombre del grupo de destino.

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

Si recibes el error Permission denied (publickey), significa que el comando no encontró el archivo que contiene las claves SSH. Para resolver este problema, agrega la ruta de acceso al archivo que contiene las claves privadas SSH como un parámetro para el comando SSH, 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

Reemplaza DESTINATION_GROUP_NAME por el nombre del grupo de destino.

Si quieres acceder 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 por contraseña, debes ingresar una. Si la cuenta está protegida por un par de claves SSH privadas o públicas, debes especificarlo con la marca -- -i, como se especificó 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 la máquina de destino debe escuchar el puerto 8085 en este ejemplo.

Después de establecer un túnel, puedes usar cualquier herramienta, como PuTTy, para establecer una conexión.

Ejemplo de SCP

Para usar SCP y transferir un archivo a 172.16.1.2, 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 administrar ni enviar claves de SSH automáticamente cuando se usa una dirección IP.

Ejemplo de ProxyCommand de SSH

Para usar el comando como ProxyCommand que siempre establece un túnel a 172.16.1.2, agrega una entrada a tu configuración de ~/.ssh/config o un 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 controlar 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