En esta página se explica cómo puedes usar el reenvío de TCP de Identity-Aware Proxy (IAP) para habilitar el acceso administrativo a instancias de VM que no tienen direcciones IP externas o que no permiten el acceso directo a través de Internet.
El reenvío de TCP de IAP te permite establecer un túnel cifrado a través del cual puedes reenviar tráfico SSH, RDP y de otro tipo a instancias de VM. El reenvío de TCP de IAP también te ofrece un control detallado sobre qué usuarios pueden establecer túneles y a qué instancias de máquina virtual pueden conectarse.
Para obtener más información sobre cómo funciona el reenvío de TCP de IAP, consulta la descripción general del reenvío de TCP.
Preparar un proyecto para el reenvío de TCP de IAP
En esta sección se describen los pasos necesarios para habilitar el reenvío de TCP de IAP en tu proyecto de Google Cloud .
Crear una regla de cortafuegos
Para permitir que IAP se conecte a tus instancias de VM, crea una regla de cortafuegos que cumpla los siguientes requisitos:
- Se aplica a todas las instancias de VM a las que quieras acceder mediante IAP.
- permite el tráfico de entrada del intervalo de IP
35.235.240.0/20
. Este intervalo contiene todas las direcciones IP que usa IAP para el reenvío de TCP.En las VMs IPv6, usa el siguiente intervalo de IPs:
2600:2d00:1:7::/64
. - Permite establecer conexiones con todos los puertos a los que quieras acceder mediante el reenvío de TCP de IAP. Por ejemplo, el puerto
22
para SSH y el puerto3389
para RDP.
Consola
Para permitir el acceso RDP y SSH a todas las instancias de VM de tu red, haz lo siguiente:
- Abre la página Reglas de cortafuegos.
Abrir la página Reglas de cortafuegos
Los pasos restantes aparecen en la Google Cloud consola.
- Selecciona un Google Cloud proyecto.
Muéstrame . - En la página Reglas de cortafuegos, haz clic en
Crear regla de cortafuegos . - Configure los siguientes ajustes:
- Nombre:
allow-ingress-from-iap
- Sentido del tráfico: entrada
- Destino: Todas las instancias de la red
- Filtro de origen: intervalos de IP
- Intervalos de IPs de origen:
35.235.240.0/20
- Protocolos y puertos: selecciona TCP e introduce
22,3389
para permitir RDP y SSH.
- Nombre:
- Haz clic en Crear.
gcloud
Para permitir el acceso RDP a todas las instancias de VM de tu red, ejecuta el siguiente comando:
gcloud compute firewall-rules create allow-rdp-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:3389 \ --source-ranges=35.235.240.0/20
Para acceder por SSH, ejecuta el siguiente comando:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Para otros protocolos, ejecuta
gcloud compute firewall-rules create allow-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:PORT \ --source-ranges=35.235.240.0/20
donde PORT
es el puerto que usa el protocolo.
Asignar roles para el reenvío de TCP de IAP
Para controlar qué usuarios y grupos pueden usar el reenvío de TCP de IAP y a qué instancias de VM pueden conectarse, concede los roles de gestión de identidades y accesos (IAM) adecuados en el proyecto.
Si usas OS Login (opción recomendada), consulta Configurar roles de OS Login en cuentas de usuario.
En la siguiente tabla se muestran los roles predefinidos que debes conceder a los administradores de confianza para el reenvío de TCP y las tareas relacionadas:
Tarea | Roles | Más información |
---|---|---|
Reenvío del protocolo de control de la transmisión (TCP) |
Usuario de túneles protegidos mediante IAP (roles/iap.tunnelResourceAccessor )
|
Consulta Conceder acceso a todas las instancias de VM de un proyecto o Conceder acceso a una VM específica. |
Acceso SSH |
Administrador de instancias de Compute (v. 1) (roles/compute.instanceAdmin.v1 )
|
|
Usar una cuenta de servicio | Usuario de cuenta de servicio (roles/iam.serviceAccountUser ) |
Consulta el artículo sobre el rol serviceAccountUser. |
Si quieres crear roles personalizados con solo los permisos específicos necesarios para esta tarea, consulta Detalles de los permisos.
Puedes conceder acceso a un usuario o a un grupo a todas las instancias de VM de un proyecto o a una VM específica, en función de cómo asignes los roles necesarios.
No se admiten etiquetas
Actualmente, no se pueden conceder permisos mediante etiquetas para el reenvío de TCP de IAP.
Conceder acceso a todas las instancias de VM de un proyecto
Para dar acceso a un usuario o grupo a todas las instancias de VM de un proyecto, puedes asignar los roles de gestión de identidades y accesos necesarios a nivel de proyecto:
Consola
- Abre la página IAM y administración en la Google Cloud consola.
Abre la página IAM y administración
Los pasos restantes aparecen en la Google Cloud consola.
- En la página IAM y administración, haga clic en Añadir y configure lo siguiente:
- Nuevos principales: especifica el usuario o el grupo al que quieres conceder acceso.
- Selecciona un rol: elige Cloud IAP > Usuario de túneles protegidos mediante IAP.
- También puedes hacer clic en Añadir condición y configurar una condición:
- Título: introduce un nombre para la condición.
- Expresión: introduce una condición que debe cumplir un usuario para obtener los permisos del rol Usuario de túneles protegidos mediante IAP.
Por ejemplo, la siguiente expresión CEL solo concede acceso al puerto 22:
destination.port == 22
También puedes conceder acceso en función del nivel de acceso:
destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
Donde
FULL_ACCESS_LEVEL_NAME
es un nivel de acceso que ya existe y tiene el siguiente formato:accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
- Haz clic en Añadir otro rol y configura lo siguiente:
- Selecciona un rol: elige Compute Engine > Administrador de instancias de Compute (v1).
- Haz clic en Guardar.
gcloud
Asigna los dos roles al usuario ejecutando los siguientes comandos:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/iap.tunnelResourceAccessor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/compute.instanceAdmin.v1
Haz los cambios siguientes:
PROJECT_ID
: ID del proyectoEMAIL
: dirección de correo del usuario al que quieres conceder acceso. Por ejemplo,user@example.com
.
Conceder acceso a una VM específica
Para conceder acceso a una máquina virtual específica a un usuario o grupo, debes conceder el rol roles/iap.tunnelResourceAccessor
en esa máquina virtual. Los demás roles deben concederse en el proyecto.
Consola
- Abre la página de administración de IAP y selecciona la pestaña Recursos SSH y TCP.
Abrir la página de administración de Chrome Enterprise Premium
Los pasos restantes aparecen en la Google Cloud consola.
- En la pestaña Recursos SSH y TCP de la página de administrador de IAP, selecciona las instancias de VM que quieras configurar.
- Haz clic en Mostrar panel de información si no lo ves.
Haz clic en Añadir principal y configura lo siguiente:
- Nuevos principales: especifica el usuario o el grupo al que quieres conceder acceso.
- Selecciona un rol: elige Cloud IAP > Usuario de túneles protegidos mediante IAP.
También puedes hacer clic en Añadir condición y configurar una condición:
- Título: introduce un nombre para la condición.
- Expresión: introduce una condición que debe cumplir un usuario para obtener los permisos del rol Usuario de túneles protegidos mediante IAP.
Por ejemplo, la siguiente expresión CEL solo concede acceso al puerto 22:
destination.port == 22
También puedes conceder acceso en función del nivel de acceso:
destination.port == 22 &&
"FULL_ACCESS_LEVEL_NAME" in request.auth.access_levelsDonde
FULL_ACCESS_LEVEL_NAME
es un nivel de acceso y usa el formatoaccessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
.- Haz clic en Guardar.
API
Para editar el archivo policy.json
de tu aplicación, sigue el proceso que se indica a continuación.
Consulta Gestionar el acceso a recursos protegidos con Chrome Enterprise Premium para obtener más información sobre cómo usar la API IAM para gestionar políticas de acceso.
Exporta las siguientes variables.
export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
Obtén la política de gestión de identidades y accesos de la instancia de Compute Engine mediante el método
getIamPolicy
. El bit de datos vacío al final convierte la solicitudcurl
en POST en lugar de GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \ -d ''
Asigna el rol
iap.tunnelResourceAccessor
a tus principales modificando el archivo JSON de la política de IAM.También puedes conceder el rol solo a los principales que cumplan criterios específicos, en función de las condiciones de gestión de identidades y accesos (IAM) y los niveles de acceso.
A continuación, se muestra un ejemplo de un archivo
policy.json
editado que asigna el roliap.tunnelResourceAccessor
a un grupo de administradores de instancias de VM, lo que les da acceso a recursos de túnel protegidos con Chrome Enterprise Premium. Se ha añadido una condición de gestión de identidades y accesos para que los recursos solo sean accesibles para las cuentas principales del grupo de administradores de instancias de VM con una dirección IP privada10.0.0.1
en el puerto22
mediante las condiciones de gestión de identidades y accesosdestination.ip
ydestination.port
. También deben cumplir los requisitos del ACCESS_LEVEL_NAME nivel de acceso.Ten en cuenta que, si una entidad tiene el rol Propietario, tiene permiso para usar IAP para el reenvío de TCP.
Archivo policy.json de ejemplo{ "policy": { "bindings": [ { "role": "roles/iap.tunnelResourceAccessor", "members": ["group:instance-admins@example.com"], "condition": { "expression": "\"accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME\" in request.auth.access_levels && destination.ip == \"10.0.0.1\" && destination.port == 22", "title": "CONDITION_NAME" } } ] } }
Para buscar el nombre de una política, llama a
accessPolicies.list
:GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
Define tu nuevo archivo
policy.json
con el métodosetIamPolicy
.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \ -d @${JSON_NEW_POLICY}
Detalles de los permisos
Los permisos necesarios varían en función de cómo vaya a usar un usuario el reenvío de TCP de IAP:
Situaciones | Los permisos que requiere | |
---|---|---|
Todo |
|
|
Estás usando gcloud compute [start-iap-tunnel, ssh, scp] |
|
|
Estás usando gcloud compute [ssh, scp] |
|
|
Máquina virtual que usa OS Login | Consulta estas instrucciones. | |
No usar OS Login |
|
|
Acceder a una máquina virtual mediante SSH con una cuenta de servicio |
|
|
SSH desde el navegador | Consulta estas instrucciones. |
Por ejemplo, si un usuario quiere conectarse mediante gcloud compute ssh
a una VM que no usa OS Login, pero que usa una cuenta de servicio, el usuario necesitará los siguientes permisos:
iap.tunnelInstances.accessViaIAP
compute.instances.get
compute.instances.list
compute.projects.get
compute.instances.setMetadata
compute.projects.setCommonInstanceMetadata
compute.globalOperations.get
iam.serviceAccounts.actAs
Crear túneles para conexiones SSH
Puedes conectarte a instancias de Linux que no tengan una dirección IP externa tunelizando el tráfico SSH a través de IAP.
Cuando usas la creación de túneles de IAP, los proxies de IAP se conectan a la dirección IPv4 interna principal de nic0
en la VM.
Consola
Para conectarte a tu instancia, usa el botón SSH de la consolaGoogle Cloud . La configuración de acceso de tu instancia (definida mediante permisos de gestión de identidades y accesos) debe permitir el túnel TCP a través de IAP.
gcloud
Para conectarte a tu instancia, usa el comando gcloud compute ssh
. La configuración de acceso de tu instancia (definida mediante permisos de gestión de identidades y accesos) debe permitir el túnel TCP a través de IAP.
gcloud compute ssh INSTANCE_NAME
Sustituye INSTANCE_NAME por el nombre de la instancia a la que quieras acceder mediante SSH.
Si la instancia no tiene una dirección IP externa, la conexión usará automáticamente el túnel TCP de IAP. Si la instancia tiene una dirección IP externa, la conexión usa la dirección IP externa en lugar del túnel TCP de IAP.
Puedes usar la marca --tunnel-through-iap
para que gcloud compute ssh
siempre use el túnel TCP de IAP.
Usa la marca --internal-ip
para que gcloud compute ssh
nunca use el túnel TCP de IAP y, en su lugar, se conecte directamente a la IP interna de la VM. Esto resulta útil para los clientes que están conectados a la misma red de VPC que la VM de destino.
IAP Desktop
Puedes usar IAP Desktop para conectarte a una instancia de VM mediante SSH y el reenvío de TCP de IAP.
En la aplicación, selecciona Archivo > Añadir proyecto de Google Cloud.
Introduce el ID o el nombre de tu proyecto y haz clic en Aceptar.
En la ventana Explorador de proyectos, haz clic con el botón derecho en la instancia de VM a la que quieras conectarte y selecciona Conectar.
Para obtener más información sobre IAP Desktop, consulta la página del proyecto en GitHub.
Aplicación PuTTY
Puedes configurar la aplicación del emulador de terminal PuTTY para Windows de forma que use el reenvío de TCP de IAP para conectarse a una instancia de VM. La configuración de acceso de tu instancia (definida mediante permisos de gestión de identidades y accesos) debe permitir el túnel TCP a través de IAP.
Antes de configurar la aplicación PuTTY, usa el comando gcloud compute ssh
una vez para asegurarte de que tienes una clave SSH privada en tu ordenador local y de que tu clave SSH pública se ha publicado en Compute Engine:
Abre una petición de comando y ejecuta el siguiente comando para conectarte a la instancia de VM:
gcloud compute ssh INSTANCE_NAME ` --tunnel-through-iap ` --project PROJECT_ID ` --zone ZONE
Haz los cambios siguientes:
- INSTANCE_NAME: nombre de la instancia a la que conectarse
- PROJECT_ID: ID del proyecto en el que se encuentra la instancia de VM
- ZONE: zona en la que se encuentra la instancia de VM
Si es necesario, confirma que quieres generar claves SSH pulsando
Y
.En la VM, determina tu nombre de usuario ejecutando el siguiente comando:
whoami
Necesitarás este nombre de usuario más adelante.
Ahora puedes configurar la aplicación PuTTY para usar el reenvío de TCP de IAP:
- Abre la aplicación PuTTY y selecciona la categoría Connection (Conexión) > Proxy (Proxy).
Configure los siguientes ajustes de proxy:
- En Tipo de proxy, selecciona Local.
En el campo Comando Telnet o comando de proxy local, introduce lo siguiente:
gcloud.cmd compute start-iap-tunnel %host %port --listen-on-stdin --project PROJECT_ID --zone ZONE
Haz los cambios siguientes:
- PROJECT_ID: ID del proyecto en el que se encuentra la instancia de VM
- ZONE: zona en la que se encuentra la instancia de VM
En Imprimir diagnósticos de proxy en la ventana de terminal, selecciona Solo hasta que empiece la sesión.
Selecciona la categoría Conexión > SSH > Autenticación.
Haz clic en Examinar, pega el siguiente nombre de archivo y haz clic en Abrir:
%USERPROFILE%\.ssh\google_compute_engine.ppk
Selecciona la categoría Sesión.
Configure los siguientes ajustes de proxy:
En el campo Nombre de host (o dirección IP), introduce lo siguiente:
USERNAME@INSTANCE_NAME
Haz los cambios siguientes:
- USERNAME: el nombre de usuario de Linux que has determinado antes
- INSTANCE_NAME: el nombre de la instancia de VM a la que quieres conectarte
Sesiones guardadas: escribe el nombre de la sesión.
Haz clic en Guardar.
Haz clic en Abrir para iniciar la sesión SSH.
ssh
Puedes usar directamente el comando ssh con una opción ProxyCommand
que utilice gcloud
para iniciar el túnel. Úsalo para generar el comando ssh
completo:
gcloud compute ssh INSTANCE_NAME --dry-run
Creación de túneles para conexiones RDP
Puedes conectarte a instancias de Windows que no tengan una dirección IP externa redirigiendo el tráfico RDP a través de IAP:
IAP Desktop
Puedes usar IAP Desktop para conectarte al Escritorio remoto de una o varias instancias de VM mediante el reenvío de TCP de IAP.
En la aplicación, selecciona Archivo > Añadir proyecto de Google Cloud.
Introduce el ID o el nombre de tu proyecto y haz clic en Aceptar.
En la ventana Explorador de proyectos, haz clic con el botón derecho en la instancia de VM a la que quieras conectarte y selecciona Conectar.
Para obtener más información sobre IAP Desktop, consulta la página del proyecto en GitHub.
gcloud
Para conectarte al Escritorio remoto de una instancia de VM, primero debes crear un túnel.
Usa el comando
gcloud compute start-iap-tunnel
para crear un túnel cifrado al puerto RDP de la instancia de VM.gcloud compute start-iap-tunnel INSTANCE_NAME 3389 \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Sustituye INSTANCE_NAME por el nombre de la instancia de VM a la que quieras conectarte. Sustituye LOCAL_PORT por el puerto localhost en el que quieras que se enlace el proxy o usa 0 para que se seleccione automáticamente uno que no se esté usando. Sustituye ZONE por la zona en la que se encuentra la instancia de VM.
gcloud
realiza una prueba de conectividad con la instancia de VM, abre un túnel y muestra un número de puerto.Listening on port [LOCAL_PORT].
Todo el tráfico enviado a localhost:LOCAL_PORT se reenvía a la instancia de VM. Solo pueden acceder al puerto las aplicaciones que se ejecuten en tu ordenador local.
Deja
gcloud
en ejecución y abre la aplicación Conexión a Escritorio remoto de Microsoft Windows.Introduce el endpoint del túnel como nombre del ordenador:
localhost:LOCAL_PORT
Sustituye LOCAL_PORT por el número de puerto que se muestra cuando
gcloud
abre el túnel.Haz clic en Conectar.
Crear túneles para otras conexiones TCP
Puedes usar el reenvío de TCP de IAP para otros protocolos basados en TCP con el comando gcloud compute start-iap-tunnel
para asignar un puerto local. El puerto local canaliza el tráfico de datos desde el equipo local al equipo remoto en un flujo HTTPS. IAP recibe los datos, aplica los controles de acceso y reenvía los datos sin envolver al puerto remoto. Por el contrario, los datos del puerto remoto también se encapsulan antes de enviarse al puerto local, donde se desencapsulan.
gcloud
Crea un túnel cifrado a un puerto de la instancia de VM:
gcloud compute start-iap-tunnel INSTANCE_NAME INSTANCE_PORT \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Sustituye INSTANCE_NAME y INSTANCE_PORT por el nombre y el puerto de la instancia de VM a la que quieras conectarte. Sustituye LOCAL_PORT por el puerto localhost en el que quieras que se enlace el proxy. Sustituye ZONE por la zona en la que se encuentra la instancia de VM.
gcloud
realiza una prueba de conectividad con la instancia de VM, abre un túnel y muestra un número de puerto.
Listening on port [LOCAL_PORT].
Todo el tráfico enviado a localhost:LOCAL_PORT se reenvía a la instancia de VM. Solo pueden acceder al puerto las aplicaciones que se ejecutan en tu ordenador local.
Aumentar el ancho de banda de subida de TCP de IAP
Para aumentar el ancho de banda de subida de TCP de IAP, instala NumPy en la misma máquina en la que esté instalada la interfaz de línea de comandos de gcloud.
Linux
Para instalar NumPy con pip en plataformas Unix, ejecuta el siguiente comando en una nueva instancia de terminal:
$(gcloud info --format="value(basic.python_location)") -m pip install numpy
Si el mensaje de error persiste después de instalar NumPy, completa el siguiente paso: Ejecuta el siguiente comando para permitir que gcloud acceda a paquetes externos:
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Windows
Para instalar NumPy con pip en plataformas Windows, ejecuta el siguiente comando en una nueva instancia de PowerShell:
start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"
Si el mensaje sigue apareciendo después de instalar NumPy, es necesario realizar otro paso. Ejecuta el siguiente comando para permitir que gcloud acceda a paquetes externos:
$env:CLOUDSDK_PYTHON_SITEPACKAGES="1"
Limitaciones conocidas
Ancho de banda: la función de reenvío de TCP de IAP no está diseñada para transferir datos en bloque. IAP se reserva el derecho de limitar la frecuencia de los usuarios que abusen de este servicio.
Duración de la conexión: IAP desconecta automáticamente las sesiones tras una hora de inactividad. Actualmente, gcloud compute start-iap-tunnel
intenta restablecer el túnel si se desconecta.
Pasos siguientes
- Define reglas de contexto más efectivas aplicando niveles de acceso.
- Para ver las solicitudes de acceso, habilita los registros de auditoría de Cloud.
- Consulta más información sobre IAP.