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 un nombre de host en un entorno Google Cloud o que no sea deGoogle Cloud .
Descripción general
Puedes usar Google Cloud CLI para crear túneles a los recursos con una dirección IP privada o un nombre de host del recurso. Si tienes recursos externos en entornos que no son deGoogle Cloud conectados a Google Cloud 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. La conectividad híbrida es necesaria para conectar tus recursos externos que no son deGoogle Cloud a Google Cloud. Para obtener más información, consulta la documentación de Cloud Interconnect o Cloud VPN.
Tu Cloud Router debe anunciar el rango de IP de IAP-TCP 35.235.240.0/20, de modo 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 puedes crear túneles a recursos externos a
tu Google Cloud proyecto.
Para configurar tu Cloud Router para que anuncie el rango de IP de IAP-TCP 35.235.240.0/20, sigue las instrucciones que se indican en Anuncia rangos de IP personalizados.
En los siguientes procedimientos, se proporcionan ejemplos de Google Cloud CLI 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 del túnel
Cuando configuras un túnel, especificas un grupo de destino del túnel para usarlo en las verificaciones de permisos. Los grupos de destino del túnel representan recursos que tienen las mismas restricciones de acceso al túnel. Puedes crear cualquier cantidad de grupos de destino, cada uno con cualquier cantidad de rangos de IP o nombres de dominio completamente calificados (FQDN) coincidentes. Los grupos de destino pueden superponerse para obtener más flexibilidad.
Cuando creas 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 por 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
Ve a la página de IAP y selecciona un proyecto si aún no se seleccionó uno.
En la pestaña Recursos de SSH y TCP, haz clic en Crear grupo de destino.
Ingresa un nombre para tu grupo. El nombre del grupo solo puede contener letras en minúscula (a-z) y guiones (-).
En la lista desplegable, selecciona la región en la que se creará el grupo de destino.
En la sección Dirección IP , haz clic en Agregar fila y, luego, ingresa las direcciones IP o los FQDN de los recursos.
Un rango de IP consta de rangos separados por comas que usan la 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.Haz clic en Crear grupo de destino.
gcloud
gcloud iap tcp dest-groups createYOUR_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, comous-central1.IP_RANGE_LIST: Es opcional. La lista de rangos de IP, que consta de rangos separados por comas que usan la notación CIDR, como10.1.2.0/24,172.0.0.0/8.FQDN_LIST: Es 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 comodín, coincidirá con cualquier nombre de host con el final especificado. De lo contrario, requiere una coincidencia exacta. Si una solicitud coincide con algún rango de IP o FQDN, se considera una coincidencia.
Si no estás seguro de qué grupos ya existen, ejecuta el siguiente comando para enumerarlos:
gcloud iap tcp dest-groups list \
--region=REGION
Administra grupos de destino del túnel
Puedes ver los detalles de un grupo de destino, modificarlo y quitarlo.
Console
Ve a la página de IAP y haz clic en la pestaña Recursos de SSH y TCP.
Para ver los detalles de un grupo de destino, haz clic en el nombre del grupo de destino.
Para modificar un grupo de destino, selecciona el grupo de destino 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, selecciona el grupo de destino y, luego, haz clic en el ícono de papelera.
gcloud
Para obtener detalles sobre cómo administrar grupos de destino con gcloud CLI, consulta los comandos gcloud del grupo de destino.
Configura los permisos del túnel
Para crear un túnel, debes tener el permiso iap.tunnelDestGroups.accessViaIAP en el grupo de destino pertinente. Puedes otorgar el permiso a través del rol iap.tunnelResourceAccessor.
Para configurar permisos en grupos de destino, debes tener el permiso iap.tunnelDestGroups.setIamPolicy, que puedes otorgar a través del rol iap.admin.
Console
Ve a la página de IAP.
En la pestaña Recursos de SSH y TCP, selecciona el grupo de destino para el que deseas configurar permisos.
En el panel que se abre, haz clic en Agregar principal y, luego, ingresa una dirección de correo electrónico para el usuario.
En la sección Asignar roles, selecciona un rol para asignarle a la principal.
Haz clic en Guardar.
gcloud
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 del túnel
Hay tres comandos de gcloud CLI que puedes usar cuando trabajas con IAP-TCP: start-iap-tunnel, ssh y scp.
Los comandos de IAP-TCP se actualizaron para admitir la creación de túneles basados en IP y FQDN. Para cambiar a la dirección IP o el FQDN, haz lo siguiente cuando uses los comandos:
- Especifica una dirección IP o un FQDN en lugar del nombre de la instancia.
- Usa
--regionen lugar de--zone. - Usa
--dest-grouppara especificar el grupo de destino que se usará. - Usa
--networkpara 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 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 de VPC que especificas, 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 ocurre dentro del 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 red
en la página Redes de VPC en la Google Cloud consola o puedes recuperar
la lista de nombres de red ejecutando el siguiente comando:
gcloud compute networks list --format='value(name)'
Ejemplos
En los siguientes ejemplos, se usa una dirección IP de ejemplo de 172.16.1.2. Cada comando también puede tomar 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
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 automáticamente las llaves SSH cuando se usa una dirección IP.
Si recibes el error Permission denied (publickey), el comando no encontró el archivo que contiene las llaves SSH. Para resolver este problema, agrega la ruta de acceso al archivo que contiene las llaves privadas SSH como 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 deseas 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 con contraseña, debes ingresar una contraseña. Si la cuenta está protegida por un par de llaves SSH privadas o públicas, debes especificarla con la marca -- -i como se indicó anteriormente.
Ejemplo de túnel
Para establecer un túnel a un puerto TCP diferente, usa el comando start-iap-tunnel.
Para crear un túnel desde localhost:8022 hasta el 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 estar escuchando 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 copiar un archivo a 172.16.1.2 con 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 administrar ni enviar automáticamente las llaves 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, agrega una entrada a tu configuración ~/.ssh/config o equivalente, como se muestra en el siguiente ejemplo:
Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
ProxyCommand entra en vigencia 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' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
ProxyCommand entra en vigencia cuando ejecutas el siguiente comando: ssh example.internal.company.com