SSH te permite establecer una conexión de shell interactiva y segura con tus instancias de contenedor en ejecución. Esto proporciona acceso directo al sistema de archivos y al entorno de ejecución del contenedor, lo que te permite inspeccionar los recursos del sistema, verificar las configuraciones y solucionar problemas.
SSH para Cloud Run agrega automáticamente los archivos binarios sshd necesarios al sistema de archivos de tu contenedor. Solo se puede acceder a estos archivos binarios durante la sesión de SSH y se quitan cuando finaliza la sesión. Cloud Run SSH ignora las configuraciones de SSH existentes, incluidas las entradas /etc/passwd, en favor de las configuraciones administradas por Google.
Los avisos de derechos de autor de código abierto de terceros para las dependencias de SSH administradas por Google se activan dentro de tu contenedor cuando se establece una sesión de SSH en la siguiente ruta de acceso: /usr/share/licenses/google_ssh/THIRD_PARTY_NOTICES.
Limitaciones
Se aplican las siguientes limitaciones a SSH:
- SSH solo está disponible para los servicios que se ejecutan en el entorno de segunda generación de Cloud Run y las instancias de Cloud Run.
- 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 la instancia del servicio.
- Windows: PuTTY no es compatible. Usa el cliente de OpenSSH.
- Se debe tener especial cuidado para proteger el contenedor cuando se usa SSH. Ten en cuenta las prácticas recomendadas de seguridad, como ejecutar el código de la aplicación como un usuario no raíz.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Habilita la API de Cloud Run Admin, Cloud Resource Manager, Identity-Aware Proxy y Cloud OS Login:
gcloud services enable run.googleapis.com \ iap.googleapis.com \ oslogin.googleapis.com
- Instala e inicializa gcloud CLI.
-
Actualiza los componentes, como se indica a continuación:
gcloud components update
-
Windows: Asegúrate de que el cliente de OpenSSH esté instalado.
Por lo general, el cliente de OpenSSH se instala de forma predeterminada en Windows 10 y versiones posteriores. Si no está instalado, puedes instalarlo ejecutando el siguiente comando en PowerShell como administrador:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Para obtener más información, consulta Instala OpenSSH.
- Revisa la página de precios de Cloud Run. Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. SSH factura los bytes de salida de red.
-
Si tu proyecto usa Controles del servicio de VPC (VPC-SC), ten en cuenta que el proceso de tunelización verifica
iaptunnel.googleapis.comcomo el nombre del servicio, en lugar derun.googleapis.com.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar estos pasos, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- 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 - Administrador de políticas de IAP (
roles/iap.admin) en el proyecto para las operaciones de administración de IAP
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 a través de roles personalizados o cualquier otro rol predefinido.
Si no eres miembro de la organización a la que pertenece el proyecto, Cloud Run bloqueará el acceso SSH. Para obtener acceso por SSH, agrega el rol roles/compute.osLoginExternalUser o usa un rol personalizado con el permiso compute.oslogin.updateExternalUser.
Puedes otorgar el rol de usuario de túnel protegido con IAP a nivel del proyecto. Para restringir este rol a un servicio o instancia específicos de Cloud Run, ejecuta el siguiente comando:
Para un servicio específico
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--service=SERVICE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Reemplaza lo siguiente:
SERVICE: El nombre de tu servicio.REGION: Es la región en la que se implementa tu servicio.MEMBER: Es la identidad a la que se otorgará acceso.
Para una instancia específica
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--instance=INSTANCE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Reemplaza lo siguiente:
INSTANCE: el nombre de tu instanciaREGION: Es la región en la que se implementa tu servicio.MEMBER: Es la identidad a la que se otorgará acceso.
Para otorgar el permiso roles/iap.tunnelResourceAccessor a nivel del proyecto y la región, consulta Configura políticas de acceso de IAP.
Usa SSH con los servicios de Cloud Run
Configura el acceso SSH a nivel de servicio y conéctate al servicio con SSH.
Configura el acceso SSH a nivel de servicio
Puedes permitir el acceso de inspección en un servicio específico con gcloud CLI o YAML:
gcloud
Para habilitar el acceso en un servicio existente, usa el siguiente comando:
gcloud beta run services update SERVICE --ssh
También puedes permitir el acceso de inspección a un servicio con la marca --ssh cuando implementes el servicio.
YAML
Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:
gcloud run services describe SERVICE --format export > service.yaml
El siguiente ejemplo contiene la configuración de YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLReemplaza lo siguiente:
SERVICE: El nombre de tu servicio de Cloud Run.REGION: La región Google Cloud , por ejemplo,us-central1IMAGE_URL: Es una referencia a la imagen del contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
El comando
gcloud run services replaceusa de forma predeterminada el archivoservice.yamlsi está presente.
Puedes inhabilitar el acceso por SSH para cada servicio con gcloud CLI o YAML:
gcloud
Para inhabilitar el acceso al servicio, usa el siguiente comando:
gcloud beta run services update SERVICE --no-ssh
YAML
Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:
gcloud run services describe SERVICE --format export > service.yaml
El siguiente ejemplo contiene la configuración de YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLReemplaza lo siguiente:
SERVICE: El nombre de tu servicio de Cloud Run.REGION: La región Google Cloud , por ejemplo,us-central1IMAGE_URL: Es una referencia a la imagen del contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
El comando
gcloud run services replaceusa de forma predeterminada el archivoservice.yamlsi está presente.
Conéctate al servicio con SSH
Para conectarte a un servicio con SSH, usa gcloud CLI:
Para conectarte a un servicio con SSH, usa el siguiente comando de Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID
Reemplaza lo siguiente:
SERVICE: El nombre de tu servicio.REGION: Es la región en la que se implementa tu servicio.PROJECT_ID: Es el ID del proyecto de Google Cloud .Si se te solicita que ingreses una frase de contraseña para la clave SSH, puedes dejarla en blanco. Sin embargo, si ingresas una frase de contraseña, asegúrate de usar la misma para las sesiones de SSH posteriores desde el mismo espacio de trabajo.
Cuando la sesión de SSH se completa correctamente, Cloud Run muestra el siguiente mensaje:
Project: my-project Region:REGIONService: busybox Revision: busybox-REVISION Instance: INSTANCE-ID Container: busybox-1 Image: IMAGEPara finalizar la sesión de SSH, escribe
exit. Los cambios que realices en el contenedor persistirán mientras el contenedor esté activo. Salir de la sesión no reinicia ni detiene el contenedor.
Especifica una instancia de servicio
Para conectarte a una instancia de servicio específica con SSH, usa Google Cloud CLI.
Para conectarte a una instancia de servicio de Cloud Run con SSH, usa el siguiente comando de Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --instance=INSTANCE_ID
Reemplaza lo siguiente:
SERVICE: El nombre de tu servicio.REGION: Es la región en la que se implementa tu servicio.PROJECT_ID: Es el ID del proyecto de Google Cloud .INSTANCE_ID: El ID de la instancia. Para encontrar el ID de la instancia de servicio, ve a la página Registros en la sección Observabilidad. El ID de instancia se encuentra en el campolabelsde una entrada de registro. No podrás encontrar el ID de la instancia si la finalizas antes de conectarte a ella.
Cómo especificar una revisión
Para conectarte a una revisión específica con SSH, usa Google Cloud CLI.
Para conectarte a una revisión del servicio de Cloud Run con SSH, usa el siguiente comando de Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --revision=REVISION
Reemplaza lo siguiente:
SERVICE: El nombre de tu servicio.REGION: Es la región en la que se implementa tu servicio.PROJECT_ID: Es el ID del proyecto de Google Cloud .REVISION: Es el nombre de la revisión.
Usa SSH con instancias de Cloud Run
Configurar el acceso SSH a nivel de la instancia y conectarse a ella con SSH
Configura el acceso SSH a nivel de la instancia
SSH está habilitado de forma predeterminada para las instancias.
Puedes inhabilitar el acceso por SSH en cada instancia con gcloud CLI o YAML:
gcloud
Para inhabilitar el acceso en la instancia, usa el siguiente comando:
gcloud beta run instances update INSTANCE --no-ssh
YAML
Si creas una instancia nueva, omite este paso. Si actualizas una instancia existente, descarga su configuración de YAML:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
El siguiente ejemplo contiene la configuración de YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLReemplaza lo siguiente:
INSTANCE: Es el nombre de tu instancia de Cloud Run.REGION: La región Google Cloud , por ejemplo,us-central1IMAGE_URL: Es una referencia a la imagen del contenedor, comous-docker.pkg.dev/cloudrun/container/hello:latest.
Crea o actualiza la instancia con el siguiente comando:
gcloud beta run instances replace instance.yaml
Puedes permitir el acceso de inspección en una instancia específica con gcloud CLI o YAML.
gcloud
Para habilitar el acceso en una instancia existente, usa el siguiente comando:
gcloud beta run instances update INSTANCE --ssh
También puedes permitir el acceso de inspección en una instancia con la marca --ssh cuando implementas la instancia.
YAML
Si creas una instancia nueva, omite este paso. Si actualizas una instancia existente, descarga su configuración de YAML:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
El siguiente ejemplo contiene la configuración de YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLReemplaza lo siguiente:
INSTANCE: Es el nombre de tu instancia de Cloud Run.REGION: La región Google Cloud , por ejemplo,us-central1IMAGE_URL: Es una referencia a la imagen del contenedor, comous-docker.pkg.dev/cloudrun/container/hello:latest.
Crea o actualiza la instancia con el siguiente comando:
gcloud beta run instances replace instance.yaml
Conéctate a la instancia con SSH
Para conectarte a una instancia con SSH, usa el siguiente comando de Google Cloud CLI:
gcloud beta run instances ssh INSTANCE --region=REGION --project=PROJECT_ID
Reemplaza lo siguiente:
INSTANCE: el nombre de tu instanciaREGION: Es la región en la que se implementa tu servicio.PROJECT_ID: Es el ID del proyecto de Google Cloud .
Si se te solicita que ingreses una frase de contraseña para la clave SSH, puedes dejarla en blanco. Sin embargo, si ingresas una frase de contraseña, asegúrate de usar la misma para las sesiones de SSH posteriores desde el mismo espacio de trabajo.
Cuando la sesión de SSH se completa correctamente, Cloud Run muestra el siguiente mensaje:
Project: my-project
Region: REGION
Instance: INSTANCE
Revision: REVISION
Container: CONTAINER
Image: IMAGE
Para finalizar la sesión de SSH, escribe exit.
Usa el cliente de OpenSSH para conectarte
Para usar tu cliente de OpenSSH para conectarte, haz lo siguiente:
- Ejecuta el comando
gcloud beta run services sshen el servicio de destino. - Inicia el túnel SSH y genera el certificado.
Agrega lo siguiente a tu configuración de SSH:
Host cloud-run-ssh HostName cloud-run-default User root IdentityFile /Users/USER/.ssh/google_compute_engine CertificateFile /Users/USER/.ssh/google_compute_engine_cert/PROJECT_ID_REGION_SERVICE-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 /Users/USER/google-cloud-sdk/lib/gcloud.py alpha run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE --region=REGIONReemplaza lo siguiente:
USER: Es el nombre de usuario en tu máquina local.PROJECT_ID: Es el ID del proyecto de Google Cloud .PROJECT_NUMBER: Es el número del proyecto de Google Cloud .REGION: Es la región en la que se implementa tu servicio.SERVICE: El nombre de tu servicio.
Si la gcloud CLI está instalada en otra carpeta, es posible que debas actualizar la ubicación en la última línea.
Ejecuta el comando siguiente:
ssh cloud-run-ssh
Tu certificado SSH vence después de cinco minutos. Si intentas establecer una conexión SSH con tu servicio después de cinco minutos, debes volver a ejecutar gcloud beta run services ssh para volver a generar el certificado.
Registros de acceso SSH
Para capturar los registros de auditoría de la administración de claves SSH, debes habilitar los registros de auditoría de la API de Acceso al SO. Consulta Ver los registros de auditoría de Acceso al SO. Para acceder a los registros de SSH de los recursos de Cloud Run, debes tener acceso a los Registros de auditoría de Cloud de ese proyecto.
En el siguiente ejemplo, se consultan todos los servicios de Cloud Run del último día:
gcloud logging read '
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
protoPayload.serviceName="oslogin.googleapis.com" AND
protoPayload.request.instance:"run.googleapis.com"
' --project=PROJECT_ID \
--freshness=1d \
--format="table(timestamp, protoPayload.authenticationInfo.principalSubject:label=USER, protoPayload.request.instance:label=CLOUD_RUN_SERVICE)"
Acceso SSH seguro y controlado
Puedes controlar quién puede usar SSH y cómo se restringe en tu entorno.
Inhabilita el acceso SSH con políticas de la organización
Para establecer una política de la organización que inhabilite SSH, usa la restricción personalizada que limita la habilitación del acceso de depuración de SSH en los servicios de Cloud Run.
¿Qué sigue?
- Obtén más información para solucionar problemas de Cloud Run.
- Obtén más información para solucionar problemas de los servicios de Cloud Run.
- Obtén información sobre los problemas conocidos en Cloud Run.