Crea una instancia segura de Vertex AI Workbench en una red de VPC


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 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:

  • 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.

Diagrama de arquitectura de una instancia de Vertex AI Workbench en una red de VPC.

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 Vertex AI Workbench en la subred mediante una secuencia de comandos posterior al inicio que clona el repositorio de GitHub de laIA 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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

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

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Select or create a Google Cloud project.

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. 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.
  5. Ir a Cloud Shell
  6. En Cloud Shell, configura el proyecto actual como el ID del proyecto de Google Cloud y almacénalo en la variable de shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${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.
  7. Habilita las APIs de IAM, Compute Engine, Notebooks, Cloud Storage, and Vertex AI:

    gcloud services enable iam.googleapis.com  compute.googleapis.com notebooks.googleapis.com storage.googleapis.com aiplatform.googleapis.com
  8. Si no eres el propietario del proyecto, pídele al propietario que te otorgue el rol de administrador de IAM del proyecto (roles/resourcemanager.projectIamAdmin). Debes tener este rol para otorgar roles de IAM en el siguiente paso.
  9. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/aiplatform.user, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/monitoring.viewer, 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:[email protected].

    • Replace ROLE with each individual role.

Crea y configura una VPC independiente

  1. Crea una red de VPC llamada securevertex-vpc:

    gcloud compute networks create securevertex-vpc --subnet-mode=custom
    
  2. Crea una subred llamada securevertex-subnet-a, con un rango IPv4 principal de 10.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.

  3. Crea un Cloud Router regional llamado cloud-router-us-central1:

    gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
    
  4. 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.

  1. 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.

  2. 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.

  1. Para crear la secuencia de comandos, usa un editor de texto, como vimo nano, para crear un archivo poststartup.sh. Debes anteponer sudo para tener permiso para escribir en el archivo, por ejemplo:

    sudo vim poststartup.sh
    
  2. 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
    
  3. Guarda el archivo de la siguiente manera:

    • Si usas vim, presiona la tecla Esc y, a continuación, escribe :wq para guardar el archivo y salir.
    • Si usas nano, escribe Control+O y presiona Enter para guardar el archivo y, luego, escribe Control+X para salir.
  4. 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.

  1. Crea una cuenta de servicio personalizada llamada workbench-sa:

    gcloud iam service-accounts create workbench-sa \
        --display-name="workbench-sa"
    
  2. 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"
    
  3. 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"
    
  4. 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.

  1. En la consola de Google Cloud, ve a la pestaña Instancias. de la página Vertex AI Workbench.

    Ir a Vertex AI Workbench

  2. Haz clic en  Crear nueva y haz clic en Opciones avanzadas.

    Se abrirá la página Instancia nueva.

  3. 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.
  4. 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  Ver recursos secundarios junto al nombre del bucket. Haz clic en poststartup.sh y, luego, en Select.
  5. 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
  6. 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:

  7. 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:

      1. En el campo Red, selecciona securevertex-vpc.

      2. En el campo Subred, selecciona securevertex-subnet-a.

      3. 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.

      4. Selecciona la casilla de verificación Permitir el acceso mediante proxies.

  8. 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:

      1. Selecciona Usuario único.
      2. 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.
      3. 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.
      4. 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 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.
  9. 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
  10. 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 IA generativa de Google Cloud clonado.

  1. En la consola de Google Cloud, ve a la página Vertex AI Workbench.

    Ir a Vertex AI Workbench

  2. 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 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.

  1. En la consola de Google Cloud, ve a la página Vertex AI Workbench.

    Ir a Vertex AI Workbench

  2. Haz clic en el nombre de la instancia de Vertex AI Workbench para las que quieres ver las métricas.

  3. 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
  1. 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 
    
  2. 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: [email protected], En el ejemplo anterior, PROJECT_NUMBER es el número de tu proyecto.

  1. 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
    
  2. Asigna el rol personalizado a la cuenta de servicio predeterminada:

    gcloud projects add-iam-policy-binding $projectid \
        --member="serviceAccount:[email protected]" \
        --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.:

  1. 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 predeterminado UTC. Para obtener más información, consulta la zona horaria.

  2. Identifica el nombre de tu instancia de Vertex AI Workbench ejecutando lo siguiente y anota el valor NAME que devuelve:

    gcloud compute instances list
    
  3. 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.

  4. 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
    
  5. 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.

Limpia

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.

Para borrar los recursos individuales del proyecto, ejecuta los siguientes comandos en Cloud Shell:

  1. Quita la programación de la instancia:

    gcloud compute instances remove-resource-policies $notebook_vm \
        --resource-policies=optimize-notebooks \
        --zone=us-central1-a --quiet
    
  2. Borra la programación de instancias:

    gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
    
  3. Borra el rol Vm_Scheduler:

    gcloud iam roles delete Vm_Scheduler --project=$projectid
    
  4. Borra la instancia de Vertex AI Workbench:

    gcloud workbench instances delete $notebook_vm \
        --location=us-central1-a \
        --quiet
    
  5. Borra la cuenta de servicio:

    gcloud iam service-accounts delete workbench-sa@$projectid.iam.gserviceaccount.com --quiet 
    
  6. Borra el bucket de Cloud Storage:

    gcloud storage rm -r gs://BUCKET_NAME
    
  7. Borra la puerta de enlace regional de Cloud NAT:

    gcloud compute routers nats delete cloud-nat-us-central1 \
        --region=us-central1 \
        --router=cloud-router-us-central1 \
        --quiet
    
  8. Borra el Cloud Router regional:

    gcloud compute routers delete cloud-router-us-central1 \
        --region=us-central1 \
        --quiet
    
  9. Borra la subred de VPC:

    gcloud compute networks subnets delete securevertex-subnet-a \
        --region=us-central1 \
        --quiet 
    
  10. Borra la red de VPC:

    gcloud compute networks delete securevertex-vpc --quiet 
    

¿Qué sigue?

- Obtén información sobre las instancias de Vertex AI Workbench. - Obtén información sobre cómo administrar el acceso a una instancia. - Aprende a usar una instancia dentro de un perímetro de servicio.