Crea un'istanza Vertex AI Workbench sicura in una rete VPC


Questo tutorial è rivolto a data scientist, ricercatori e amministratori di rete. Mostra come proteggere un'istanza Vertex AI Workbench creandola in una rete Virtual Private Cloud (VPC).

Una rete VPC è una versione virtuale di una rete fisica implementata all'interno della rete di produzione di Google. Si tratta di una rete privata con indirizzi IP, subnet e gateway di rete privati. Nelle aziende, le reti VPC vengono utilizzate per proteggere i dati e le istanze controllando l'accesso da altre reti e da internet.

La rete VPC in questo tutorial è una rete autonoma. Tuttavia, puoi condividere una rete VPC da un progetto (chiamato progetto host) ad altri progetti nella tua organizzazione Google Cloud. Per saperne di più sul tipo di rete VPC da utilizzare, consulta Singola rete VPC e VPC condiviso.

In base alle best practice per la sicurezza della rete, la rete VPC in questo tutorial utilizza una combinazione di Cloud Router, Cloud NAT e Accesso privato Google per proteggere l'istanza nei seguenti modi:

  • L'istanza di Vertex AI Workbench non ha un indirizzo IP esterno.
  • L'istanza ha accesso a internet in uscita tramite un router Cloud a livello di regione e il gateway Cloud NAT per poter installare pacchetti software o altre dipendenze. Cloud NAT consente le connessioni in uscita e le risposte in entrata a queste connessioni. Non consente richieste in entrata non richieste da internet.
  • L'istanza utilizza l'accesso privato Google per raggiungere gli indirizzi IP esterni delle API e dei servizi Google.

Il tutorial mostra anche come:

  • Crea uno script post-avvio per clonare automaticamente un repository GitHub appena creata.
  • Utilizza Cloud Monitoring per monitorare l'istanza Vertex AI Workbench.
  • Utilizza l'API Compute Engine per avviare e arrestare automaticamente l'istanza in modo da ottimizzare i costi.

Diagramma dell'architettura di un'istanza di Vertex AI Workbench in una rete VPC.

Obiettivi

  • Crea una rete VPC e aggiungi una subnet con accesso privato Google attivo.
  • Crea un router cloud e Cloud NAT per la rete VPC.
  • Crea un'istanza di Vertex AI Workbench nella sottorete utilizzando un script di post-avvio che clona il repository GitHub di Google Cloud Generative AI.
  • Abilitare Cloud Monitoring per l'istanza.
  • Crea una pianificazione dell'istanza VM e collegala all'istanza.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  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. Make sure that billing is enabled for your Google Cloud project.

  4. Apri Cloud Shell per eseguire i comandi elencati in questo tutorial. Cloud Shell è un ambiente shell interattivo per Google Cloud che ti consente di gestire progetti e risorse nel browser web.
  5. Vai a Cloud Shell
  6. In Cloud Shell, imposta il progetto attuale sul ID progetto Google Cloud e archiviare lo stesso ID progetto nella variabile shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    Sostituisci PROJECT_ID con il tuo ID progetto. Se necessario, puoi Individua il tuo ID progetto nella console Google Cloud. Per ulteriori informazioni, consulta Trovare l'ID progetto.
  7. 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
  8. Se non sei il proprietario del progetto, chiedi al proprietario di concederti l'autorizzazione Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin) ruolo. Devi disporre di questo ruolo per concedere i ruoli IAM nel passaggio successivo.
  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:myemail@example.com.

    • Replace ROLE with each individual role.

Creare e configurare una VPC autonoma

  1. Crea una rete VPC denominata securevertex-vpc:

    gcloud compute networks create securevertex-vpc --subnet-mode=custom
    
  2. Crea una subnet denominata securevertex-subnet-a con un intervallo IPv4 principale di10.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
    

    Puoi fornire un valore diverso per il parametro --range. Tuttavia, la lunghezza minima del prefisso per un singolo blocco note è pari a 29. Per ulteriori informazioni, consulta Intervalli di subnet IPv4.

  3. Crea un router Cloud regionale denominato cloud-router-us-central1:

    gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
    
  4. Crea un gateway Cloud NAT regionale denominato 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 Cloud Storage

In questa sezione creerai un bucket Cloud Storage in cui inserire una sessione che puoi eseguire quando crei una nuova istanza di Vertex AI Workbench.

  1. Crea il bucket Cloud Storage:

    gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAME
    

    Sostituisci BUCKET_NAME con un nome di bucket univoco.

  2. Imposta la variabile shell BUCKET_NAME e verifica che sia stata inserita correttamente:

    BUCKET_NAME=BUCKET_NAME
    echo $BUCKET_NAME
    

Crea e carica uno script post-avvio

In questa sezione creerai uno script post-avvio per clonare un GitHub in una nuova istanza di Vertex AI Workbench.

  1. Per creare lo script, utilizza un editor di testo come vim oppure nano per creare un file poststartup.sh. Devi anteporre sudo per avere l'autorizzazione a scrivere nel file, ad esempio:

    sudo vim poststartup.sh
    
  2. Incolla il seguente script shell nel file:

    #! /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. Salva il file come segue:

    • Se utilizzi vim, premi il tasto Esc e poi digita :wq per salvare il file ed uscire.
    • Se utilizzi nano, digita Control+O e premi Enter per salvare il file, quindi digita Control+X per uscire.
  4. Carica il file nel bucket Cloud Storage:

    gcloud storage cp poststartup.sh gs://BUCKET_NAME
    

Crea un account di servizio personalizzato

Quando crei un'istanza di Vertex AI Workbench, ti consigliamo vivamente di deselezionare la casella di controllo Utilizza l'account di servizio predefinito di Compute Engine e di specificare un account di servizio personalizzato. Se la tua organizzazione non applica il vincolo dei criteri dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts, all'account di servizio predefinito di Compute Engine (e quindi a chiunque tu specifichi come utente dell'istanza) viene concesso il ruolo Editor (roles/editor) nel tuo progetto. Per disattivare questo comportamento, consulta Disattivare l'assegnazione automatica dei ruoli agli account di servizio predefiniti.

  1. Crea un account di servizio personalizzato denominato workbench-sa:

    gcloud iam service-accounts create workbench-sa \
        --display-name="workbench-sa"
    
  2. Assegnare il ruolo IAM Visualizzatore oggetti Storage al servizio :

    gcloud projects add-iam-policy-binding $projectid \
        --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
        --role="roles/storage.objectViewer"
    
  3. Assegnare il ruolo IAM Writer metriche Monitoring al servizio :

    gcloud projects add-iam-policy-binding $projectid \
        --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    
  4. Assegna il ruolo IAM Utente Vertex AI all'account di servizio:

    gcloud projects add-iam-policy-binding $projectid \
        --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
        --role="roles/aiplatform.user"
    

crea un'istanza di Vertex AI Workbench

In questa sezione crei l'istanza di Vertex AI Workbench. Quando viene creata l'istanza, lo script di post-avvio che hai creato viene eseguito automaticamente.

  1. Nella console Google Cloud, vai alla scheda Istanze nella pagina Vertex AI Workbench.

    Vai a Vertex AI Workbench

  2. Fai clic su  Crea nuova e poi su Opzioni avanzate.

    Si apre la pagina Nuova istanza.

  3. Nella pagina Nuova istanza, nella sezione Dettagli, fornisci le seguenti informazioni per la nuova istanza e poi fai clic su Continua:

    • Nome: fornisci un nome per la nuova istanza o accetta quello predefinito.
    • Regione: seleziona us-central1.
    • Zona: seleziona us-central1-a.
  4. Nella sezione Ambiente, fornisci quanto segue e poi fai clic su Continua:

    • Script post-avvio: fai clic su Sfoglia, poi su  Visualizza risorse secondarie accanto al nome del bucket, su poststartup.sh e infine su Seleziona.
  5. Nella sezione Tipo di macchina, fornisci i dati seguenti e fai clic su Continua:

    • VM protetta: seleziona le seguenti caselle di controllo:

      • Avvio protetto
      • Virtual Trusted Platform Module (vTPM)
      • Monitoraggio dell'integrità
  6. Nella sezione Dischi, assicurati che la chiave di crittografia gestita da Google è selezionata, poi fai clic su Continua:

  7. Nella sezione Networking, fornisci quanto segue, quindi fai clic su Continua:

    • Networking: seleziona Rete in questo progetto e completa la seguenti passaggi:

      1. Nel campo Rete, seleziona securevertex-vpc.

      2. Nel campo Subnet, seleziona securevertex-subnet-a.

      3. Deseleziona la casella di controllo Assegna indirizzo IP esterno. La mancata assegnazione di un indirizzo IP esterno impedisce all'istanza di ricevere comunicazioni non richieste dall'internet o da altre reti VPC.

      4. Seleziona la casella di controllo Consenti accesso proxy.

  8. Nella sezione IAM e sicurezza, fornisci quanto segue e fai clic su Continua:

    • IAM e sicurezza: per concedere a un singolo utente l'accesso all'interfaccia JupyterLab dell'istanza, completa i seguenti passaggi:

      1. Seleziona Singolo utente.
      2. Nel campo Email utente, inserisci l'indirizzo email di un singolo account utente. Se crei l'istanza per qualcun altro, si applicano le seguenti condizioni:
        • In quanto creatore dell'istanza, non hai accesso alla proprietà Interfaccia JupyterLab. Tuttavia, puoi comunque controllare l'istanza e avviarla, interromperla o eliminarla.
        • Dopo aver creato l'istanza, devi concedere all'utente Ruolo Utente account di servizio (roles/iam.serviceAccountUser) nel servizio dell'istanza . Consulta (Facoltativo) Concedi il ruolo Utente account di servizio all'utente dell'istanza.
      3. Deseleziona la casella di controllo Utilizza account di servizio predefinito di Compute Engine. Questo passaggio è importante perché l'account di servizio predefinito di Compute Engine (e quindi il singolo utente che hai appena specificato) potrebbe avere il ruolo Editor (roles/editor) nel tuo progetto.
      4. Nel campo Indirizzo email account di servizio, inserisci quanto segue, sostituendo PROJECT_ID con l'ID progetto:

        workbench-sa@PROJECT_ID.iam.gserviceaccount.com
        

        (Questo è il servizio personalizzato che hai creato in precedenza). Questo account di servizio ha autorizzazioni limitate.

        Per saperne di più sulla concessione dell'accesso, consulta Gestire l'accesso all'interfaccia JupyterLab di un'istanza di Vertex AI Workbench.

    • Opzioni di sicurezza: deseleziona la seguente casella di controllo:

      • Accesso root all'istanza

      Seleziona la seguente casella di controllo:

      • nbconvert: nbconvert consente agli utenti di esportare e scaricare un file del notebook come un altro tipo di file, ad esempio HTML, PDF o LaTeX. Questa impostazione è obbligatoria per alcuni dei notebook nel repository GitHub di Google Cloud Generative AI.

      Deseleziona la casella di controllo seguente:

      • Download del file

      Seleziona la casella di controllo seguente, a meno che non ti trovi in un ambiente di produzione:

      • Accesso terminale: consente l'accesso del terminale all'istanza dall'interno Interfaccia utente JupyterLab.
  9. Nella sezione Integrità del sistema, seleziona Upgrade automatico dell'ambiente e fornire quanto segue:

    • In Report, seleziona le seguenti caselle di controllo:

      • Segnalare lo stato del sistema
      • Segnalare metriche personalizzate a Cloud Monitoring
      • Installa Cloud Monitoring
      • Segnala lo stato del DNS per i domini Google richiesti
  10. Fai clic su Crea e attendi qualche minuto per Vertex AI Workbench l'istanza da creare.

(Facoltativo) Concedi il ruolo Utente account di servizio all'utente dell'istanza

Se stai creando l'istanza di Vertex AI Workbench per un altro utente, devi concedergli il ruolo Utente account di servizio (roles/iam.serviceAccountUser) nell'account di servizio personalizzato workbench-sa come segue:

gcloud iam service-accounts add-iam-policy-binding \
    workbench-sa@PROJECT_ID.iam.gserviceaccount.com \
    --member="user:USER_EMAIL" \
    --role="roles/iam.serviceAccountUser"

Sostituisci i seguenti valori:

  • PROJECT_ID: l'ID progetto
  • USER_EMAIL: l'indirizzo email dell'utente

Verifica che l'istanza di Vertex AI Workbench sia stata creata

Vertex AI Workbench crea un Vertex AI Workbench in base alle proprietà specificate e avvia automaticamente in esecuzione in un'istanza Compute Engine.

Quando l'istanza è pronta per l'uso, Vertex AI Workbench attiva un link Apri JupyterLab. Questo link è accessibile solo a il singolo utente specificato al momento della creazione dell'istanza.

Apri l'istanza in JupyterLab e verifica che il repository GitHub di Google Cloud AI generativa clonato sia presente.

  1. Nella console Google Cloud, vai alla pagina Vertex AI Workbench.

    Vai a Vertex AI Workbench

  2. Nell'elenco delle istanze di Vertex AI Workbench, fai clic sul link Apri JupyterLab per l'istanza che hai creato.

    Nell'elenco delle cartelle vedrai una cartella generative-ai. Questo contenente il repository GitHub clonato.

Monitorare lo stato di integrità tramite il monitoraggio

Puoi monitorare le metriche di sistema e dell'applicazione per delle istanze di Vertex AI Workbench, nella console Google Cloud. Per saperne di più sul monitoraggio delle istanze sulla creazione di metriche personalizzate, consulta Monitora lo stato di integrità.

  1. Nella console Google Cloud, vai alla pagina Vertex AI Workbench.

    Vai a Vertex AI Workbench

  2. Fai clic sul nome dell'istanza di Vertex AI Workbench di cui vuoi visualizzare le metriche.

  3. Nella pagina Dettagli istanza, fai clic sulla scheda Monitoring. Rivedi l'utilizzo della CPU e i byte di rete per l'istanza del blocco note. Per scoprire come interpretare queste metriche, consulta Esaminare le metriche delle risorse.

    Se hai appena creato l'istanza, non vedrai immediatamente alcun dato. Attendi qualche minuto e aggiorna la scheda della console.

Crea una pianificazione delle istanze VM per l'istanza di Vertex AI Workbench

Poiché un'istanza di Vertex AI Workbench è un'istanza VM di Compute Engine, puoi utilizzare le API per creare una pianificazione di istanza VM.

Utilizza una pianificazione di istanze VM per avviare e arrestare Vertex AI Workbench. Durante le ore in cui viene arrestata, paghi solo i costi di Cloud Storage.

Puoi associare una pianificazione delle istanze a qualsiasi istanza VM che si trova nella stessa regione, in modo da poter utilizzare la stessa pianificazione delle istanze per controllare tutte le istanze di Vertex AI Workbench nella regione.

Per saperne di più sulle pianificazioni delle istanze VM, consulta Pianificazione dell'avvio e dell'arresto di un'istanza VM.

Crea un ruolo IAM personalizzato

Come best practice per la sicurezza, consigliamo di creare una configurazione IAM personalizzata che dispone solo delle seguenti autorizzazioni e assegnandolo all'account di servizio predefinito di Compute Engine:

  • compute.instances.start
  • compute.instances.stop
  1. In Cloud Shell, crea un ruolo personalizzato denominato Vm_Scheduler e includi le autorizzazioni necessarie:

    gcloud iam roles create Vm_Scheduler \
        --project=$projectid \
        --title=vm-scheduler-notebooks \
        --permissions="compute.instances.start,compute.instances.stop" --stage=ga 
    
  2. Descrivi il ruolo personalizzato:

    gcloud iam roles describe Vm_Scheduler \
    --project=$projectid
    

Assegna il ruolo all'account di servizio predefinito di Compute Engine

Per assegnare al servizio predefinito Compute Engine l'autorizzazione per avviare e interrompere di Vertex AI Workbench, devi assegnargli il ruolo personalizzato Vm_Scheduler.

L'account di servizio predefinito di Compute Engine per il progetto ha quanto segue indirizzo email: PROJECT_NUMBER-compute@developer.gserviceaccount.com, dove PROJECT_NUMBER è il numero del tuo progetto.

  1. Identifica il numero del progetto e memorizzalo nella shell project_number variabile:

    project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)')
    echo $project_number
    
  2. Assegna il ruolo personalizzato all'account di servizio predefinito:

    gcloud projects add-iam-policy-binding $projectid \
        --member="serviceAccount:service-$project_number@compute-system.iam.gserviceaccount.com" \
        --role="projects/$projectid/roles/Vm_Scheduler"
    

Crea e allega la pianificazione

Per creare una pianificazione dell'istanza che avvii dell'istanza di Vertex AI Workbench alle 07:00 lo interrompe alle 18:00:

  1. Crea una pianificazione di inizio e interruzione denominata 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
    

    Sostituisci TIME_ZONE con il valore basato sulla posizione Il fuso orario IANA per questa pianificazione dell'istanza, ad esempio America/Chicago. Se omesso, il valore predefinito È in uso UTC. Per ulteriori informazioni, consulta fuso orario.

  2. Identifica il nome della tua istanza di Vertex AI Workbench eseguendo questo comando e annotando il valore NAME che restituisce:

    gcloud compute instances list
    
  3. Memorizza il nome nella variabile shell notebook_vm:

    notebook_vm=NOTEBOOK_VM_NAME
    echo $notebook_vm
    

    Sostituisci NOTEBOOK_VM_NAME con Nome dell'istanza di Vertex AI Workbench.

  4. Collega la pianificazione dell'istanza al tuo Istanza Vertex AI Workbench:

    gcloud compute instances add-resource-policies $notebook_vm \
        --resource-policies=optimize-notebooks \
        --zone=us-central1-a
    
  5. Descrivi la pianificazione dell'istanza:

    gcloud compute resource-policies describe optimize-notebooks \
        --region=us-central1
    

Per verificare se la pianificazione dell'istanza viene eseguita correttamente, controlla il Audit log di Compute Engine per il criterio delle risorse di pianificazione delle istanze e l'istanza VM collegata. Potresti dover attendere fino a 15 minuti dopo l'orario programmato per ogni operazione.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate. In questo tutorial, elimina il progetto che contiene le risorse oppure mantenere il progetto ed eliminare Google Cloud.

Puoi eliminare le singole risorse nel progetto come segue eseguendo i seguenti comandi in Cloud Shell:

  1. Rimuovi la pianificazione dall'istanza:

    gcloud compute instances remove-resource-policies $notebook_vm \
        --resource-policies=optimize-notebooks \
        --zone=us-central1-a --quiet
    
  2. Elimina la pianificazione delle istanze:

    gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
    
  3. Elimina il ruolo Vm_Scheduler:

    gcloud iam roles delete Vm_Scheduler --project=$projectid
    
  4. Elimina l'istanza di Vertex AI Workbench:

    gcloud workbench instances delete $notebook_vm \
        --location=us-central1-a \
        --quiet
    
  5. Elimina l'account di servizio:

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

    gcloud storage rm -r gs://BUCKET_NAME
    
  7. Elimina il gateway Cloud NAT regionale:

    gcloud compute routers nats delete cloud-nat-us-central1 \
        --region=us-central1 \
        --router=cloud-router-us-central1 \
        --quiet
    
  8. Elimina il router Cloud a livello di regione:

    gcloud compute routers delete cloud-router-us-central1 \
        --region=us-central1 \
        --quiet
    
  9. Elimina la subnet VPC:

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

    gcloud compute networks delete securevertex-vpc --quiet 
    

Passaggi successivi

- Scopri di più sulle istanze di Vertex AI Workbench. - Scopri come gestire l'accesso a un'istanza. - Scopri come utilizzare un'istanza all'interno di un perimetro di servizio.