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 de Google Cloud o noGoogle 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 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 para acceder 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 son deGoogle Cloud aGoogle 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 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 Cloud Router de modo que anuncie el rango de IP de 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 Google Cloud CLI para completar las tareas. Para obtener información sobre cómo interactuar con los grupos de destino a través de las APIs, consulta Recurso de REST: projects.iap_tunnel.locations.destGroups.
Crea un grupo de destinos de 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 la cantidad de grupos de destino que desees, cada uno con la cantidad de rangos de IP o nombres de dominio completamente calificados (FQDN) que desees. Los grupos de destinos pueden superponerse para brindar más flexibilidad.
Cuando creas un grupo de destinos, 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 destinos, 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 separada por comas de nombres de host, como
*.internal.company.com. Puedes usar comodines con tu entrada de FQDN.Haz clic en Crear grupo de destinos.
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. Es la lista de rangos de IP, que consta de rangos separados por comas con 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 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 rango de IP o FQDN, se considera una coincidencia.
Si no sabes qué grupos ya existen, ejecuta el siguiente comando para enumerarlos:
gcloud iap tcp dest-groups list \
--region=REGION
Administra grupos de destinos de túneles
Puedes ver los detalles de un grupo de destinos, modificarlo y quitarlo.
Console
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 destinos, haz clic en su nombre.
Para modificar un grupo de destinos, selecciónalo y, luego, haz clic en el ícono de lápiz para abrir el panel Editar grupo de destinos. También puedes borrar el grupo de destinos desde este panel.
Para quitar un grupo de destinos, selecciónalo y, luego, haz clic en el ícono de la papelera.
gcloud
Para obtener detalles sobre cómo administrar grupos de destinos con gcloud CLI, consulta los comandos de gcloud para grupos de destinos.
Cómo configurar permisos de túnel
Para crear un túnel, debes tener el permiso iap.tunnelDestGroups.accessViaIAP en el grupo de destino correspondiente. 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 al 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: 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.
Se actualizaron los comandos de IAP-TCP para admitir la tunelización basada 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
--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 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 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 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 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 claves SSH 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 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 con contraseña, debes ingresarla. Si la cuenta está protegida por un par de claves SSH privadas o públicas, debes especificarlo 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 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 copiar un archivo en 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 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, agrega 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' --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 que controle 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