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 cuadernos gestionados por el usuario 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 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 cuadernos gestionados por usuarios 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 cuadernos gestionados por usuarios que acabas de crear.
- Usa Cloud Monitoring para monitorizar la instancia de cuadernos gestionados por usuarios.
- Usa la API Compute Engine para iniciar y detener la instancia automáticamente y optimizar los costes.
Objetivos
- Crea una red de VPC y añade una subred que tenga habilitado el acceso privado de Google.
- Crea un Cloud Router y un Cloud NAT para la red de VPC.
- Crea una instancia de cuadernos gestionados por usuarios en la subred con un script posterior al inicio que clone el repositorio de GitHub Google Cloud IA generativa.
- Habilita Cloud Monitoring en la instancia.
- Crea una programación de instancias de VM y adjúntala a la instancia.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
-
In the Google Cloud console, go to 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Abre Cloud Shell para ejecutar los comandos que se indican en este tutorial. Cloud Shell es un entorno de shell interactivo para Google Cloud que te permite gestionar tus proyectos y recursos desde el navegador web. Ir a Cloud Shell
- En Cloud Shell, define el proyecto actual como tu Google Cloud ID de proyecto y almacena el mismo ID de proyecto en la variable de shell
projectid
: Sustituye PROJECT_ID por el ID de tu proyecto. Si es necesario, puedes encontrar el ID de tu proyecto en la Google Cloud consola. Para obtener más información, consulta Buscar el ID de un proyecto.projectid="PROJECT_ID" gcloud config set project ${projectid}
-
Enable the IAM, Compute Engine, Notebooks, Cloud Storage, and Vertex AI APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Make sure that you have the following role or roles on the project: roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/notebooks.admin, roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/storage.Admin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Ir a IAM - Selecciona el proyecto.
- Haz clic en Conceder acceso.
-
En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.
- En la lista Selecciona un rol, elige un rol.
- Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
- Haz clic en Guardar.
-
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
Si quieres, puedes 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
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
Sustituye BUCKET_NAME por el nombre del segmento.
Crear y subir una secuencia de comandos tras el inicio
Para crear la secuencia de comandos, usa un editor de texto como
vi
onano
para crear un archivo llamadopoststartup.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.
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 notebooks gestionada por el usuario, 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
user-managed-notebook-sa
:gcloud iam service-accounts create user-managed-notebook-sa \ --display-name="user-managed-notebook-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:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
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:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Crear una instancia de cuadernos gestionados por usuarios
En la Google Cloud consola, ve a la página Notebooks gestionados por el usuario.
Haz clic en
Crear y, a continuación, selecciona Opciones avanzadas.Se abrirá la página Crear instancia.
En la página Crear instancia, en la sección Detalles, proporciona la siguiente información de 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:
- Script posterior al inicio: haz clic en Buscar, haz doble clic en el archivo
poststartup.sh
, vuelve a hacer clic en él y, a continuación, haz clic en Seleccionar.
- Script posterior al inicio: haz clic en Buscar, haz doble clic en el archivo
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, asegúrate de 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
user-managed-notebook-sa@$projectid.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 cuadernos gestionada por el usuario.
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 de Google Cloud IA generativa 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 a la terminal Esto permite acceder a la 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.
Opcional: Asigna el rol Usuario de cuenta de servicio al usuario de la instancia
Si vas a crear la instancia de notebooks gestionados por el usuario para otro usuario, debes asignarle el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en la user-managed-notebook-sa
cuenta de servicio personalizada de la siguiente manera:
gcloud iam service-accounts add-iam-policy-binding \ user-managed-notebook-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 cuadernos gestionados por usuarios
Vertex AI Workbench crea una instancia de notebooks gestionados por el usuario en función de las propiedades que especifiques y la inicia automáticamente.
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 IA generativa clonado está presente.
En la Google Cloud consola, ve a la página Notebooks gestionados por el usuario.
En la lista de instancias de cuadernos gestionadas por el usuario, 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 cuadernos gestionados por el usuario 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 Notebooks gestionados por el usuario.
Haga clic en el nombre de la instancia de cuadernos gestionados por el usuario de la que quiera ver las métricas.
En la página Detalles del cuaderno, 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 cuadernos gestionados por usuarios
Como una instancia de cuadernos gestionada por el usuario 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 cuadernos gestionados por usuarios. 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 notebooks gestionados por el usuario 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 las instancias de notebooks gestionadas por el usuario, debes asignarle el Vm_Scheduler
rol personalizado.
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:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Crear y adjuntar la programación
Para crear una programación de instancias que inicie tu instancia de cuadernos gestionados por usuarios 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 cuadernos gestionados por el usuario, 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 cuadernos gestionados por el usuario.
Adjunta la programación de la instancia a tu instancia de cuadernos gestionados por el usuario:
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.
Limpieza
Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en este tutorial, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Para eliminar los recursos de un proyecto, sigue estos pasos:
En la Google Cloud consola, ve a la página Notebooks gestionados por el usuario.
Selecciona tu instancia de cuaderno gestionado por usuarios.
Haz clic en Eliminar.
En Cloud Shell, elimina los recursos individuales restantes ejecutando los siguientes comandos.
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
Siguientes pasos
- Sigue el codelab Vertex AI create a secure user-managed notebook (Vertex AI: crea un cuaderno gestionado por el usuario seguro).
- Consulta cómo usar Controles de Servicio de VPC para configurar una instancia de cuadernos gestionados por usuarios dentro de un perímetro de servicio.
- Consulta las prácticas recomendadas y las arquitecturas de referencia para el diseño de VPCs.