Este tutorial está dirigido a científicos de datos, investigadores y administradores de redes de empresas. En él se muestra cómo proteger una instancia de Vertex AI Workbench creándola en una red de nube privada virtual (VPC).
Una red de VPC es una versión virtual de una red física que se implementa en la red de producción de Google. Es una red privada con sus propias direcciones IP privadas, subredes y pasarelas de red. En las empresas, las redes de VPC se usan para proteger los datos y las instancias controlando el acceso a ellos desde otras redes y desde Internet.
La red VPC de este tutorial es una red independiente. Sin embargo, puedes compartir una red de VPC de un proyecto (llamado proyecto host) con otros proyectos de tu Google Cloud organización. Para obtener más información sobre qué tipo de red de VPC usar, consulta Red de VPC única y VPC compartida.
Siguiendo las prácticas recomendadas de seguridad de redes, la red de VPC de este tutorial usa una combinación de Cloud Router, Cloud NAT y Acceso privado a Google para proteger la instancia de las siguientes formas:
- La instancia de Vertex AI Workbench no tiene una dirección IP externa.
- La instancia tiene acceso saliente a Internet a través de una pasarela de Cloud Router y Cloud NAT regionales, por lo que puedes instalar paquetes de software u otras dependencias. Cloud NAT permite las conexiones salientes y las respuestas entrantes a esas conexiones. No permite solicitudes entrantes no solicitadas de Internet.
- La instancia usa Acceso privado de Google para llegar a las direcciones IP externas de las APIs y los servicios de Google.
En el tutorial también se explica cómo hacer lo siguiente:
- Crea una secuencia de comandos posterior al inicio para clonar automáticamente un repositorio de GitHub en la instancia de Vertex AI Workbench recién creada.
- Usa Cloud Monitoring para monitorizar la instancia de Vertex AI Workbench.
- Usa la API Compute Engine para iniciar y detener la instancia automáticamente y optimizar los costes.
Crear y configurar una VPC independiente
Crea una red VPC llamada
securevertex-vpc
:gcloud compute networks create securevertex-vpc --subnet-mode=custom
Crea una subred llamada
securevertex-subnet-a
con un intervalo IPv4 principal de10.10.10.0/29
:gcloud compute networks subnets create securevertex-subnet-a --range=10.10.10.0/29 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access
Puede proporcionar un valor diferente para el parámetro
--range
. Sin embargo, la longitud mínima del prefijo de un solo cuaderno es de 29 caracteres. Para obtener más información, consulta la sección sobre los intervalos de subredes IPv4.Crea un router de Cloud Router regional llamado
cloud-router-us-central1
:gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
Crea una pasarela de Cloud NAT regional llamada
cloud-nat-us-central1
: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
Crea un segmento de Cloud Storage
En esta sección, crearás un segmento de Cloud Storage para alojar una secuencia de comandos posterior al inicio que podrás ejecutar al crear una instancia de Vertex AI Workbench.
Crea el segmento de Cloud Storage:
gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAME
Sustituye BUCKET_NAME por un nombre de segmento único.
Define la variable de shell
BUCKET_NAME
y comprueba que se haya introducido correctamente:BUCKET_NAME=BUCKET_NAME echo $BUCKET_NAME
Crear y subir una secuencia de comandos tras el inicio
En esta sección, crearás una secuencia de comandos posterior al inicio para clonar un repositorio de GitHub en una nueva instancia de Vertex AI Workbench.
Para crear la secuencia de comandos, usa un editor de texto como
vim
onano
para crear un archivopoststartup.sh
. Debes añadirsudo
al principio para tener permiso de escritura en el archivo. Por ejemplo:sudo vim poststartup.sh
Pega la siguiente secuencia de comandos de shell en el archivo:
#! /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
Guarda el archivo de la siguiente manera:
- Si usas
vim
, pulsa la teclaEsc
y, a continuación, escribe:wq
para guardar el archivo y salir. - Si usas
nano
, escribeControl+O
y pulsaEnter
para guardar el archivo. A continuación, escribeControl+X
para salir.
- Si usas
Sube el archivo a tu depósito de Cloud Storage:
gcloud storage cp poststartup.sh gs://BUCKET_NAME
Crear una cuenta de servicio personalizada
Cuando creas una instancia de Vertex AI Workbench, te recomendamos que desactives la casilla Usar la cuenta de servicio predeterminada de Compute Engine y especifiques una cuenta de servicio personalizada. Si tu organización no aplica la restricción de la política de la organización iam.automaticIamGrantsForDefaultServiceAccounts
, se concede el rol Editor (roles/editor
) a la cuenta de servicio predeterminada de Compute Engine (y, por lo tanto, a cualquier usuario que especifiques como usuario de la instancia) en tu proyecto. Para inhabilitar este comportamiento, consulta el artículo sobre cómo inhabilitar las concesiones automáticas de roles a las cuentas de servicio predeterminadas.
Crea una cuenta de servicio personalizada llamada
workbench-sa
:gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"
Asigna el rol de gestión de identidades y accesos Lector de objetos de almacenamiento a la cuenta de servicio:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
Asigna el rol de gestión de identidades y accesos Editor de métricas de Monitoring a la cuenta de servicio:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
Asigna el rol de gestión de identidades y accesos Usuario de Vertex AI a la cuenta de servicio:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"
Crear una instancia de Vertex AI Workbench
En esta sección, crearás la instancia de Vertex AI Workbench. Cuando se crea la instancia, se ejecuta automáticamente la secuencia de comandos posterior al inicio que has creado.
En la Google Cloud consola, ve a la pestaña Instancias de la página Vertex AI Workbench.
Haz clic en
Crear y, a continuación, en Opciones avanzadas.Se abrirá la página Nueva instancia.
En la página Nueva instancia, en la sección Detalles, proporciona la siguiente información sobre la nueva instancia y, a continuación, haz clic en Continuar:
- Nombre: proporciona un nombre para la nueva instancia o acepta el predeterminado.
- Región: seleccione us-central1.
- Zona: selecciona us-central1-a.
En la sección Entorno, proporcione la siguiente información y, a continuación, haga clic en Continuar:
- Secuencia de comandos posterior al inicio: haz clic en Examinar, haz clic en
poststartup.sh
y, a continuación, en Seleccionar.
Ver recursos secundarios junto al nombre del contenedor,
haz clic en
- Secuencia de comandos posterior al inicio: haz clic en Examinar, haz clic en
En la sección Tipo de máquina, proporcione la siguiente información y, a continuación, haga clic en Continuar:
Máquina virtual blindada: marca las siguientes casillas:
- Arranque seguro
- Módulo de plataforma segura virtual (vTPM)
- Monitorización de integridad
En la sección Discos, comprueba que esté seleccionado Google-managed encryption key y, a continuación, haz clic en Continuar:
En la sección Redes, proporcione la siguiente información y, a continuación, haga clic en Continuar:
Redes: selecciona Red en este proyecto y sigue estos pasos:
En el campo Red, selecciona securevertex-vpc.
En el campo Subred, selecciona securevertex-subnet-a.
Desmarca la casilla Asignar dirección IP externa. Si no asignas una dirección IP externa, la instancia no podrá recibir comunicaciones no solicitadas de Internet ni de otras redes VPC.
Selecciona la casilla Permitir acceso proxy.
En la sección IAM y seguridad, proporcione lo siguiente y, a continuación, haga clic en Continuar:
IAM y seguridad: para conceder acceso a un solo usuario a la interfaz de JupyterLab de la instancia, sigue estos pasos:
- Selecciona Un solo usuario.
- En el campo Correo del usuario, introduce la dirección de correo de una cuenta de usuario. Si vas a crear la instancia para otra persona, se aplican las siguientes condiciones:
- Tú (el creador de la instancia) no tienes acceso a la interfaz de JupyterLab de la instancia. Sin embargo, sigues controlando la instancia y puedes iniciarla, detenerla o eliminarla.
- Después de crear la instancia, debes conceder al usuario el rol Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio de la instancia. Consulta Opcional: Asigna el rol Usuario de cuenta de servicio al usuario de la instancia.
- Desmarca la casilla Usar la cuenta de servicio predeterminada de Compute Engine.
Este paso es importante porque la cuenta de servicio predeterminada de Compute Engine (y, por lo tanto, el usuario único que acabas de especificar) podría tener el rol Editor (
roles/editor
) en tu proyecto. En el campo Correo de la cuenta de servicio, introduce lo siguiente y sustituye PROJECT_ID por el ID del proyecto:
workbench-sa@PROJECT_ID.iam.gserviceaccount.com
(Esta es la dirección de correo de la cuenta de servicio personalizada que has creado antes). Esta cuenta de servicio tiene permisos limitados.
Para obtener más información sobre cómo conceder acceso, consulta Gestionar el acceso a la interfaz de JupyterLab de una instancia de Vertex AI Workbench.
Opciones de seguridad: desmarca la siguiente casilla:
- Acceso de superusuario a la instancia
Marca la siguiente casilla:
- nbconvert:
nbconvert
permite a los usuarios exportar y descargar un archivo de cuaderno como otro tipo de archivo, como HTML, PDF o LaTeX. Algunos de los cuadernos del repositorio de GitHub Google Cloud Generative AI requieren este ajuste.
Desmarca la siguiente casilla:
- Descarga de archivos
Marca la siguiente casilla, a menos que te encuentres en un entorno de producción:
- Acceso al terminal: permite acceder al terminal de tu instancia desde la interfaz de usuario de JupyterLab.
En la sección Estado del sistema, seleccione Actualización automática del entorno y proporcione lo siguiente:
En Informes, marque las siguientes casillas:
- Informar del estado del sistema
- Enviar métricas personalizadas a Cloud Monitoring
- Instalar Cloud Monitoring
- Informar del estado del DNS de los dominios de Google obligatorios
Haz clic en Crear y espera unos minutos a que se cree la instancia de Vertex AI Workbench.
Opcional: Asigna el rol Usuario de cuenta de servicio al usuario de la instancia
Si vas a crear la instancia de Vertex AI Workbench para otro usuario, debes asignarle el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en la workbench-sa
cuenta de servicio personalizada de la siguiente manera:
gcloud iam service-accounts add-iam-policy-binding \ workbench-sa@PROJECT_ID.iam.gserviceaccount.com \ --member="user:USER_EMAIL" \ --role="roles/iam.serviceAccountUser"
Sustituye los siguientes valores:
- PROJECT_ID: el ID del proyecto
- USER_EMAIL: la dirección de correo del usuario
Verificar que se ha creado la instancia de Vertex AI Workbench
Vertex AI Workbench crea una instancia de Vertex AI Workbench basada en las propiedades que hayas especificado e inicia automáticamente la instancia.
Cuando la instancia esté lista para usarse, Vertex AI Workbench activará el enlace Abrir JupyterLab. Solo puede acceder a este enlace el usuario que hayas especificado al crear la instancia.
Abre la instancia en JupyterLab y comprueba que el repositorio de GitHub Google Cloud Generative AI clonado está presente.
En la Google Cloud consola, ve a la página Vertex AI Workbench.
En la lista de instancias de Vertex AI Workbench, haz clic en el enlace Abrir JupyterLab de la instancia que has creado.
En la lista de carpetas, verás una carpeta
generative-ai
. Esta carpeta contiene el repositorio de GitHub clonado.
Monitorizar el estado mediante Monitoring
Puedes monitorizar las métricas del sistema y de las aplicaciones de tus instancias de Vertex AI Workbench mediante laGoogle Cloud consola. Para obtener más información sobre la monitorización de instancias y la creación de métricas personalizadas, consulta el artículo Monitorizar el estado de salud.
En la Google Cloud consola, ve a la página Vertex AI Workbench.
Haga clic en el nombre de la instancia de Vertex AI Workbench de la que quiera ver las métricas.
En la página Detalles de la instancia, haga clic en la pestaña Monitorización. Consulta los valores de Utilización de CPU y Bytes de red de tu instancia de cuaderno. Para saber cómo interpretar estas métricas, consulte Revisar métricas de recursos.
Si acabas de crear la instancia, no verás ningún dato de inmediato. Espera unos minutos y actualiza la pestaña de la consola.
Crear una programación de instancias de VM para tu instancia de Vertex AI Workbench
Como una instancia de Vertex AI Workbench es una instancia de VM de Compute Engine, puedes usar las APIs de Compute Engine para crear una programación de instancias de VM.
Usa una programación de instancias de VM para iniciar y detener tu instancia de Vertex AI Workbench. Durante las horas en las que la instancia esté detenida, solo pagarás los costes de Cloud Storage.
Puedes asociar una programación de instancias a cualquier instancia de VM que esté en la misma región, por lo que puedes usar la misma programación de instancias para controlar todas tus instancias de Vertex AI Workbench de la región.
Para obtener más información sobre las programaciones de instancias de VM, consulta Programar una instancia de VM para que se inicie y se detenga.
Crear un rol de gestión de identidades y accesos personalizado
Como práctica recomendada de seguridad, te recomendamos que crees un rol de IAM personalizado que solo tenga los siguientes permisos y que lo asignes a la cuenta de servicio predeterminada de Compute Engine:
compute.instances.start
compute.instances.stop
En Cloud Shell, crea un rol personalizado llamado
Vm_Scheduler
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:
gcloud iam roles describe Vm_Scheduler \ --project=$projectid
Asigna el rol a la cuenta de servicio predeterminada de Compute Engine
Para dar permiso a la cuenta de servicio predeterminada de Compute Engine para iniciar y detener tus instancias de Vertex AI Workbench, debes asignarle el rol personalizado Vm_Scheduler
.
La cuenta de servicio predeterminada de Compute Engine de tu proyecto tiene la siguiente dirección de correo: PROJECT_NUMBER-compute@developer.gserviceaccount.com
, donde PROJECT_NUMBER
es el número de tu proyecto.
Identifica el número de tu proyecto y guárdalo en la variable de shell
project_number
:project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)') echo $project_number
Asigna el rol personalizado a la cuenta de servicio predeterminada:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:service-$project_number@compute-system.iam.gserviceaccount.com" \ --role="projects/$projectid/roles/Vm_Scheduler"
Crea y adjunta la programación
Para crear una programación de instancias que inicie tu instancia de Vertex AI Workbench a las 7:00 y la detenga a las 18:00, sigue estos pasos:
Crea una programación de inicio y finalización llamada
optimize-notebooks
:gcloud compute resource-policies create instance-schedule optimize-notebooks \ --region=us-central1 \ --vm-start-schedule='0 7 * * *' \ --vm-stop-schedule='0 18 * * *' \ --timezone=TIME_ZONE
Sustituye TIME_ZONE por la zona horaria IANA basada en la ubicación de esta programación de instancias. Por ejemplo,
America/Chicago
. Si se omite, se usará el valor predeterminadoUTC
. Para obtener más información, consulta la zona horaria.Para identificar el nombre de tu instancia de Vertex AI Workbench, ejecuta el siguiente comando y anota el valor
NAME
que devuelve:gcloud compute instances list
Almacena el nombre en la variable de shell
notebook_vm
:notebook_vm=NOTEBOOK_VM_NAME echo $notebook_vm
Sustituye NOTEBOOK_VM_NAME por el nombre de tu instancia de Vertex AI Workbench.
Adjunta la programación de la instancia a tu instancia de Vertex AI Workbench:
gcloud compute instances add-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-a
Describe la programación de la instancia:
gcloud compute resource-policies describe optimize-notebooks \ --region=us-central1
Para comprobar si la programación de la instancia se ejecuta correctamente, consulta los registros de auditoría de Compute Engine de la política de recursos de la programación de la instancia y de la instancia de VM asociada. Es posible que tengas que esperar hasta 15 minutos después de la hora programada para cada operación.