Este instructivo está dirigido a científicos de datos, investigadores y administradores de redes empresariales. Muestra cómo proteger una instancia de notebooks administrados por el usuario 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 que se encuentren en la 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:
- Tu instancia de notebooks administrada por el usuario 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:
- Crea una secuencia de comandos posterior al inicio para clonar automáticamente un repositorio de GitHub en la instancia de notebooks administrados por el usuario recién creada.
- Usa Cloud Monitoring para supervisar la instancia de notebooks administrada por el usuario.
- Usa la API de Compute Engine para iniciar y detener la instancia de forma automática para optimizar los costos.
Objetivos
- Crear una red de VPC y agregar una subred que tenga habilitado el Acceso privado a Google.
- Crea un Cloud Router y Cloud NAT para la red de VPC.
- Crear una instancia de notebooks administrados por el usuario en la subred con una secuencia de comandos posterior al inicio que clone el repositorio de GitHub de IA generativa de Google Cloud.
- Habilitar Cloud Monitoring para la instancia.
- Crear una programación de instancias de VM y adjuntarla a la instancia.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Abre Cloud Shell para ejecutar los comandos detallados en este instructivo. Cloud Shell es un entorno de shell interactivo para Google Cloud que te permite administrar proyectos y recursos desde el navegador web. Ir a Cloud Shell
- En Cloud Shell, establece el proyecto actual como el
ID del proyecto de Google Cloud; y, luego, almacena el mismo
ID del proyecto en la variable de shell
projectid
: Reemplaza PROJECT_ID por el ID del proyecto. Si es necesario, puedes ubicar el ID del proyecto en la consola de Google Cloud. Para obtener más información, consulta Encuentra el ID del proyecto.projectid="PROJECT_ID" gcloud config set project ${projectid}
-
Enable the IAM, Compute Engine, Notebooks, Cloud Storage, and Vertex AI APIs:
gcloud services enable iam.googleapis.com
compute.googleapis.com notebooks.googleapis.com storage.googleapis.com aiplatform.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/notebooks.admin, roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/storage.Admin
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
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
Si lo deseas, 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
Crea un bucket de Cloud Storage
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
Reemplaza BUCKET_NAME por el nombre del bucket:
Crea y sube una secuencia de comandos posterior al 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 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.
Sube un archivo a tu bucket de Cloud Storage.
gcloud storage cp poststartup.sh gs://$BUCKET_NAME
Crea una cuenta de servicio personalizada
Cuando creas una instancia de notebooks administrados por el usuario, 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
user-managed-notebook-sa
:gcloud iam service-accounts create user-managed-notebook-sa \ --display-name="user-managed-notebook-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:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
Asigna el rol de IAM de 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"
Crea una instancia de notebooks administrados por el usuario
En la consola de Google Cloud, ve a la página Notebooks administrados por el usuario.
Haz clic en
Crear nueva y selecciona Opciones avanzadas.Se abre la página Crear instancia.
En la página Crear instancia, 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, haz doble clic en el archivo
poststartup.sh
, haz clic una vez más y, luego, en Seleccionar.
- Secuencia de comandos posterior al inicio: haz clic en Explorar, haz doble clic en el archivo
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 la Clave de encriptación administrada por Google esté seleccionada 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, evita que la instancia reciba comunicación no solicitada desde Internet o desde 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
user-managed-notebook-sa@$projectid.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.Para obtener más información sobre cómo otorgar acceso, consulta Administra el acceso a la interfaz de JupyterLab de una instancia de notebooks administrados por el usuario.
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, como HTML, PDF o LaTeX. Algunos de los notebooks del repositorio de GitHub de IA generativa de Google Cloud 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.
Opcional: Otorga el rol de usuario de cuenta de servicio al usuario de la instancia
Si creas la instancia de notebooks administrados por el usuario para otro usuario, debes otorgarle el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en la cuenta de servicio personalizada user-managed-notebook-sa
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"
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 notebooks administrados por el usuario
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. 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 IA generativa de Google Cloud clonado.
En la consola de Google Cloud, ve a la página Notebooks administrados por el usuario.
En la lista de instancias de notebooks administrados por el usuario, haz clic en el vínculo Abrir JupyterLab de la instancia que creaste.
En la lista de carpetas, verás una carpeta
generative-ai
. Esta carpeta contiene el repositorio clonado de GitHub.
Supervisa el estado a través de Monitoring
Puedes supervisar las métricas del sistema y de la aplicación para las instancias de notebooks administrados por el usuario mediante la consola de Google Cloud. 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 Notebooks administrados por el usuario.
Haz clic en el nombre de la instancia de notebooks administrados por el usuario de la que deseas ver las métricas.
En la página Detalles del notebook, 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 un programa de instancias de VM para tu instancia de notebooks administrados por el usuario.
Debido a que una instancia de notebooks administrados 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 para ella.
Usa un programa de instancias de VM para iniciar y detener tu instancia de notebooks administrados por el usuario. Durante las horas en que se detiene la instancia, solo pagas por los costos de Cloud Storage.
Puedes adjuntar un programa de instancias a cualquier instancia de VM que se encuentre en la misma región, por lo que puedes usar el mismo programa de instancias para controlar todas las instancias de notebooks administrados por el usuario 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 otorgar permiso a la cuenta de servicio predeterminada de Compute Engine para iniciar y detener las instancias de notebooks administrados por el usuario, debes asignarle el rol personalizado 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:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Crea y adjunta la programación
Para crear una programa de instancias que inicie tu instancia de notebooks administrados por el usuario a las 7 a.m. y las detenga a las 6 p.m., haz lo siguiente:
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.Para identificar el nombre de tu instancia de notebooks administrados por el usuario, ejecuta el siguiente comando y anota el valor
NAME
que muestra lo siguiente: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 notebooks administrados por el usuario.
Adjunta el programa de instancias a tu instancia de notebooks administrados por el usuario:
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.
Realiza una limpieza
Para evitar que se apliquen cargos a su cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Puedes borrar los recursos individuales del proyecto de la siguiente manera:
En la consola de Google Cloud, ve a la página Notebooks administrados por el usuario.
Selecciona tu instancia de notebook administrado por el usuario.
Haz clic en Borrar.
En Cloud Shell, ejecuta los siguientes comandos para borrar los recursos individuales restantes.
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
¿Qué sigue?
- Trabaja en el codelab Vertex AI para crear un notebook seguro administrado por el usuario.
- Obtén más información sobre cómo usar los Controles del servicio de VPC para configurar una instancia de notebooks administrados por el usuario en un perímetro de servicio.
- Obtén más información sobre las prácticas recomendadas y las arquitecturas de referencia para el diseño de VPC.