Vertex AI crea un blocco note sicuro gestito dall'utente

1. Introduzione

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

Le istanze di blocchi note gestiti dall'utente hanno una suite preinstallata di pacchetti di deep learning, incluso il supporto per i framework TensorFlow e PyTorch. Puoi configurare istanze solo CPU o GPU.

Cosa creerai

Questo tutorial descrive il processo di deployment di un blocco note sicuro gestito dall'utente in base alle best practice di networking e sicurezza. Sono previsti i seguenti passaggi:

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

Questo tutorial fornisce istruzioni dettagliate per ogni passaggio. Include inoltre suggerimenti e best practice per la protezione dei blocchi note gestiti dall'utente. La figura 1 è un'illustrazione del deployment mediante un VPC autonomo.

Figura 1

2292244ba0b11f71.png

Cosa imparerai a fare

  • Come determinare se un VPC condiviso o autonomo è adatto alla tua organizzazione
  • Come creare un VPC autonomo
  • Creare un router Cloud e Cloud NAT
  • Come creare un blocco note gestito dall'utente
  • Come accedere a un blocco note gestito dall'utente
  • Come monitorare l'integrità del blocco note gestito dall'utente
  • Creare e applicare una pianificazione di istanza

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 composta da subnet a livello di regione. Le reti VPC sono isolate logicamente tra loro in Google Cloud.

VPC autonomo

La figura 2 è un esempio di VPC globale autonomo costituito da una subnet a livello di regione (us-central1) oltre a router Cloud e Cloud NAT, utilizzati per consentire al blocco note 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 a progetti di servizio nella stessa organizzazione. Il progetto host contiene risorse di networking condivise con il progetto di servizio, ad esempio subnet, Cloud NAT e regole firewall. Il progetto di servizio contiene risorse a livello di applicazione che sfruttano le risorse di networking nel progetto host.

La figura 3 mostra un'illustrazione di un VPC condiviso globale, in cui il deployment dell'infrastruttura di networking e sicurezza viene eseguito nel progetto host, mentre quello dei carichi di lavoro viene eseguito nel progetto di servizio.

Figura 3

1354a9323c8e5787.png

Confronto tra VPC autonomo e condiviso

Un'unica rete VPC è sufficiente per molti casi d'uso semplici, in quanto è più facile da creare, gestire 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 mediante l'uso di progetti di servizio.

Best practice VPC utilizzata nel tutorial

  • Abilita Cloud NAT per accedere al blocco note.
  • Attiva l'accesso privato Google quando crei le subnet.
  • Crea regole firewall prescrittive per ridurre il traffico non richiesto, ad esempio non usare 0.0.0.0/0 tcp invece definisci le subnet esatte o gli indirizzi IP degli host.
  • Sfrutta i criteri firewall per approfondire l'ambito delle regole in entrata, ad esempio geolocalizzazione, elenchi di informazioni sulle minacce, nomi di dominio di origine e così via.

3. Best practice per il blocco note

Ridimensionare le istanze al meglio

  • Arresta e/o elimina le istanze inutilizzate
  • Usa un'istanza iniziale più piccola e ripeti l'iterazione con dati di esempio più piccoli
  • Fai lo scale up delle istanze come richiesto
  • Sperimenta con set di dati più piccoli

Seleziona i tipi di macchine giusti

  • VM con ottimizzazione dei costi
  • Sfrutta 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ò contribuire a migliorare le prestazioni e a superare gli errori relativi ai limiti di memoria

Pianificare l'arresto delle istanze

  • Disattiva le istanze inattive (paghi solo per lo spazio di archiviazione su disco)
  • Pianifica l'arresto e l'avvio automatico delle istanze VM del blocco note in ore specifiche

Monitorare lo stato di integrità del blocco note

Considerazioni sulla sicurezza

Di seguito sono riportate le considerazioni sulla sicurezza consigliate per la creazione di un blocco note gestito dall'utente:

  • Seleziona l'opzione "Solo utente singolo" l'accesso ai blocchi note. Se l'utente specificato non è l'utente che ha creato l'istanza, devi concedergli il ruolo Utente account di servizio (roles/iam.serviceAccountUser) per l'account di servizio dell'istanza.
  • Disattiva le seguenti opzioni:
  • accesso root
  • nbconvert
  • file scaricato dalla UI JupyterLab
  • Verrà utilizzato Cloud NAT invece di assegnare un indirizzo IP esterno al blocco note 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 $variables per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.

All'interno di Cloud Shell, esegui queste 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

All'interno di Cloud Shell, esegui queste operazioni:

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

Crea la subnet del blocco note gestito dall'utente

All'interno di Cloud Shell, esegui queste 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

Router Cloud e configurazione NAT

Nel tutorial viene utilizzato Cloud NAT per i download di pacchetti software per blocchi note perché l'istanza di blocco note gestita dall'utente non ha un indirizzo IP esterno. Cloud NAT offre inoltre funzionalità NAT in uscita, il che significa che agli host internet non è consentito avviare comunicazioni con un blocco note gestito dall'utente, rendendolo più sicuro.

All'interno di Cloud Shell, crea il router Cloud a livello di regione.

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

In Cloud Shell, crea il gateway Cloud Nat a livello di regione.

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 il caricamento/recupero sicuro di file. Nel tutorial, lo spazio di archiviazione sul cloud conterrà uno script post-avvio per installare pacchetti di IA generativa nei blocchi note gestiti dall'utente.

Crea un bucket Cloud Storage e sostituisci BUCKET_NAME con un nome globalmente univoco che preferisci.

In Cloud Shell, crea un bucket di archiviazione univoco.

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

Archivia "BUCKET_NAME" per la durata del lab

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

7. Crea uno script post-avvio

Per abilitare il download dei pacchetti di IA 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 livello preciso di controllo del blocco note gestito dall'utente, è necessario un account di servizio. Una volta generate, le autorizzazioni dell'account di servizio possono essere modificate in base ai requisiti aziendali. Nel tutorial, all'account di servizio verranno applicate le seguenti regole:

Devi l'API Service Account prima di procedere.

In Cloud Shell, crea l'account di servizio.

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

All'interno di Cloud Shell, aggiorna l'account di servizio 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"

All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Vertex AI User

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

All'interno di Cloud Shell, elenca l'account di servizio e prendi nota dell'indirizzo email che verrà utilizzato durante la creazione del blocco note 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 blocco note sicuro gestito dall'utente

Un'istanza di blocchi note gestiti dall'utente è un'istanza di macchina virtuale Deep Learning con le librerie di data science e machine learning più recenti preinstallate. Puoi includere facoltativamente GPU Nvidia per l'accelerazione hardware.

Abilita le API consumer

l'API Notebooks

Crea il blocco note gestito dall'utente

  1. Vai a Workbench
  2. Seleziona Blocchi note gestiti dall'utente e poi Crea blocco note. Viene visualizzata la pagina Crea un blocco note gestito dall'utente.
  3. Se è stato eseguito il deployment di un blocco note esistente, seleziona Blocchi note gestiti dall'utente → Nuovo blocco note → Personalizza
  4. Nella pagina Crea un blocco note gestito dall'utente, nella sezione Dettagli, fornisci le seguenti informazioni per la nuova istanza:
  • Nome: specifica 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, specifica 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 IA generativa creato in precedenza) seleziona Sfoglia per selezionare uno script da eseguire dopo l'avvio dell'istanza.
  • (Facoltativo) Metadati: fornisci chiavi di metadati personalizzate per l'istanza.

Selezionate Continua.

  1. Nella sezione Tipo di macchina, specifica 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 il driver GPU NVIDIA automaticamente per me.

Shielded VM

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

Selezionate Continua.

  1. Nella sezione Dischi, specifica quanto segue:
  • Dischi: (facoltativo) per modificare le impostazioni predefinite del disco di avvio o del disco 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 ulteriori informazioni sui tipi di disco, consulta 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 mediante l'interfaccia utente JupyterLab sono recuperabili, ma questi file eliminati utilizzano spazio su disco.
  • (Facoltativo) Backup: per sincronizzare un percorso di Cloud Storage con il disco dati della tua istanza, seleziona Sfoglia e specifica il percorso di Cloud Storage. Per informazioni sui costi di archiviazione, vedi Prezzi di Cloud Storage.
  • Crittografia: chiave di crittografia gestita da Google

Selezionate Continua.

  1. Nella sezione Networking, specifica quanto segue:
  • Networking: seleziona Reti in questo progetto o Reti condivise con me. Se utilizzi un VPC condiviso nel progetto host, devi anche concedere il ruolo Utente di rete Compute (roles/compute.networkUser) all'agente di servizio Notebooks dal progetto di servizio.
  • Nel campo Rete, seleziona la rete desiderata. Il tutorial utilizza la rete securevertex-vpc. Puoi selezionare una rete VPC, purché 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, specifica quanto segue:
  • Seleziona Singolo utente e poi, nel campo Email utente, inserisci l'account utente a cui vuoi concedere l'accesso. Se l'utente specificato non è l'utente che ha creato l'istanza, devi concedergli il ruolo Utente account di servizio (roles/iam.serviceAccountUser) per l'account di servizio dell'istanza.
  • Deseleziona Utilizza l'account di servizio Compute Engine predefinito sulla VM per chiamare le API Google Cloud
  • Inserisci l'indirizzo email dell'account di servizio 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 dei file dalla UI JupyterLab
  • Abilita terminale (deseleziona per ambienti di produzione)

Selezionate Continua.

e19f3cd05a2c1b7f.png

  1. Nella sezione Integrità del sistema, fornisci le seguenti informazioni:

Upgrade dell'ambiente e integrità del sistema

  • Seleziona la casella di controllo Abilita l'upgrade automatico dell'ambiente.
  • Scegli se eseguire l'upgrade del blocco note settimanale o mensile.

In Integrità e report del sistema, 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 avvia automaticamente l'istanza. Quando l'istanza è pronta per l'uso, Vertex AI Workbench attiva un link Apri JupyterLab che consente all'utente finale di accedere al blocco note.

11. Osservabilità

Monitora le metriche di sistema e delle applicazioni tramite Monitoring

Per le istanze di blocchi note gestiti dall'utente in cui è installato Monitoring, puoi monitorare le metriche di sistema e dell'applicazione utilizzando la console Google Cloud:

  1. Nella console Google Cloud, vai alla pagina Blocchi note gestiti dall'utente.
  2. Fai clic sul nome dell'istanza di cui vuoi visualizzare le metriche di sistema e di applicazione.
  3. Nella pagina Dettagli blocco note, fai clic sulla scheda Monitoring. Esamina le metriche di sistema e dell'applicazione per la tua istanza.

12. Crea una pianificazione del blocco note

Le pianificazioni delle istanze 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 carichi di lavoro ricorrenti che una tantum. Ad esempio, puoi utilizzare le pianificazioni delle istanze per eseguire le istanze VM solo durante l'orario di lavoro o per fornire capacità per un evento una tantum.

Per utilizzare le pianificazioni delle istanze, crea un criterio delle risorse che indichi in dettaglio il comportamento di avvio e arresto, quindi collega il criterio a una o più istanze VM.

Il tutorial mostra come creare una pianificazione delle istanze che accenderà il notebook alle 7:00 e lo spegnerà alle 18:00.

Per creare la pianificazione dell'istanza devi avere le autorizzazioni compute.instances.start e compute.instances.stop. Di conseguenza, ti consigliamo di utilizzare un ruolo personalizzato creato dall'amministratore che ti è stato concesso.

Una volta creato, il ruolo personalizzato verrà assegnato all'account di servizio Compute Engine predefinito nel progetto, consentendo alla pianificazione dell'istanza di avviare e arrestare il blocco note.

Creare un ruolo personalizzato

All'interno di 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

Descrivere 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 l'account di servizio predefinito

Nella sezione che segue puoi identificare e aggiornare l'account di servizio predefinito che prevede il formato: PROJECT_NUMBER-compute@developer.gserviceaccount.com

In Cloud Shell, identifica il numero di progetto attuale.

gcloud projects list --filter=$projectid

In Cloud Shell, archivia il numero del progetto come variabile.

project_number=your_project_number
echo $project_number

In Cloud Shell, aggiorna l'account di servizio 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 dell'istanza

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, archivia il nome del tuo blocco note.

gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm

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

In Cloud Shell, associa la pianificazione al tuo blocco note.

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

13. Esegui la pulizia

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

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 un blocco note sicuro gestito dall'utente creando un VPC autonomo personalizzato utilizzando le best practice di protezione della sicurezza per i blocchi note gestiti e implementato una pianificazione delle istanze per ottimizzare la spesa.

Passaggi successivi

Guarda alcuni di questi tutorial...

Per approfondire Video

Documenti di riferimento