Questo tutorial è rivolto a data scientist, ricercatori e amministratori di rete aziendali. Mostra come proteggere un'istanza di 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 privati, subnet e gateway di rete propri. Nell'azienda, le reti VPC vengono utilizzate per proteggere dati e 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) con altri progetti nella tua organizzazione Google Cloud . Per scoprire di più su quale tipo di rete VPC utilizzare, consulta Rete VPC singola e VPC condiviso.
Seguendo le best practice per la sicurezza di rete, la rete VPC in questo tutorial utilizza una combinazione di router Cloud, Cloud NAT e accesso privato Google per proteggere l'istanza nei seguenti modi:
- L'istanza Vertex AI Workbench non ha un indirizzo IP esterno.
- L'istanza ha accesso a internet in uscita tramite un router Cloud regionale e un gateway Cloud NAT in modo da 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 di Google e dei servizi Google.
Il tutorial mostra anche come:
- Crea uno script post-avvio per clonare automaticamente un repository GitHub nella nuova istanza di Vertex AI Workbench.
- Utilizza Cloud Monitoring per monitorare l'istanza Vertex AI Workbench.
- Utilizza l'API Compute Engine per avviare e arrestare automaticamente l'istanza e ottimizzare i costi.
Obiettivi
- Crea una rete VPC e aggiungi una subnet con l'accesso privato Google abilitato.
- Crea un router cloud e Cloud NAT per la rete VPC.
- Crea un'istanza di Vertex AI Workbench nella subnet utilizzando uno script post-startup che clona il repository GitHub Google Cloud AI generativa.
- Abilita Cloud Monitoring per l'istanza.
- Crea una pianificazione delle istanze VM e collegala all'istanza.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
-
Nella console Google Cloud , vai alla pagina di selezione del progetto.
-
Seleziona o crea un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
- 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 dal browser web. Vai a Cloud Shell
- In Cloud Shell, imposta il progetto corrente sul tuo
Google Cloud ID progetto e memorizza lo stesso
ID progetto nella variabile di shell
projectid: Sostituisci PROJECT_ID con l'ID progetto. Se necessario, puoi trovare l'ID progetto nella console Google Cloud . Per saperne di più, consulta Trovare l'ID progetto.projectid="PROJECT_ID" gcloud config set project ${projectid} Abilita le API IAM, Compute Engine, Notebooks, Cloud Storage e Vertex AI:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable iam.googleapis.com
compute.googleapis.com notebooks.googleapis.com storage.googleapis.com aiplatform.googleapis.com - Se non sei il proprietario del progetto, chiedi al proprietario del progetto di concederti il ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin). Devi disporre di questo ruolo per concedere i ruoli IAM nel passaggio successivo.
-
Concedi ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
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.Admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto.USER_IDENTIFIER: l'identificatore del tuo account utente . Ad esempio:myemail@example.com.ROLE: il ruolo IAM che concedi al tuo account utente.
Crea e configura un VPC autonomo
Crea una rete VPC denominata
securevertex-vpc:gcloud compute networks create securevertex-vpc --subnet-mode=customCrea una subnet denominata
securevertex-subnet-acon un intervallo IPv4 primario 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-accessPuoi fornire un valore diverso per il parametro
--range. Tuttavia, la lunghezza minima del prefisso per un singolo notebook è 29. Per saperne di più, vedi Intervalli di subnet IPv4.Crea un router Cloud regionale denominato
cloud-router-us-central1:gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1Crea 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 per contenere uno script post-avvio che puoi eseguire quando crei una nuova istanza di Vertex AI Workbench.
Crea il bucket Cloud Storage:
gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAMESostituisci BUCKET_NAME con un nome di bucket univoco.
Imposta la variabile shell
BUCKET_NAMEe verifica che sia stata inserita correttamente:BUCKET_NAME=BUCKET_NAME echo $BUCKET_NAME
Creare e caricare uno script post-avvio
In questa sezione, crei uno script post-avvio per clonare un repository GitHub in una nuova istanza di Vertex AI Workbench.
Per creare lo script, utilizza un editor di testo come
vimonanoper creare un filepoststartup.sh. Devi anteporresudoper avere l'autorizzazione di scrittura nel file, ad esempio:sudo vim poststartup.shIncolla 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>&1Salva il file come segue:
- Se utilizzi
vim, premi il tastoEsc, quindi digita:wqper salvare il file e uscire. - Se utilizzi
nano, digitaControl+Oe premiEnterper salvare il file, quindi digitaControl+Xper uscire.
- Se utilizzi
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 il service account Compute Engine predefinito e specificare un account di servizio personalizzato. Se la tua organizzazione non
applica il vincolo di policy dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts, alaccount di serviziot 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 Disabilita la concessione automatica dei ruoli ai service account predefiniti.
Crea un account di servizio personalizzato denominato
workbench-sa:gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"Assegna il ruolo IAM Storage Object Viewer al service account:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"Assegna il ruolo IAM Scrittore metriche Monitoring al service account:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"Assegna il ruolo IAM Utente Vertex AI al service account:
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 post-avvio che hai creato viene eseguito automaticamente.
Nella console Google Cloud , vai alla scheda Istanze nella pagina Vertex AI Workbench.
Fai clic su Crea nuovo e poi su Opzioni avanzate.
Viene visualizzata la pagina Nuova istanza.
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.
Nella sezione Ambiente, fornisci le seguenti informazioni e poi fai clic su Continua:
- Script post-avvio: fai clic su Sfoglia, fai clic su
Visualizza risorse secondarie accanto al nome del bucket,
fai clic su
poststartup.she poi su Seleziona.
- Script post-avvio: fai clic su Sfoglia, fai clic su
Visualizza risorse secondarie accanto al nome del bucket,
fai clic su
Nella sezione Tipo di macchina, fornisci quanto segue e poi fai clic su Continua:
Shielded VM: seleziona le seguenti caselle di controllo:
- Avvio protetto
- Virtual Trusted Platform Module (vTPM)
- Monitoraggio dell'integrità
Nella sezione Dischi, assicurati che l'opzione Google-managed encryption key sia selezionata, quindi fai clic su Continua:
Nella sezione Networking, fornisci le seguenti informazioni e poi fai clic su Continua:
Networking: seleziona Rete in questo progetto e completa i seguenti passaggi:
Nel campo Rete, seleziona securevertex-vpc.
Nel campo Subnet, seleziona securevertex-subnet-a.
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 da internet o da altre reti VPC.
Seleziona la casella di controllo Consenti accesso proxy.
Nella sezione IAM e sicurezza, fornisci quanto segue e poi fai clic su Continua:
IAM e sicurezza: per concedere a un singolo utente l'accesso all'interfaccia JupyterLab dell'istanza, completa i seguenti passaggi:
- Seleziona Singolo utente.
- Nel campo Email utente, inserisci l'indirizzo email di un singolo
account utente. Se stai creando l'istanza per qualcun altro,
si applicano le seguenti condizioni:
- Tu (il creatore dell'istanza) non hai accesso all'interfaccia JupyterLab dell'istanza. ma hai comunque il controllo dell'istanza e puoi avviarla, arrestarla o eliminarla.
- Dopo aver creato l'istanza, devi concedere all'utente il ruolo
Utente service account
(
roles/iam.serviceAccountUser) nel service account dell'istanza. Consulta (Facoltativo) Concedi il ruolo Utente service account all'utente dell'istanza.
- Deseleziona la casella di controllo Usa account di servizio predefinito di Compute Engine.
Questo passaggio è importante perché il 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. Nel campo Email service account, inserisci quanto segue, sostituendo PROJECT_ID con l'ID progetto:
workbench-sa@PROJECT_ID.iam.gserviceaccount.com(Si tratta dell'indirizzo email del service account personalizzato che hai creato in precedenza.) Questo service account dispone di 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:
nbconvertconsente agli utenti di esportare e scaricare un file notebook come un tipo di file diverso, ad esempio HTML, PDF o LaTeX. Questa impostazione è richiesta da alcuni notebook nel repository GitHub Google Cloud AI generativa.
Deseleziona la seguente casella di controllo:
- Download di file
Seleziona la casella di controllo seguente, a meno che tu non ti trovi in un ambiente di produzione:
- Accesso al terminale: consente l'accesso al terminale all'istanza dall'interfaccia utente di JupyterLab.
Nella sezione Integrità del sistema, seleziona Upgrade automatico dell'ambiente e fornisci quanto segue:
In Report, seleziona le seguenti caselle di controllo:
- Segnala integrità del sistema
- Segnala metriche personalizzate a Cloud Monitoring
- Installa Cloud Monitoring
- Segnala lo stato del DNS per i domini Google richiesti
Fai clic su Crea e attendi qualche minuto per la creazione dell'istanza di Vertex AI Workbench.
(Facoltativo) Concedi il ruolo Service Account User all'utente dell'istanza
Se stai creando l'istanza Vertex AI Workbench per un altro utente, devi concedergli il ruolo Utente service account (roles/iam.serviceAccountUser) per il account di servizio personalizzato workbench-sa nel seguente modo:
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 Vertex AI Workbench sia stata creata
Vertex AI Workbench crea un'istanza di Vertex AI Workbench in base alle proprietà specificate e la avvia automaticamente.
Quando l'istanza è pronta per l'uso, Vertex AI Workbench attiva un link Apri JupyterLab. Questo link è accessibile solo all'utente singolo specificato al momento della creazione dell'istanza.
Apri l'istanza in JupyterLab e verifica che sia presente il repository GitHub Google Cloud AI generativa clonato.
Nella console Google Cloud , vai alla pagina Vertex AI Workbench.
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. Questa cartella contiene il repository GitHub clonato.
Monitorare lo stato di integrità tramite Monitoring
Puoi monitorare le metriche di sistema e delle applicazioni per le tue istanze di Vertex AI Workbench utilizzando la consoleGoogle Cloud . Per saperne di più sul monitoraggio delle istanze e sulla creazione di metriche personalizzate, consulta Monitorare lo stato di integrità.
Nella console Google Cloud , vai alla pagina Vertex AI Workbench.
Fai clic sul nome dell'istanza Vertex AI Workbench per cui vuoi visualizzare le metriche.
Nella pagina Dettagli istanza, fai clic sulla scheda Monitoraggio. Esamina l'utilizzo della CPU e i byte di rete per l'istanza notebook. Per scoprire come interpretare queste metriche, consulta Esaminare le metriche delle risorse.
Se hai appena creato l'istanza, non vedrai subito i dati. 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 Vertex AI Workbench è un'istanza VM di Compute Engine, puoi utilizzare le API Compute Engine per creare una pianificazione delle istanze VM.
Utilizza una pianificazione delle istanze VM per avviare e arrestare l'istanza Vertex AI Workbench. Durante le ore in cui l'istanza è arrestata, paghi solo i costi di Cloud Storage.
Puoi collegare 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 Vertex AI Workbench nella regione.
Per saperne di più sulle pianificazioni delle istanze VM, consulta Programmazione dell'avvio e dell'arresto di un'istanza VM.
Creare un ruolo IAM personalizzato
Come best practice di sicurezza, ti consigliamo di creare un ruolo IAM personalizzato che disponga solo delle seguenti autorizzazioni e di assegnarlo al account di servizio predefinito di Compute Engine:
compute.instances.startcompute.instances.stop
In Cloud Shell, crea un ruolo personalizzato denominato
Vm_Schedulere includi le autorizzazioni necessarie:gcloud iam roles create Vm_Scheduler \ --project=$projectid \ --title=vm-scheduler-notebooks \ --permissions="compute.instances.start,compute.instances.stop" --stage=gaDescrivi il ruolo personalizzato:
gcloud iam roles describe Vm_Scheduler \ --project=$projectid
Assegna il ruolo al account di servizio Compute Engine predefinito
Per concedere all'account di servizio predefinito di Compute Engine l'autorizzazione ad avviare e arrestare le istanze Vertex AI Workbench, devi assegnargli il ruolo personalizzato Vm_Scheduler.
Il account di servizio predefinito di Compute Engine per il tuo progetto
ha il seguente
indirizzo email: PROJECT_NUMBER-compute@developer.gserviceaccount.com,
dove PROJECT_NUMBER è il numero del tuo progetto.
Identifica il numero del progetto e memorizzalo nella variabile di shell
project_number:project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)') echo $project_numberAssegna il ruolo personalizzato al 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"
Creare e allegare il programma
Per creare una pianificazione delle istanze che avvii l'istanza Vertex AI Workbench alle 7:00 e la arresti alle 18:00:
Crea una pianificazione di avvio 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_ZONESostituisci TIME_ZONE con il fuso orario IANA basato sulla località per questa pianificazione delle istanze, ad esempio
America/Chicago. Se omesso, viene utilizzato il valore predefinitoUTC. Per saperne di più, consulta Fuso orario.Identifica il nome dell'istanza Vertex AI Workbench eseguendo il seguente comando e annotando il valore
NAMErestituito:gcloud compute instances listMemorizza il nome nella variabile shell
notebook_vm:notebook_vm=NOTEBOOK_VM_NAME echo $notebook_vmSostituisci NOTEBOOK_VM_NAME con il nome dell'istanza Vertex AI Workbench.
Collega la pianificazione delle istanze all'istanza di Vertex AI Workbench:
gcloud compute instances add-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-aDescrivi la pianificazione delle istanze:
gcloud compute resource-policies describe optimize-notebooks \ --region=us-central1
Puoi verificare se la pianificazione delle istanze viene eseguita correttamente controllando gli audit log di Compute Engine per la policy delle risorse della pianificazione delle istanze e per l'istanza VM collegata. Potresti dover attendere fino a 15 minuti dopo l'ora pianificata 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 mantieni il progetto ed elimina le singole risorse.Puoi eliminare le singole risorse nel progetto eseguendo i seguenti comandi in Cloud Shell:
Rimuovi la pianificazione dall'istanza:
gcloud compute instances remove-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-a --quietElimina la pianificazione delle istanze:
gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quietElimina il ruolo
Vm_Scheduler:gcloud iam roles delete Vm_Scheduler --project=$projectidElimina l'istanza di Vertex AI Workbench:
gcloud workbench instances delete $notebook_vm \ --location=us-central1-a \ --quietElimina il account di servizio:
gcloud iam service-accounts delete workbench-sa@$projectid.iam.gserviceaccount.com --quietElimina il bucket Cloud Storage:
gcloud storage rm -r gs://BUCKET_NAMEElimina il gateway Cloud NAT regionale:
gcloud compute routers nats delete cloud-nat-us-central1 \ --region=us-central1 \ --router=cloud-router-us-central1 \ --quietElimina il router Cloud regionale:
gcloud compute routers delete cloud-router-us-central1 \ --region=us-central1 \ --quietElimina la subnet VPC:
gcloud compute networks subnets delete securevertex-subnet-a \ --region=us-central1 \ --quietElimina la rete VPC:
gcloud compute networks delete securevertex-vpc --quiet