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 el caso de 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
22para SSH y el puerto3389para 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.
- 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
3389,22para permitir tanto RDP como 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 concedas 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, debes 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:
- Nuevas entidades principales: especifica el usuario o el grupo al que quieras conceder acceso.
- Selecciona un rol: 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 - 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 un usuario o grupo a una VM específica, debes concederle el rol roles/iap.tunnelResourceAccessor en esa VM. 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 IAP
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:
- Nuevas entidades principales: especifica el usuario o el grupo al que quieras conceder acceso.
- Selecciona un rol: 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 == 22Tambié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_NAMEes un nivel de acceso que ya existe y tiene el siguiente formato:accessPolicies/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 por IAP 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 solicitudcurlen 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.tunnelResourceAccessora tus principales modificando el archivo JSON de la política de IAM.Opcionalmente, 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.jsoneditado que asigna el roliap.tunnelResourceAccessora un grupo de administradores de instancias de VM, lo que les da acceso a recursos de túnel protegidos por IAP. Se ha añadido una condición de gestión de identidades y accesos (IAM) 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.1en el puerto22mediante las condiciones de IAMdestination.ipydestination.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.jsoncon 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.accessViaIAPcompute.instances.getcompute.instances.listcompute.projects.getcompute.instances.setMetadatacompute.projects.setCommonInstanceMetadatacompute.globalOperations.getiam.serviceAccounts.actAs
Creación de túneles para conexiones SSH
Puedes conectarte a instancias de Linux que no tengan una dirección IP externa redirigiendo 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 es ú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.