1. Introducción
Las instancias de notebooks administrados por el usuario de Vertex AI Workbench te permiten crear y administrar instancias de máquinas virtuales (VM) de aprendizaje profundo que vienen empaquetadas con JupyterLab.
Las instancias de notebooks administradas por el usuario tienen un conjunto preinstalado de paquetes de aprendizaje profundo, incluida la asistencia para los marcos de trabajo de TensorFlow y PyTorch. Puedes configurar instancias solo para CPU o instancias habilitadas para GPU.
Qué compilarás
En este instructivo, se describe el proceso para implementar un notebook seguro administrado por el usuario según las prácticas recomendadas de Herramientas de redes y seguridad. Sigue estos pasos:
- Crea una VPC
- Crea un Cloud Router y Cloud NAT
- Configura la instancia del notebook con los parámetros de seguridad adecuados
En este instructivo, se proporcionan instrucciones detalladas para cada paso. También incluye sugerencias y prácticas recomendadas para proteger los notebooks administrados por el usuario. En la figura 1, se ilustra la implementación con una VPC independiente.
Figura 1

Qué aprenderás
- Cómo determinar si una VPC compartida o independiente es adecuada para tu organización
- Cómo crear una VPC independiente
- Cómo crear un Cloud Router y Cloud NAT
- Cómo crear un notebook administrado por el usuario
- Cómo acceder a un notebook administrado por el usuario
- Cómo supervisar el estado de un notebook administrado por el usuario
- Cómo crear y aplicar una programación de instancias
Requisitos
- Proyecto de Google Cloud
Permisos de IAM
- Administrador de red de Compute
- Administrador de seguridad de Compute
- Administrador de instancias de Compute
- Administrador de notebooks
- Administrador de almacenamiento
- Administrador de IAM de proyecto
- Administrador de cuenta de servicio
- Service Account User
- Visualizador de objetos de Storage (se aplica a la cuenta de servicio)
- Usuario de Vertex AI (se aplica a la cuenta de servicio)
2. Red de VPC
Una red de VPC se asemeja a una red física, con la excepción de que está virtualizada dentro de Google Cloud. Una red de VPC es un recurso global que consta de subredes regionales. Las redes de VPC están aisladas de forma lógica unas de otras dentro de Google Cloud.
VPC independiente
La Figura 2 muestra un ejemplo de una VPC global independiente que consta de una subred regional (us-central1), además de Cloud Router y Cloud NAT, que se usan para permitir que el notebook administrado por el usuario establezca conectividad a Internet de forma segura.
Figura 2

VPC compartida
La VPC compartida te permite exportar subredes desde una red de VPC en un proyecto host a proyectos de servicio en la misma organización. El proyecto host contiene recursos de redes que se comparten con el proyecto de servicio, como subredes, Cloud NAT y reglas de firewall. El proyecto de servicio contiene recursos a nivel de la aplicación que aprovechan los recursos de redes en el proyecto host.
En la figura 3, se ilustra una VPC compartida global, en la que la infraestructura de redes y seguridad se implementa en el proyecto host, mientras que las cargas de trabajo se implementan en el proyecto de servicio.
Figura 3

VPC independiente y compartida
Una sola red de VPC es suficiente para muchos casos de uso simples, ya que es más fácil de crear, mantener y comprender que las alternativas más complejas. La VPC compartida es una herramienta eficaz para las organizaciones con varios equipos, ya que les permite extender la simplicidad arquitectónica de una sola red de VPC entre varios grupos de trabajo a través del uso de proyectos de servicio.
Práctica recomendada de VPC que se usa en el instructivo
- Habilita Cloud NAT para acceder al notebook.
- Activa el Acceso privado a Google cuando crees subredes.
- Crea reglas de firewall prescriptivas para reducir el tráfico no solicitado, p. ej., no uses 0.0.0.0/0 tcp, sino que define las direcciones IP exactas de las subredes o los hosts.
- Aprovecha las políticas de firewall para ampliar el alcance de las reglas de entrada, p. ej., ubicaciones geográficas, listas de inteligencia contra amenazas, nombres de dominio de origen, etcétera.
3. Prácticas recomendadas para notebooks
Redimensiona tus instancias
- Detén o borra las instancias que no se usen
- Usa una instancia inicial más pequeña y realiza iteraciones con datos de muestra más pequeños
- Aumenta la escala de las instancias según sea necesario
- Experimenta con conjuntos de datos más pequeños
Selecciona los tipos de máquinas adecuados
- VMs optimizadas para costos
- Utilizar mejor los recursos de hardware para reducir los costos
- Hasta un 31% de ahorro en comparación con N1
- Ahorros adicionales (del 20% al 50%) por compromisos de 1 o 3 años
- Aumentar el tamaño de la máquina o agregar GPUs puede ayudar a mejorar el rendimiento y a superar los errores de limitaciones de memoria.
Programa el cierre de tus instancias
- Desactiva las instancias cuando estén inactivas (paga solo por el almacenamiento en disco)
- Programar instancias de VM de notebooks para que se apaguen y se inicien automáticamente a horas específicas
Supervisa el estado del notebook
- Las instancias de notebooks administrados por el usuario tienen una herramienta de diagnóstico integrada que puede ayudarte a supervisar el estado de tus instancias.
Consideraciones de seguridad
A continuación, se indican las consideraciones de seguridad recomendadas cuando creas un notebook administrado por el usuario:
- Selecciona la opción para acceder al cuaderno "solo para un usuario". Si el usuario especificado no es el creador de la instancia, debes otorgarle el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio de la instancia.
- Inhabilita las siguientes opciones:
- acceso raíz
- nbconvert
- Descarga de archivos desde la IU de JupyterLab
- En su lugar, se usará Cloud NAT en lugar de asignar una dirección IP externa al notebook administrado por el usuario.
- Selecciona las siguientes opciones de procesamiento:
- Inicio seguro
- Módulo de plataforma segura virtual (vTPM)
- Supervisión de integridad
4. Antes de comenzar
Actualiza el proyecto para que admita el instructivo
En este instructivo, se usan variables para facilitar la implementación de la configuración de gcloud en Cloud Shell.
Dentro de Cloud Shell, haz lo siguiente:
gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid
5. Configuración de la VPC
Crea la VPC independiente
Dentro de Cloud Shell, haz lo siguiente:
gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom
Crea la subred del notebook administrado por el usuario
Dentro de Cloud Shell, haz lo siguiente:
gcloud compute networks subnets create securevertex-subnet-a --project=$projectid --range=10.10.10.0/28 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access
Configuración de Cloud Router y NAT
Cloud NAT se usa en el instructivo para las descargas de paquetes de software de notebooks porque la instancia de notebook administrada por el usuario no tiene una dirección IP externa. Cloud NAT también ofrece capacidades de NAT de salida, lo que significa que los hosts de Internet no pueden iniciar la comunicación con un notebook administrado por el usuario, lo que lo hace más seguro.
Dentro de Cloud Shell, crea el Cloud Router regional.
gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
Dentro de Cloud Shell, crea la puerta de enlace de Cloud NAT regional.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
6. Crea un bucket de almacenamiento
Los buckets de almacenamiento ofrecen carga y recuperación seguras de archivos. En el instructivo, el almacenamiento en la nube contendrá una secuencia de comandos posterior al inicio para instalar paquetes de IA generativa en los notebooks administrados por el usuario.
Crea un bucket de Cloud Storage y reemplaza BUCKET_NAME por el nombre único a nivel global que prefieras.
Dentro de Cloud Shell, crea un bucket de almacenamiento único.
gsutil mb -l us-central1 -b on gs://BUCKET_NAME
Almacena “BUCKET_NAME” durante el lab
BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
7. Crea una secuencia de comandos posterior al inicio
Para habilitar la descarga de los paquetes de IA generativa, crea una secuencia de comandos posterior al inicio en Cloud Shell con el editor vi o nano y guárdala como poststartup.sh.
#! /bin/bash
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
cd /home/jupyter
echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
su - jupyter -c "git clone https://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Installing python packages" >> /tmp/notebook_config.log 2&1
su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
google-cloud-bigquery \
google-cloud-pipeline-components \
google-cloud-aiplatform \
seaborn \
kfp" >> /tmp/notebook_config.log 2>&1
Ejemplo:
vpc_admin@cloudshell$ more poststartup.sh
#! /bin/bash
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
cd /home/jupyter
echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
su - jupyter -c "git clone https://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Installing python packages" >> /tmp/notebook_config.log 2&1
su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
google-cloud-bigquery \
google-cloud-pipeline-components \
google-cloud-aiplatform \
seaborn \
kfp" >> /tmp/notebook_config.log 2>&1
Sube la secuencia de comandos posterior al inicio a tu bucket de almacenamiento desde Cloud Shell con gsutil
gsutil cp poststartup.sh gs://$BUCKET_NAME
8. Crea una cuenta de servicio
Para proporcionar un nivel de control preciso del notebook administrado por el usuario, se requiere una cuenta de servicio. Una vez generados, los permisos de la cuenta de servicio se pueden modificar según los requisitos de la empresa. En el instructivo, se aplicarán las siguientes reglas a la cuenta de servicio:
Debes la API de Service Account antes de continuar.
Dentro de Cloud Shell, crea la cuenta de servicio.
gcloud iam service-accounts create user-managed-notebook-sa \
--display-name="user-managed-notebook-sa"
Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de visualizador de objetos de almacenamiento.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de usuario de Vertex AI.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Dentro de Cloud Shell, enumera la cuenta de servicio y anota la dirección de correo electrónico que se usará cuando crees el notebook administrado por el usuario.
gcloud iam service-accounts list
Ejemplo:
$ gcloud iam service-accounts list
DISPLAY NAME: user-managed-notebook-sa
EMAIL: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
DISABLED: False
9. Crea un notebook administrado por el usuario seguro
Una instancia de notebooks administrados por el usuario es una instancia de máquina virtual de aprendizaje profundo que tiene preinstaladas las bibliotecas de aprendizaje automático y ciencia de datos más recientes. De forma opcional, puedes incluir GPU de Nvidia para la aceleración de hardware.
Habilita las APIs para consumidores
Crea el notebook administrado por el usuario
- Ir a Workbench
- Selecciona Notebooks administrados por el usuario y, luego, Crear notebook. Se abrirá la página Crea un notebook administrado por el usuario.
- Si se implementó un notebook existente, selecciona Notebooks administrados por el usuario → Notebook nuevo → Personalizar.
- En la página Crear un notebook administrado por el usuario, en la sección Detalles, proporciona la siguiente información para tu instancia nueva:
- Nombre: Proporciona un nombre para la instancia nueva.
- Región y zona: En el instructivo, se usarán la región us-central1 y la zona us-central1-a.
Selecciona Continuar.
- En la sección Entorno, proporciona lo siguiente:
- Sistema operativo: Selecciona el sistema operativo que deseas usar.
- Selecciona el entorno que deseas usar.
- Versión: Selecciona la versión que deseas usar.
- Secuencia de comandos posterior al inicio (opcional,usa la secuencia de comandos de IA generativa creada anteriormente): Selecciona Explorar para elegir una secuencia de comandos que se ejecutará después de que se inicie la instancia.
- Metadatos: Opcional: Proporciona claves de metadatos personalizados para la instancia.
Selecciona Continuar.
- En la sección Tipo de máquina, proporciona lo siguiente:
- Tipo de máquina: Selecciona la cantidad de CPU y de RAM para la instancia nueva. Vertex AI Workbench proporciona estimaciones de costos mensuales para cada tipo de máquina que selecciones.
- Tipo de GPU: Selecciona el tipo de GPU y la cantidad de GPU para tu instancia nueva. Si deseas obtener más información sobre las diferentes GPU, consulta GPU en Compute Engine.
- Selecciona la casilla de verificación Instalar automáticamente el controlador de GPU de NVIDIA.
VM protegida
- Activar el Inicio seguro
- Activa vTPM
- Activar la supervisión de integridad
Selecciona Continuar.
- En la sección Discos, proporciona lo siguiente:
- Discos: Opcional: Para cambiar la configuración predeterminada del disco de arranque o de datos, selecciona el Tipo de disco de arranque, el Tamaño de disco de arranque en GB, el Tipo de disco de datos y el Tamaño del disco de datos en GB que desees. Para obtener más información sobre los tipos de discos, consulta Opciones de almacenamiento.
- Enviar a la papelera: Opcional: Selecciona esta casilla de verificación para usar el comportamiento predeterminado de la papelera del sistema operativo. Si usas el comportamiento predeterminado de la papelera, los archivos borrados con la interfaz de usuario de JupyterLab se pueden recuperar, pero estos archivos borrados usan espacio en el disco.
- Copia de seguridad: Opcional: Para sincronizar una ubicación de Cloud Storage con el disco de datos de tu instancia, selecciona Explorar y especifica la ubicación de Cloud Storage. Para obtener información sobre los costos de almacenamiento, consulta Precios de Cloud Storage.
- Encriptación: Clave de encriptación administrada por Google
Selecciona Continuar.
- En la sección Networking, proporciona lo siguiente:
- Herramientas de redes: Selecciona Redes en este proyecto o Redes compartidas conmigo. Si usas una VPC compartida en el proyecto host, también debes otorgar el rol de Usuario de la red de Compute (roles/compute.networkUser) al agente de servicio de Notebooks del proyecto de servicio.
- En el campo Red, selecciona la red que desees. En el instructivo, se usa la red securevertex-vpc. Puedes seleccionar una red de VPC, siempre que esta tenga habilitado el Acceso privado a Google o pueda acceder a Internet. En el campo Subred, selecciona la subred que desees. En el instructivo, se usa la subred securevertex-subnet-a.
- Anula la selección de la opción para asignar una dirección IP externa
- Selecciona Permitir el acceso mediante proxies
Selecciona Continuar.

- En la sección IAM y seguridad, proporciona lo siguiente:
- Selecciona Usuario único y, luego, en el campo Correo electrónico del usuario, ingresa la cuenta de usuario a la que deseas otorgar acceso. Si el usuario especificado no es el creador de la instancia, debes otorgarle el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio de la instancia.
- Anula la selección de Usar la cuenta de servicio predeterminada de Compute Engine en la VM para llamar a las APIs de Google Cloud.
- Ingresa la dirección de correo electrónico de la cuenta de servicio recién creada, por ejemplo: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
Opciones de seguridad
- Anula la selección de Habilitar el acceso raíz a la instancia
- Anula la selección de Habilitar nbconvert
- Anula la selección de Habilitar la descarga de archivos desde la IU de JupyterLab
- Habilitar terminal (anule la selección para los entornos de producción)
Selecciona Continuar.

- En la sección Estado del sistema, proporciona lo siguiente:
Actualización del entorno y estado del sistema
- Selecciona la casilla de verificación Habilitar actualización automática del entorno.
- Elige si deseas actualizar tu notebook semanal o mensualmente.
En Informes y estado del sistema, selecciona o borra las siguientes casillas de verificación:
- Habilitar el informe de estado del sistema
- Generar informes sobre las métricas personalizadas en Cloud Monitoring
- Instalar el agente de Cloud Monitoring
Selecciona Crear.
10. Validación
Vertex AI Workbench crea una instancia de notebooks administrados por el usuario en función de las propiedades que especificaste y, luego, inicia la instancia de forma automática. Cuando la instancia está lista para usarse, Vertex AI Workbench activa un vínculo Abrir JupyterLab que permite que el usuario final acceda al notebook.
11. Observabilidad
Supervisa las métricas del sistema y de las aplicaciones a través de Monitoring
Para las instancias de notebooks administrados por el usuario que tienen Monitoring instalado, puedes supervisar las métricas del sistema y de la aplicación mediante la consola de Google Cloud como se indica a continuación:
- En la consola de Google Cloud, ve a la página Notebooks administrados por el usuario.
- Haz clic en el nombre de la instancia del que deseas ver las métricas del sistema y de la aplicación.
- En la página Detalles del notebook, haz clic en la pestaña Supervisión. Revisa las métricas del sistema y de la aplicación para tu instancia.
12. Crea un programa de notebook
La programación de instancias te permite iniciar y detener instancias de máquina virtual (VM) de forma automática. El uso de programaciones de instancias para automatizar la implementación de tus instancias de VM puede ayudarte a optimizar los costos y administrar las instancias de VM de forma más eficiente. Puedes usar las programaciones de instancias para cargas de trabajo recurrentes y únicas. Por ejemplo, usa programaciones de instancias para ejecutar solo instancias de VM durante las horas de trabajo o proporcionar capacidad para un evento único.
Para usar programaciones de instancias, crea una política de recursos que describa el comportamiento de inicio y detención y, luego, adjunta la política a una o más instancias de VM.
En este instructivo, se muestra cómo crear una programación de instancias que encienda tu notebook a las 7 a.m. y lo apague a las 6 p.m.
Para crear la programación de la instancia, necesitarás los permisos compute.instances.start y compute.instances.stop, por lo que se recomienda un rol personalizado creado por el administrador que te otorgó acceso.
Una vez creado, el rol personalizado se asignará a la cuenta de servicio predeterminada de Compute Engine en tu proyecto, lo que permitirá que la programación de la instancia inicie y detenga tu notebook.
Cómo crear un rol personalizado
Dentro de Cloud Shell, crea un rol personalizado, VmScheduler, e incluye los permisos necesarios.
gcloud iam roles create Vm_Scheduler --project=$projectid \
--title=vm-scheduler-notebooks \
--permissions="compute.instances.start,compute.instances.stop" --stage=ga
Describe el rol personalizado desde Cloud Shell.
gcloud iam roles describe Vm_Scheduler --project=$projectid
Ejemplo:
$ gcloud iam roles describe Vm_Scheduler --project=$projectid
etag: BwX991B0_kg=
includedPermissions:
- compute.instances.start
- compute.instances.stop
name: projects/$projectid/roles/Vm_Scheduler
stage: GA
title: vm-scheduler-notebooks
Actualiza la cuenta de servicio predeterminada
En la siguiente sección, identificarás y actualizarás la cuenta de servicio predeterminada que tiene el siguiente formato: PROJECT_NUMBER-compute@developer.gserviceaccount.com
En Cloud Shell, identifica el número del proyecto actual.
gcloud projects list --filter=$projectid
En Cloud Shell, almacena el número de proyecto como una variable.
project_number=your_project_number
echo $project_number
En Cloud Shell, actualiza la cuenta de servicio de Compute predeterminada con el rol personalizado, VM_Scheduler.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Crea la programación de instancias
En Cloud Shell, crea el programa de inicio y detención.
gcloud compute resource-policies create instance-schedule optimize-notebooks \
--region=us-central1 \
--vm-start-schedule='0 7 * * *' \
--vm-stop-schedule='0 18 * * *' \
--timezone=America/Chicago
En Cloud Shell, almacena el nombre de tu notebook.
gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm
Puedes adjuntar una programación de instancias a cualquier instancia de VM existente que se encuentre en la misma región que la programación de instancias.
En Cloud Shell, asocia la programación con tu notebook.
gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a
13. Limpia
Borra el notebook administrado por el usuario de la consola. Para ello, navega a Vertex AI → Workbench, selecciona y borra el notebook.
En Cloud Shell, borra los componentes de la VPC.
gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet
gcloud compute routers nats delete cloud-nat-us-central1 --region=us-central1 --router=cloud-router-us-central1 --quiet
gcloud compute instances remove-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a --quiet
gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
gcloud compute instances delete $notebook_vm --zone=us-central1-a --quiet
gcloud compute networks subnets delete securevertex-subnet-a --region=us-central1 --quiet
gcloud iam service-accounts delete user-managed-notebook-sa@$projectid.iam.gserviceaccount.com --quiet
gcloud projects remove-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
gcloud iam roles delete Vm_Scheduler --project=$projectid
gcloud compute networks delete securevertex-vpc --quiet
14. Felicitaciones
¡Bien hecho! Configuraste y validaste correctamente un notebook administrado por el usuario seguro creando una VPC independiente personalizada con las prácticas recomendadas de refuerzo de la seguridad para notebooks administrados y, además, implementaste una programación de instancias para optimizar la inversión.
¿Qué sigue?
Consulta algunos de estos instructivos…
- Introducción a Vertex Pipelines
- Trabajo de entrenamiento personalizado y predicción con un conjunto de datos administrado
Lecturas y videos adicionales
- Comienza a usar Notebooks para el aprendizaje automático
- Comienza a usar Vertex AI
- Introducción a la IA generativa
Documentos de referencia
- Introducción a Vertex AI Workbench
- Introducción a los notebooks administrados por el usuario
- Usa una instancia de notebooks administrados por el usuario dentro de un perímetro de servicio
- Crea una cuenta de servicio
- Programa una instancia de VM para que se inicie y se detenga