Vertex AI crea un blocco note sicuro gestito dall'utente

1. Introduzione

Le istanze di notebook gestiti dall'utente di Vertex AI Workbench ti consentono di creare e gestire istanze di macchine virtuali (VM) di deep learning preconfigurate con JupyterLab.

Le istanze dei blocchi note gestiti dall'utente sono dotate di una suite preinstallata di pacchetti di deep learning, tra cui il supporto per i framework di TensorFlow e PyTorch. Puoi configurare istanze solo CPU o abilitate alla GPU.

Cosa creerai

Questo tutorial descrive il processo di deployment di un notebook sicuro gestito dall'utente basato sulle best practice di networking e sicurezza. Ecco i passaggi da seguire:

  1. Crea un VPC
  2. Crea un router Cloud e Cloud NAT
  3. Configura l'istanza del notebook con le impostazioni di sicurezza appropriate

Questo tutorial fornisce istruzioni dettagliate per ogni passaggio. Include anche suggerimenti e best practice per proteggere i notebook gestiti dagli utenti. La figura 1 mostra un'illustrazione del deployment che utilizza un VPC autonomo.

Figura 1

2292244ba0b11f71.png

Cosa imparerai a fare

  • Come determinare se una rete VPC condivisa o autonoma è adatta alla tua organizzazione
  • Come creare un VPC autonomo
  • Come creare un router Cloud e Cloud NAT
  • Come creare un notebook gestito dall'utente
  • Come accedere a un notebook gestito dall'utente
  • Come monitorare l'integrità del notebook gestito dall'utente
  • Come creare e applicare una pianificazione delle istanze

Che cosa ti serve

  • Progetto Google Cloud

Autorizzazioni IAM

2. Rete VPC

In sostanza, una rete VPC è come una rete fisica, ad eccezione del fatto che è virtualizzata all'interno di Google Cloud. Una rete VPC è una risorsa globale formata da subnet regionali. Le reti VPC sono isolate logicamente tra loro in Google Cloud.

VPC autonomo

La Figura 2 mostra un esempio di VPC globale autonomo costituito da una subnet regionale (us-central1) oltre a Cloud Router e Cloud NAT utilizzati per consentire al notebook gestito dall'utente di stabilire in modo sicuro la connettività a internet.

Figura 2

2292244ba0b11f71.png

VPC condiviso

Un VPC condiviso consente di esportare le subnet da una rete VPC in un progetto host ai progetti di servizio nella stessa organizzazione. Il progetto host contiene risorse di networking condivise con il progetto di servizio, come subnet, Cloud NAT e regole firewall. Il progetto di servizio contiene risorse a livello di applicazione che sfruttano le risorse di rete nel progetto host.

La figura 3 mostra un VPC condiviso globale, in cui l'infrastruttura di rete e di sicurezza viene implementata nel progetto host, mentre i carichi di lavoro vengono implementati nel progetto di servizio.

Figura 3

1354a9323c8e5787.png

VPC autonomo e VPC condiviso

Una singola rete VPC è sufficiente per molti casi d'uso semplici, in quanto è più facile da creare, mantenere e comprendere rispetto ad alternative più complesse. Il VPC condiviso è uno strumento efficace per le organizzazioni con più team, in quanto consente di estendere la semplicità dell'architettura di una singola rete VPC su più gruppi di lavoro tramite l'utilizzo di progetti di servizio.

Best practice VPC utilizzata nel tutorial

  • Abilita Cloud NAT per accedere al notebook.
  • Attiva l'accesso privato Google quando crei le subnet.
  • Crea regole firewall prescrittive per ridurre il traffico non richiesto, ad esempio non utilizzare 0.0.0.0/0 tcp, ma definisci gli indirizzi IP esatti di subnet o host.
  • Sfrutta le policy firewall per ampliare l'ambito delle regole di ingresso, ad esempio geolocalizzazioni, elenchi di Threat Intelligence, nomi di dominio di origine e così via.

3. Best practice per Notebook

Dimensionare correttamente le istanze

  • Interrompere e/o eliminare le istanze inutilizzate
  • Utilizza un'istanza iniziale più piccola e itera con dati di esempio più piccoli
  • Aumenta le istanze in base alle esigenze
  • Sperimenta con set di dati più piccoli

Selezionare i tipi di macchina giusti

  • VM ottimizzate per i costi
  • Utilizzare al meglio le risorse hardware per ridurre i costi
  • Fino al 31% di risparmio rispetto a N1
  • Risparmi aggiuntivi (20-50%) per impegni di 1 o 3 anni
  • Aumentare le dimensioni della macchina o aggiungere GPU può migliorare le prestazioni e superare gli errori di limitazioni della memoria.

Pianificare l'arresto delle istanze

  • Disattiva le istanze quando sono inattive (paga solo l'archiviazione su disco)
  • Pianifica l'arresto e l'avvio automatico delle istanze VM del notebook a orari specifici

Monitorare lo stato di integrità del notebook

Considerazioni sulla sicurezza

Di seguito sono riportate le considerazioni sulla sicurezza consigliate durante la creazione di un notebook gestito dall'utente:

  • Seleziona l'opzione per l'accesso al notebook "solo per un utente". Se l'utente specificato non è il creatore dell'istanza, devi concedergli il ruolo Utente service account (roles/iam.serviceAccountUser) sul service account dell'istanza.
  • Disattiva le seguenti opzioni:
  • accesso root
  • nbconvert
  • download di file dall'interfaccia utente di JupyterLab
  • Cloud NAT verrà utilizzato al posto dell'assegnazione di un indirizzo IP esterno al notebook gestito dall'utente.
  • Seleziona le seguenti opzioni di calcolo:
  • Avvio protetto
  • Virtual Trusted Platform Module (vTPM)
  • Monitoraggio dell'integrità

4. Prima di iniziare

Aggiornare il progetto per supportare il tutorial

Questo tutorial utilizza le variabili $per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.

In Cloud Shell, esegui le seguenti operazioni:

gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid

5. Configurazione VPC

Crea il VPC autonomo

In Cloud Shell, esegui le seguenti operazioni:

gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom

Crea la subnet del notebook gestito dall'utente

In Cloud Shell, esegui le seguenti operazioni:

gcloud compute networks subnets create securevertex-subnet-a --project=$projectid --range=10.10.10.0/28 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access

Configurazione di Cloud Router e NAT

Cloud NAT viene utilizzato nel tutorial per i download dei pacchetti software del notebook perché l'istanza del notebook gestita dall'utente non ha un indirizzo IP esterno. Cloud NAT offre anche funzionalità NAT in uscita, il che significa che gli host internet non sono autorizzati a iniziare la comunicazione con un notebook gestito dall'utente, rendendolo più sicuro.

In Cloud Shell, crea il router cloud regionale.

gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1

In Cloud Shell, crea il gateway Cloud NAT regionale.

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

6. Crea un bucket di archiviazione

I bucket di archiviazione offrono caricamento/recupero sicuro dei file. Nel tutorial, l'archiviazione cloud conterrà uno script post-avvio per installare i pacchetti di AI generativa nei notebook gestiti dall'utente.

Crea un bucket Cloud Storage e sostituisci BUCKET_NAME con un nome univoco a livello globale che preferisci.

In Cloud Shell, crea un bucket di archiviazione univoco.

gsutil mb -l us-central1 -b on gs://BUCKET_NAME

Memorizza "BUCKET_NAME" per la durata del lab

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

7. Crea uno script post-avvio

Per attivare il download dei pacchetti di AI generativa, crea uno script post-avvio in Cloud Shell utilizzando l'editor vi o nano e salvalo come poststartup.sh.

#! /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

Esempio:

vpc_admin@cloudshell$ more poststartup.sh 
#! /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

Carica lo script post-avvio nel bucket di archiviazione da Cloud Shell utilizzando gsutil

gsutil cp poststartup.sh gs://$BUCKET_NAME

8. Crea un account di servizio

Per fornire un controllo preciso del notebook gestito dall'utente, è necessario un service account. Una volta generate, le autorizzazioni del service account possono essere modificate in base ai requisiti aziendali. Nel tutorial, al service account verranno applicate le seguenti regole:

Prima di procedere, devi l'API Service Account.

In Cloud Shell, crea il service account.

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

In Cloud Shell, aggiorna il service account con il ruolo Visualizzatore oggetti Storage

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"

In Cloud Shell, aggiorna il service account con il ruolo Utente Vertex AI

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

In Cloud Shell, elenca il service account e annota l'indirizzo email che verrà utilizzato durante la creazione del notebook gestito dall'utente.

gcloud iam service-accounts list

Esempio:

$ gcloud iam service-accounts list
DISPLAY NAME: user-managed-notebook-sa
EMAIL: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
DISABLED: False

9. Crea un notebook gestito dall'utente sicuro

Un'istanza di notebook gestiti dall'utente è un'istanza di macchina virtuale Deep Learning con le librerie di machine learning e di data science più recenti preinstallate. Se vuoi, puoi includere GPU Nvidia per l'accelerazione hardware.

Abilita le API consumer

l'API Notebooks

Crea il notebook gestito dall'utente

  1. Vai a Workbench
  2. Seleziona Blocchi note gestiti dall'utente, quindi Crea blocco note. Si apre la pagina Crea un notebook gestito dall'utente.
  3. Se è stato eseguito il deployment di un notebook esistente, seleziona Blocchi note gestiti dall'utente → Nuovo notebook → Personalizza.
  4. Nella pagina Crea un notebook gestito dall'utente, nella sezione Dettagli, fornisci le seguenti informazioni per la nuova istanza:
  • Nome: fornisci un nome per la nuova istanza.
  • Regione e zona: il tutorial utilizzerà la regione us-central1 e la zona us-central1-a

Selezionate Continua.

  1. Nella sezione Ambiente, fornisci quanto segue:
  • Sistema operativo: seleziona il sistema operativo che vuoi utilizzare.
  • Seleziona l'ambiente che vuoi utilizzare.
  • Versione: seleziona la versione che vuoi utilizzare.
  • Script post-avvio (facoltativo,utilizza lo script di AI generativa creato in precedenza). Seleziona Sfoglia per selezionare uno script da eseguire dopo l'avvio dell'istanza.
  • Metadati: facoltativo: fornisci chiavi dei metadati personalizzate per l'istanza.

Selezionate Continua.

  1. Nella sezione Tipo di macchina, fornisci quanto segue:
  • Tipo di macchina: seleziona il numero di CPU e la quantità di RAM per la nuova istanza. Vertex AI Workbench fornisce stime dei costi mensili per ogni tipo di macchina selezionato.
  • Tipo di GPU: seleziona il tipo di GPU e il numero di GPU per la nuova istanza. Per informazioni sulle diverse GPU, consulta GPU su Compute Engine.
  • Seleziona la casella di controllo Installa automaticamente il driver GPU NVIDIA.

Shielded VM

  • Attiva Avvio protetto
  • Attiva vTPM
  • Attiva il monitoraggio dell'integrità

Selezionate Continua.

  1. Nella sezione Dischi, fornisci quanto segue:
  • Dischi: (facoltativo) per modificare le impostazioni predefinite del disco di avvio o dei dati, seleziona il tipo di disco di avvio, le dimensioni del disco di avvio in GB, il tipo di disco dati e le dimensioni del disco dati in GB che preferisci. Per saperne di più sui tipi di disco, vedi Opzioni di archiviazione.
  • Elimina nel cestino: (facoltativo) seleziona questa casella di controllo per utilizzare il comportamento predefinito del cestino del sistema operativo. Se utilizzi il comportamento predefinito del cestino, i file eliminati utilizzando l'interfaccia utente JupyterLab sono recuperabili, ma utilizzano spazio su disco.
  • Backup: (facoltativo) per sincronizzare una posizione di Cloud Storage con il disco dati dell'istanza, seleziona Sfoglia e specifica la posizione di Cloud Storage. Per informazioni sui costi di archiviazione, consulta la pagina Prezzi di Cloud Storage.
  • Crittografia: chiave di crittografia gestita da Google

Selezionate Continua.

  1. Nella sezione Networking, fornisci quanto segue:
  • Networking: seleziona Reti in questo progetto o Reti condivise con me. Se utilizzi un VPC condiviso nel progetto host, devi concedere anche il ruolo Utente di rete Compute (roles/compute.networkUser) all'agente di servizio Notebooks dal progetto di servizio.
  • Nel campo Rete, seleziona la rete che preferisci. Il tutorial utilizza la rete securevertex-vpc. Puoi selezionare una rete VPC, a condizione che la rete abbia l'accesso privato Google abilitato o possa accedere a internet. Nel campo Subnet, seleziona la subnet che preferisci. Nel tutorial viene utilizzata la subnet securevertex-subnet-a.
  • Deseleziona Assegna indirizzo IP esterno
  • Seleziona Consenti accesso proxy

Selezionate Continua.

81bb7dbe31fbf587.png

  1. Nella sezione IAM e sicurezza, fornisci quanto segue:
  • Seleziona Un solo utente e poi, nel campo Email utente, inserisci l'account utente a cui vuoi concedere l'accesso. Se l'utente specificato non è il creatore dell'istanza, devi concedergli il ruolo Utente service account (roles/iam.serviceAccountUser) sul service account dell'istanza.
  • Deseleziona Utilizza il service account Compute Engine predefinito sulla VM per chiamare le API Google Cloud
  • Inserisci l'indirizzo email del service account appena creato, ad esempio: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com

Opzioni di sicurezza

  • Deseleziona Abilita l'accesso root all'istanza
  • Deseleziona Abilita nbconvert
  • Deseleziona Abilita il download di file dall'interfaccia utente di JupyterLab.
  • Attiva terminale (deseleziona per gli ambienti di produzione)

Selezionate Continua.

e19f3cd05a2c1b7f.png

  1. Nella sezione Integrità del sistema, fornisci quanto segue:

Upgrade dell'ambiente e integrità del sistema

  • Seleziona la casella di controllo Abilita upgrade automatico dell'ambiente.
  • Scegli se eseguire l'upgrade del notebook settimanalmente o mensilmente.

In Integrità del sistema e report, seleziona o deseleziona le seguenti caselle di controllo:

  • Abilita report sull'integrità del sistema
  • Segnala metriche personalizzate a Cloud Monitoring
  • Installa agente Cloud Monitoring

Seleziona Crea.

10. Convalida

Vertex AI Workbench crea un'istanza di blocchi note gestiti dall'utente in base alle proprietà specificate e la avvia automaticamente. Quando l'istanza è pronta per l'uso, Vertex AI Workbench attiva un link Apri JupyterLab che consente all'utente finale di accedere al notebook.

11. Osservabilità

Monitora le metriche di sistema e delle applicazioni tramite Monitoring

Per le istanze di notebook gestite dall'utente in cui è installato Monitoring, puoi monitorare le metriche di sistema e delle applicazioni utilizzando la console Google Cloud:

  1. Nella console Google Cloud, vai alla pagina Notebook gestiti dall'utente.
  2. Fai clic sul nome dell'istanza di cui vuoi visualizzare le metriche di sistema e delle applicazioni.
  3. Nella pagina Dettagli notebook, fai clic sulla scheda Monitoraggio. Esamina le metriche di sistema e delle applicazioni per la tua istanza.

12. Crea una pianificazione del notebook

Le pianificazioni delle istanze ti consentono di avviare e arrestare automaticamente le istanze di macchine virtuali (VM). L'utilizzo delle pianificazioni delle istanze per automatizzare il deployment delle istanze VM può aiutarti a ottimizzare i costi e a gestire le istanze VM in modo più efficiente. Puoi utilizzare le pianificazioni delle istanze sia per i workload ricorrenti sia per quelli una tantum. Ad esempio, utilizza le pianificazioni delle istanze per eseguire le istanze VM solo durante l'orario di lavoro o per fornire la capacità per un evento una tantum.

Per utilizzare le pianificazioni delle istanze, crea una policy delle risorse che descriva il comportamento di avvio e arresto, quindi associala a una o più istanze VM.

Il tutorial ti mostrerà come creare una pianificazione dell'istanza che accenderà il notebook alle 7:00 e lo spegnerà alle 18:00.

Per creare la pianificazione dell'istanza, avrai bisogno delle autorizzazioni compute.instances.start e compute.instances.stop, pertanto è consigliabile un ruolo personalizzato creato dall'amministratore e concesso a te.

Una volta creato, il ruolo personalizzato verrà assegnato al service account Compute Engine predefinito nel tuo progetto, il che consentirà alla pianificazione delle istanze di avviare e arrestare il notebook.

Creare un ruolo personalizzato

In Cloud Shell, crea un ruolo personalizzato, VmScheduler, 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

Descrivi il ruolo personalizzato da Cloud Shell.

gcloud iam roles describe Vm_Scheduler --project=$projectid

Esempio:

$ gcloud iam roles describe Vm_Scheduler --project=$projectid
etag: BwX991B0_kg=
includedPermissions:
- compute.instances.start
- compute.instances.stop
name: projects/$projectid/roles/Vm_Scheduler
stage: GA
title: vm-scheduler-notebooks

Aggiornare il service account predefinito

Nella sezione seguente, identificherai e aggiornerai il service account predefinito nel formato PROJECT_NUMBER-compute@developer.gserviceaccount.com.

In Cloud Shell, identifica il numero di progetto corrente.

gcloud projects list --filter=$projectid

In Cloud Shell, memorizza il numero di progetto come variabile.

project_number=your_project_number
echo $project_number

In Cloud Shell, aggiorna il service account Compute predefinito con il ruolo personalizzato VM_Scheduler.

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

Crea la pianificazione delle istanze

In Cloud Shell, crea la pianificazione di avvio e arresto.

gcloud compute resource-policies create instance-schedule optimize-notebooks \
    --region=us-central1 \
    --vm-start-schedule='0 7 * * *' \
    --vm-stop-schedule='0 18 * * *' \
        --timezone=America/Chicago

In Cloud Shell, memorizza il nome del notebook.

gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm

Puoi collegare una pianificazione delle istanze a qualsiasi istanza VM esistente che si trova nella stessa regione della pianificazione.

In Cloud Shell, associa la pianificazione al notebook.

gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a

13. Esegui la pulizia

Elimina il notebook gestito dall'utente dalla console, vai a Vertex AI → Workbench, seleziona ed elimina il notebook.

Da Cloud Shell, elimina i componenti VPC.

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 

14. Complimenti

Ben fatto! Hai configurato e convalidato correttamente un notebook gestito dall'utente sicuro creando un VPC autonomo personalizzato utilizzando le best practice di protezione per i notebook gestiti e hai implementato una pianificazione delle istanze per ottimizzare la spesa.

Passaggi successivi

Dai un'occhiata ad alcuni di questi tutorial…

Ulteriori letture e video

Documenti di riferimento