Este instructivo está dirigido a científicos de datos, investigadores y administradores de redes empresariales. Se muestra cómo proteger una instancia de Vertex AI Workbench mediante su creación en una red de nube privada virtual (VPC).
Una red de VPC es una versión virtual de una red física, implementada en la red de producción de Google. Es una red privada, con sus propias direcciones IP privadas, subredes y puertas de enlace de red. En las empresas, las redes de VPC se usan para proteger las instancias y los datos mediante el control del acceso a ellas desde otras redes y desde Internet.
En este instructivo, la red de VPC es independiente. Sin embargo, puedes compartir una red de VPC de un proyecto (denominado proyecto host) a otros proyectos en tu organización de Google Cloud . Para obtener más información sobre qué tipo de red de VPC usar, consulta el artículo Red de VPC única y VPC compartida.
Con las recomendaciones de seguridad de red, la red de VPC de este instructivo usa una combinación deCloud Router,Cloud NAT y Acceso privado a Google para proteger la instancia de las siguientes maneras:
- La instancia de Vertex AI Workbench no tiene una dirección IP externa.
- La instancia tiene acceso saliente a Internet a través de un Cloud Router regional y una puerta de enlace Cloud NAT para que puedas instalar paquetes de software u otras dependencias. Cloud NAT permite las conexiones salientes y las respuestas entrantes a esas conexiones. No permite solicitudes de entrada no solicitadas desde Internet.
- La instancia usa el Acceso privado a Google para acceder a las direcciones IP externas de los servicios y las APIs de Google.
En el instructivo, también se muestra cómo hacer lo siguiente:
- Crear 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.
- Usar Cloud Monitoring para supervisar la instancia de Vertex AI Workbench.
- Usa la API de Compute Engine para iniciar y detener la instancia de forma automática para optimizar los costos.
Crea y configura una VPC independiente
Crea una red de VPC llamada
securevertex-vpc
:gcloud compute networks create securevertex-vpc --subnet-mode=custom
Crea una subred llamada
securevertex-subnet-a
, con un rango 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
Puedes proporcionar un valor diferente para el parámetro
--range
. Sin embargo, la longitud mínima del prefijo para una sola notebook es de 29. Para obtener más información, consulta Rangos de subredes IPv4.Crea un Cloud Router regional llamado
cloud-router-us-central1
:gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
Crea una puerta de enlace 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
Crear un bucket de Cloud Storage
En esta sección, crearás un bucket de Cloud Storage para almacenar una secuencia de comandos posterior al inicio que puedes ejecutar cuando creas una nueva instancia de Vertex AI Workbench.
Crea el bucket de Cloud Storage:
gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAME
Reemplaza BUCKET_NAME con un nombre de bucket único.
Configura la variable de shell
BUCKET_NAME
y verifica que se haya ingresado de forma correcta:BUCKET_NAME=BUCKET_NAME echo $BUCKET_NAME
Crea y carga una secuencia de comandos posterior al inicio
En esta sección, crearás una secuencia de comandos posterior al inicio para clonar un repositorio de GiHub de Terraform 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 anteponersudo
para tener permiso para escribir en el archivo, por ejemplo:sudo vim poststartup.sh
Pega la siguiente secuencia de comandos de configuración 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
, presiona la teclaEsc
y, a continuación, escribe:wq
para guardar el archivo y salir. - Si usas
nano
, escribeControl+O
y presionaEnter
para guardar el archivo y, luego, escribeControl+X
para salir.
- Si usas
Sube un archivo a tu bucket de Cloud Storage.
gcloud storage cp poststartup.sh gs://BUCKET_NAME
Crea una cuenta de servicio personalizada
Cuando crees una instancia de Vertex AI Workbench, te recomendamos que borres la casilla de verificación 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 le otorga el rol de editor a la cuenta de servicio predeterminada de Compute Engine (y, por lo tanto, a cualquier persona que especifiques como usuario de la instancia) (roles/editor
) en tu proyecto. Para desactivar este comportamiento, consulta Inhabilita la asignación automática de roles para 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 IAM de visualizador 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 IAM de escritor 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 IAM de 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"
Crea una instancia de Vertex AI Workbench
En esta sección, crearás la instancia de Vertex AI Workbench. Cuando se crea la instancia, la secuencia de comandos posterior al inicio que creaste se ejecuta de forma automática.
En la consola de Google Cloud , ve a la pestaña Instancias en la página Vertex AI Workbench.
Haz clic en
Crear nueva y haz clic en Opciones avanzadas.Se abrirá la página Instancia nueva.
En la página Instancia nueva, en la sección Detalles, proporciona la siguiente información para tu nueva instancia y haz clic en Continuar:
- Nombre: Proporciona un nombre para la instancia nueva o acepta el valor predeterminado.
- Región: selecciona us-central1.
- Zona: Selecciona us-central1-a.
En la sección Entorno, proporciona lo siguiente y, luego, haz clic en Continuar:
- Secuencia de comandos posterior al inicio: haz clic en Explorar y, luego, en
poststartup.sh
y, luego, en Select.
Ver recursos secundarios junto al nombre del bucket. Haz clic en
- Secuencia de comandos posterior al inicio: haz clic en Explorar y, luego, en
En la sección Tipo de máquina, proporciona lo siguiente y, luego, haz clic en Continuar:
VM protegida: Selecciona las siguientes casillas de verificación:
- Inicio seguro
- Módulo de plataforma segura virtual (vTPM)
- Supervisión de integridad
En la sección Discos, asegúrate de que Google-managed encryption key esté seleccionado y, luego, haz clic en Continuar:
En la sección Herramientas de redes, proporciona lo siguiente y, luego, haz clic en Continuar:
Herramientas de redes: Selecciona Red en este proyecto y completa los siguientes pasos:
En el campo Red, selecciona securevertex-vpc.
En el campo Subred, selecciona securevertex-subnet-a.
Desmarca la casilla de verificación Asignar dirección IP externa. Si no se asigna una dirección IP externa, se evita que la instancia reciba comunicaciones no solicitadas de Internet o de otras redes de VPC.
Selecciona la casilla de verificación Permitir el acceso mediante proxies.
En la sección IAM y seguridad, proporciona lo siguiente y, luego, haz clic en Continuar:
IAM y seguridad: Para otorgar acceso a un solo usuario a la interfaz de JupyterLab de la instancia, completa los siguientes pasos:
- Selecciona Usuario único.
- En el campo Correo electrónico del usuario, ingresa la dirección de correo electrónico de una sola cuenta de usuario. Si creas 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, aún controlas la instancia, y puedes iniciarla, detenerla o borrarla.
- Después de crear la instancia, debes otorgar al usuario el rol de usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio de la instancia. Consulta Opcional: Otorga el rol de usuario de cuenta de servicio al usuario de la instancia.
- Desmarca la casilla de verificación Usar la cuenta de servicio predeterminada de Compute Engine.
Este paso es importante, ya que a la cuenta de servicio predeterminada de Compute Engine (y, por lo tanto, al usuario único que acabas de especificar) podría tener el rol de editor (
roles/editor
) en tu proyecto. En el campo Correo electrónico de la cuenta de servicio, ingresa lo siguiente y reemplaza PROJECT_ID por el ID del proyecto:
workbench-sa@PROJECT_ID.iam.gserviceaccount.com
(Esta es la dirección de correo electrónico de la cuenta de servicio personalizada que creaste antes). Esta cuenta de servicio tiene permisos limitados.
Si quieres obtener más información para otorgar acceso, consulta Administra el acceso a una interfaz de JupyterLab de una instancia de Vertex AI Workbench.
Opciones de seguridad: Desmarca la siguiente casilla de verificación:
- Acceso raíz a la instancia
Selecciona la siguiente casilla de verificación:
- nbconvert:
nbconvert
permite a los usuarios exportar y descargar un archivo de notebook como un tipo de archivo diferente, por ejemplo, HTML, PDF o LaTeX. Algunas de las notebooks del repositorio de GitHub de la Google Cloud IA generativa requieren esta configuración.
Desmarca la siguiente casilla de verificación:
- Descarga de archivos
Selecciona la siguiente casilla de verificación, a menos que estés en un entorno de producción:
- Acceso a la terminal: Esto habilita el acceso a la terminal a tu instancia desde la interfaz de usuario de JupyterLab.
En la sección Estado del sistema, elige Actualización automática del entorno y proporciona lo siguiente:
En Informes, selecciona las siguientes casillas de verificación:
- Genera informes sobre el estado del sistema
- Generar informes sobre las métricas personalizadas en Cloud Monitoring
- Instalar Cloud Monitoring
- Informar el estado de DNS de los dominios de Google obligatorios
Haz clic en Crear y espera unos minutos para que se cree la instancia de Vertex AI Workbench.
Opcional: Otorga el rol de usuario de cuenta de servicio al usuario de la instancia
Si creas la instancia de Vertex AI Workbench para otro usuario, debes otorgarle el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en workbench-sa
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"
Reemplaza los siguientes valores:
- PROJECT_ID: el ID del proyecto
- USER_EMAIL: la dirección de correo electrónico del usuario
Verifica que se haya creado la instancia de Vertex AI Workbench
Vertex AI Workbench crea una instancia de Vertex AI Workbench 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. Este vínculo solo es accesible para el único usuario que especificaste en el momento de la creación de la instancia.
Abre la instancia en JupyterLab y verifica que esté presente el repositorio de GitHub de Google Cloud IA generativa clonado.
En la consola de Google Cloud , ve a la página Vertex AI Workbench.
En la lista de instancias de Vertex AI Workbench, haz clic en el vínculo Abrir JupyterLab para la instancia que creaste.
En la lista de carpetas, verás una carpeta
generative-ai
. Esta carpeta contiene el repositorio de GitHub clonado.
Supervisa el estado a través de Monitoring
Puedes supervisar las métricas del sistema y de la aplicación para tus instancias de Vertex AI Workbench con laGoogle Cloud consola. Para obtener más información sobre la supervisión de instancias y cómo crear métricas personalizadas, consulta Supervisa el estado.
En la consola de Google Cloud , ve a la página Vertex AI Workbench.
Haz clic en el nombre de la instancia de Vertex AI Workbench para las que quieres ver las métricas.
En la página Detalles de la instancia, haz clic en la pestaña Monitoring. Revisa Uso de CPU y Bytes de red de tu instancia de notebook. Para aprender a interpretar estas métricas, consulta Revisa las 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.
Crea una programación de instancias de VM para tu instancia de Vertex AI Workbench
Debido a que una instancia de Vertex AI Workbench es una instancia de VM de Compute Engine, puedes usar las APIs de Compute Engine para crearle 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 que se detiene la instancia, solo pagas por los costos de Cloud Storage.
Puedes adjuntar 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 en la región.
Para obtener más información sobre los programas de instancias de VM, consulta Programar el inicio y la detención de una instancia de VM.
Crea un rol de IAM personalizado
Como práctica recomendada de seguridad, recomendamos crear un rol de IAM personalizado que solo tenga los siguientes permisos y asignarla a la cuenta de servicio predeterminada de Compute Engine:
compute.instances.start
compute.instances.stop
Dentro de 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 otorgarle a la cuenta de servicio predeterminada de Compute Engine
permiso para iniciar y detener tus
instancias de Vertex AI Workbench
debes asignarle el rol personalizado de Vm_Scheduler
.
La cuenta de servicio predeterminada de Compute Engine para tu proyecto
tiene la siguiente
dirección de correo electrónico: PROJECT_NUMBER-compute@developer.gserviceaccount.com
,
En el ejemplo anterior, PROJECT_NUMBER
es el número de tu proyecto.
Identifica el número de tu proyecto y almacénalo 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 a.m. y la detenga a las 6 p.m.:
Crea una programación de inicio y detención con el nombre
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
Reemplaza TIME_ZONE por la zona horaria de IANA basada en la ubicación para este programa de instancias, por ejemplo,
America/Chicago
. Si se omite, se usa el valor predeterminadoUTC
. Para obtener más información, consulta la zona horaria.Identifica el nombre de tu instancia de Vertex AI Workbench ejecutando lo siguiente 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
Reemplaza NOTEBOOK_VM_NAME por el nombre de tu instancia de Vertex AI Workbench.
Adjunta la programación de instancias a tu Instancia de Vertex AI Workbench:
gcloud compute instances add-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-a
Describe el programa de la instancia:
gcloud compute resource-policies describe optimize-notebooks \ --region=us-central1
Puedes verificar si el programa de la instancia se ejecuta con éxito si verificas los registros de auditoría para la política de recursos del programa de instancias y la instancia de VM adjunta. Es posible que debas esperar hasta 15 minutos después del tiempo programado para cada operación.