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 contenedor individuales en un entorno seguro.
Antes de comenzar
Asegúrate de que el servicio de Cloud Run se ejecute en un entorno de ejecución de segunda generación y de que incluya las herramientas de depuración que necesitas para ejecutar comandos una vez que te conectes. Para obtener más información, consulta entornos de ejecución.
Para asegurarte de usar 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, Acceso al SO de Cloud 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 las 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 - Acceso raíz de SSH para Cloud Run (
roles/run.sshRoot) 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 instancias y servicios de Cloud Run.
Para 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 de la imagen. Las claves permanecen reemplazadas después de que finaliza la sesión de SSH, hasta que se reinicia el servicio.
Windows: PuTTY no es compatible. Usa el cliente de OpenSSH.
Configura las políticas de autorización de IAP
Puedes administrar el acceso a los recursos de Cloud Run a nivel de proyecto, región o 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.comFederació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 de Cloud Run existente
Para actualizar el servicio y habilitar SSH, ejecuta el siguiente comando:
gcloud beta run services update \
SERVICE_NAME \
--region=LOCATION \
--ssh
Reemplaza lo siguiente:
SERVICE_NAME: El nombre de tu servicio de Cloud Run.LOCATION: Es la región de Google Cloud en la que se implementa el servicio (por ejemplo,us-central1).
También 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 la política 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 de Google Cloud en 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 la política 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: Es la región de 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 de Google CloudLOCATION: La región Google Cloud
Otorga acceso a un servicio de Cloud Run específico
Para restringir el acceso a un solo servicio con nombre en tu proyecto, aplica la vinculación de la política 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 te conectarás.LOCATION: Es la región de Google Cloud 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 de Google CloudLOCATION: La región Google CloudSERVICE_NAME: Es 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: Es la región de Google Cloud en la que reside el servicio.PROJECT_ID: Es el ID de tu proyecto de Google Cloud.
Sal de la sesión.
Para finalizar la sesión de SSH, escribe exit.
Cualquier modificación que realices en el contenedor persistirá solo mientras este se mantenga activo. Salir de la sesión no detiene ni reinicia el contenedor automáticamente.
Usa un cliente de 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: Es el nombre del servicio.LOCATION: La región Google CloudPROJECT_ID: Es el ID del 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_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/revisions/REVISION --region=LOCATION --iap-tunnel-url-override=wss://LOCATION.ssh.run.app/v4Si la ruta de instalación de
gcloudes diferente, actualiza el prefijo en la ruta de acceso deProxyCommand.Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .LOCATION: La región Google CloudSERVICE_NAME: Es el nombre del servicio.REVISION: el nombre de la revisiónPROJECT_NUMBER: Es el número del proyecto de Google Cloud .
Conéctate al servicio con OpenSSH:
ssh cloud-run-ssh