En esta página, se describe cómo usar SSH para conectarse a los servicios de Cloud Run a través del reenvío de TCP de Identity-Aware Proxy (IAP).
Si proteges tus conexiones SSH con IAP, puedes depurar instancias de contenedores individuales en un entorno seguro.
Antes de comenzar
- Asegúrate de que tu servicio de Cloud Run se ejecute en un entorno de ejecución de segunda generación y que incluya las herramientas de depuración que necesites para ejecutar comandos una vez que te conectes. Para obtener más información, consulta entornos de ejecución.
Para asegurarte de que usas la versión más reciente de Google Cloud CLI, ejecuta el siguiente comando:
gcloud components updateHabilita las APIs de Cloud Run, Cloud Resource Manager, Cloud OS Login y Identity-Aware Proxy en tu proyecto.
Para habilitar las APIs, ejecuta el siguiente comando:
gcloud services enable \ cloudresourcemanager.googleapis.com \ oslogin.googleapis.com \ iap.googleapis.com \ run.googleapis.com
Roles obligatorios
Para obtener los permisos que necesitas para configurar políticas y conectarte a cargas de trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Configura las políticas:
- Administrador de políticas de IAP (
roles/iap.admin) en el proyecto - Administrador de Cloud Run (
roles/run.admin) en el proyecto
- Administrador de políticas de IAP (
-
Conéctate a las cargas de trabajo:
- Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio - SSH para Cloud Run en modo raíz (
roles/run.sshRoot) en el servicio - Visualizador de Cloud Run (
roles/run.viewer) en el servicio - Usuario de túnel protegido con IAP (
roles/iap.tunnelResourceAccessor) en el servicio - Desarrollador de Cloud Run (
roles/run.developer) en el servicio - Descriptor de acceso de vista de registros (
roles/logging.viewAccessor) en el proyecto - Navegador (
roles/browser) en el proyecto - Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer) en el proyecto
- Usuario de la cuenta de servicio (
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Limitaciones
SSH para Cloud Run tiene las siguientes limitaciones:
- Solo se admiten los servicios y las instancias de Cloud Run.
- En el caso de los servicios, solo se admite el entorno de ejecución de segunda generación.
- No se admiten los trabajos de Cloud Run.
- No se admiten los grupos de trabajadores.
- Cuando se usa SSH, se reemplazan las claves de host en la imagen. Las claves permanecen sobrescritas después de que finaliza la sesión de SSH, hasta que se reinicia el servicio.
- Windows: No se admite PuTTY. Usa el cliente de OpenSSH.
Configura políticas de autorización de IAP
Puedes administrar el acceso a los recursos de Cloud Run a nivel del proyecto, la región o el servicio con gcloud CLI o la API de REST de IAP.
Puedes configurar políticas para los siguientes identificadores de la API de Cloud Identity:
- Cloud Identity: Por ejemplo,
user:EMAIL@example.com - Federación de identidades de personal: Por ejemplo:
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
Para obtener más información y ejemplos de tipos de principales, consulta la lista de identificadores de principales.
Actualiza un servicio existente de Cloud Run
Para actualizar el servicio y habilitar SSH, ejecuta el siguiente comando:
gcloud beta run services update \
SERVICE_NAME \
--ssh
Reemplaza SERVICE_NAME por el nombre de tu servicio de Cloud Run. Puedes implementar un servicio de Cloud Run agregando --ssh a gcloud beta run deploy.
Otorga acceso a todos los recursos de Cloud Run en un proyecto
Para administrar el acceso a todos los recursos de un proyecto, aplica la vinculación de políticas de IAM a nivel del proyecto.
gcloud
Ejecuta el comando siguiente:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run
Reemplaza USER por el identificador principal del usuario, por ejemplo, user:user@example.com o la principal de la federación de identidades de personal.
API de REST
Envía una solicitud POST al extremo de la política del proyecto:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun:setIamPolicy"
Reemplaza lo siguiente:
USER: Es el identificador principal del usuario.PROJECT_NUMBER: Es el número del proyecto Google Clouden el que se alojan los recursos.
Otorga acceso a todos los recursos de Cloud Run en una ubicación específica
Para restringir el acceso a todos los recursos dentro de una región específica (por ejemplo, us-central1), aplica la vinculación de políticas a nivel de la ubicación.
gcloud
Ejecuta el siguiente comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--region=LOCATION
Reemplaza lo siguiente:
USER: Es el identificador principal del usuario.LOCATION: La región Google Cloud en la que se implementan los recursos (por ejemplo,us-central1).
API de REST
Envía una solicitud POST al extremo de la política de ubicación:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION:setIamPolicy"
Reemplaza lo siguiente:
USER: Es el identificador principal del usuario.PROJECT_NUMBER: El número del proyecto Google CloudLOCATION: La Google Cloud región
Otorga acceso a un servicio específico de Cloud Run
Para restringir el acceso a un solo servicio con nombre en tu proyecto, aplica la vinculación de políticas a nivel del servicio.
gcloud
Ejecuta el siguiente comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--service=SERVICE_NAME \
--region=LOCATION
Reemplaza lo siguiente:
USER: Es el identificador principal del usuario.SERVICE_NAME: Es el nombre de la lógica de servicio a la que se conectará.LOCATION: Es la Google Cloud región en la que se implementa el servicio.
API de REST
Envía una solicitud POST al extremo de la política de servicio:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION/services/\
SERVICE_NAME:setIamPolicy"
Reemplaza lo siguiente:
USER: Es el identificador principal del usuario.PROJECT_NUMBER: El número del proyecto Google CloudLOCATION: La Google Cloud regiónSERVICE_NAME: el nombre del servicio
Conectarse mediante SSH
Para establecer un túnel SSH a un recurso de Cloud Run, debes usar la CLI de gcloud.
Conéctate a un servicio
Ejecuta el comando siguiente:
gcloud beta run services ssh SERVICE_NAME \
--region=LOCATION \
--project=PROJECT_ID
Reemplaza lo siguiente:
SERVICE_NAME: el nombre del servicio al que se conectaráLOCATION: La Google Cloud región en la que reside el servicioPROJECT_ID: Es el ID de tu proyecto de Google Cloud.
Cómo salir de la sesión
Para finalizar la sesión de SSH, escribe exit.
Las modificaciones que realices en el contenedor solo persistirán mientras el contenedor se mantenga activo. Salir de tu sesión no detiene ni reinicia el contenedor automáticamente.
Usa un cliente OpenSSH local
Para usar un cliente de OpenSSH local para las conexiones, haz lo siguiente:
Para iniciar el túnel SSH y generar el certificado necesario, ejecuta el siguiente comando:
gcloud beta run services ssh SERVICE_NAME \ --region=LOCATION \ --project=PROJECT_IDReemplaza lo siguiente:
SERVICE_NAME: el nombre del servicioLOCATION: La Google Cloud regiónPROJECT_ID: ID de tu proyecto de Google Cloud
Agrega el siguiente código de configuración a tu archivo
~/.ssh/configlocal:Host cloud-run-ssh HostName cloud-run-default User root IdentityFile ~/.ssh/google_compute_engine CertificateFile ~/.ssh/google_compute_engine_cert/PROJECT_ID_LOCATION_SERVICE_NAME-cert.pub CheckHostIP no HashKnownHosts no HostKeyAlias cloud-run-default IdentitiesOnly yes StrictHostKeyChecking no UserKnownHostsFile /dev/null ProxyUseFdpass no ProxyCommand /usr/local/bin/python3 -S ~/google-cloud-sdk/lib/gcloud.py beta run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE_NAME --region=LOCATIONSi la ruta de instalación de
gcloudes diferente, actualiza el prefijo en la ruta deProxyCommand.Reemplaza lo siguiente:
PROJECT_ID: ID del proyecto de Google CloudLOCATION: La Google Cloud regiónSERVICE_NAME: el nombre del servicioPROJECT_NUMBER: Es el número de tu proyecto de Google Cloud .
Conéctate al servicio con OpenSSH:
ssh cloud-run-ssh