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
Ve a la página de IAP y selecciona un proyecto si aún no lo has hecho.
En la pestaña Recursos SSH y TCP, haz clic en Crear grupo de destino.
Escribe un nombre para el grupo. El nombre del grupo solo puede contener letras minúsculas (a-z) y guiones (-).
En la lista desplegable, selecciona la región en la que quieras crear el grupo de destino.
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.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
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
Ve a la página de IAP.
En la pestaña Recursos SSH y TCP, selecciona el grupo de destino para el que quieras configurar permisos.
En el panel que se abre, haz clic en Añadir principal e introduce la dirección de correo del usuario.
En la sección Asignar roles, selecciona un rol para asignarlo a la entidad de seguridad.
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