Questo tutorial è rivolto a data scientist, ricercatori e amministratori di reti aziendali. Mostra come proteggere di blocchi note gestiti dall'utente 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. In azienda, le reti VPC sono usate per proteggere e le istanze di dati, 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 (denominato progetto host) ad altri progetti nella tua organizzazione Google Cloud. Per scoprire di più sul tipo di rete VPC da utilizzare, consulta Rete VPC singola e VPC condivisa.
Seguendo le best practice per la sicurezza di rete, il VPC di Google Cloud in questo tutorial utilizza una combinazione Router Cloud Cloud NAT e Accesso privato Google per proteggere l'istanza nel modo seguente:
- L'istanza di blocchi note gestiti dall'utente 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 e connessioni a Internet. Non consente richieste in entrata non richieste da internet.
- L'istanza utilizza l'accesso privato Google per raggiungere gli indirizzi IP esterni di API e servizi Google.
Il tutorial illustra anche le seguenti azioni:
- Crea uno script di post-avvio per clonare automaticamente un repository GitHub nell'istanza di blocchi note gestiti dall'utente appena creata.
- Utilizza Cloud Monitoring per monitorare l'istanza di blocchi note gestiti dall'utente.
- Utilizza Compute Engine per avviare e arrestare l'istanza automaticamente al fine di ottimizzare i costi.
Obiettivi
- Crea una rete VPC e aggiungi una subnet con accesso privato Google in un bucket in cui è abilitato il controllo delle versioni.
- Crea un router cloud e Cloud NAT per la rete VPC.
- Crea un'istanza di blocchi note gestiti dall'utente nella subnet, utilizzando uno script post-avvio che clona IA generativa di Google Cloud GitHub di ASL.
- Abilitare Cloud Monitoring per l'istanza.
- Creare una pianificazione di un'istanza VM e collegarla 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.
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
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 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 i tuoi progetti e le tue risorse dal browser web. Vai a Cloud Shell
- In Cloud Shell, imposta il progetto attuale sul
ID progetto Google Cloud e archiviare lo stesso
ID progetto nella variabile shell
projectid
: Sostituisci PROJECT_ID con il tuo ID progetto. Se necessario, puoi trovare l'ID progetto nella console Google Cloud. Per ulteriori informazioni, consulta Trovare l'ID progetto.projectid="PROJECT_ID" gcloud config set project ${projectid}
-
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 -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, 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.
- Replace
Creare e configurare una VPC autonoma
Crea una rete VPC denominata
securevertex-vpc
:gcloud compute networks create securevertex-vpc --subnet-mode=custom
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
Se vuoi, 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 gli 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-central1
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
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.
Imposta la variabile shell
BUCKET_NAME
e verifica che sia stata inserita correttamente:BUCKET_NAME=BUCKET_NAME echo $BUCKET_NAME
Sostituisci BUCKET_NAME con il nome del bucket.
Crea e carica uno script post-avvio
Per creare lo script, utilizza un editor di testo come
vi
onano
per creare un file denominatopoststartup.sh
.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
Salva il file.
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 blocchi note gestiti dall'utente,
è consigliabile cancellare i dati del campo Utilizza l'account di servizio predefinito di Compute Engine.
e specificare un account di servizio personalizzato. Se la tua organizzazione non
applica in modo forzato il iam.automaticIamGrantsForDefaultServiceAccounts
vincolo dei criteri dell'organizzazione, l'account di servizio predefinito
(e quindi a chiunque specifichi come utente istanza) il ruolo Editor
(roles/editor
) sul tuo progetto. Per disattivare questo comportamento,
consulta Disattivare le concessioni automatiche di ruoli al servizio predefinito
Google Cloud.
Crea un account di servizio personalizzato denominato
user-managed-notebook-sa
:gcloud iam service-accounts create user-managed-notebook-sa \ --display-name="user-managed-notebook-sa"
Assegna il ruolo IAM Visualizzatore oggetti Storage all'account di servizio:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
Assegnare il ruolo IAM Utente Vertex AI al servizio :
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Crea un'istanza di blocchi note gestiti dall'utente
Nella console Google Cloud, vai alla pagina Blocchi note gestiti dall'utente.
Fai clic su
Crea nuova e poi seleziona Opzioni avanzate.Viene visualizzata la pagina Crea istanza.
Nella pagina Crea istanza, nella sezione Dettagli, fornisci le seguenti informazioni per il nuovo istanza e 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 quanto segue e poi fai clic su Continua:
- Script post-avvio: fai clic su Sfoglia, quindi fai doppio clic sul
poststartup.sh
file, fai clic ancora una volta e quindi fai clic su Seleziona.
- Script post-avvio: fai clic su Sfoglia, quindi fai doppio clic sul
Nella sezione Tipo di macchina, fornisci quanto segue e poi fai clic su Continua:
VM protetta: seleziona le seguenti caselle di controllo:
- Avvio protetto
- Virtual Trusted Platform Module (vTPM)
- Monitoraggio dell'integrità
Nella sezione Dischi, assicurati che la chiave di crittografia gestita da Google è selezionata, poi fai clic su Continua:
Nella sezione Networking, fornisci quanto segue, quindi fai clic su Continua:
Networking: seleziona Rete in questo progetto e completa la 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 dall'internet o da altre reti VPC.
Seleziona la casella di controllo Consenti accesso proxy.
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:
- 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 creator dell'istanza) non hai accesso all'interfaccia JupyterLab dell'istanza. Ma controlli comunque l'istanza puoi avviarle, interromperle o eliminarle.
- 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.
- Deseleziona la casella di controllo Utilizza l'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. Nel campo Email account di servizio, inserisci
user-managed-notebook-sa@$projectid.iam.gserviceaccount.com
. (Questo è il servizio personalizzato che hai creato in precedenza). Questo account di servizio ha autorizzazioni limitate.Per scoprire di più sulla concessione dell'accesso, consulta Gestire l'accesso all'interfaccia JupyterLab di un'istanza di blocchi note gestiti dall'utente.
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 tipo di file diverso, ad esempio HTML, PDF o LaTeX. Questa impostazione è richiesta da alcuni dei notebook nel repository GitHub di Google Cloud Generative AI.
Deseleziona la casella di controllo seguente:
- Download dei file
Seleziona la seguente casella di controllo, a meno che 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 fornire quanto segue:
In Report, seleziona le seguenti caselle di controllo:
- Segnalare lo stato 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.
(Facoltativo) Concedi il ruolo Utente account di servizio all'utente dell'istanza
Se crei blocchi note gestiti dall'utente
per un altro utente,
devi concedere loro
Ruolo Utente account di servizio
(roles/iam.serviceAccountUser
) il user-managed-notebook-sa
personalizzato come segue:
gcloud iam service-accounts add-iam-policy-binding \ user-managed-notebook-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 sia stata creata l'istanza di blocchi note gestiti dall'utente
Vertex AI Workbench crea un blocco note gestito dall'utente 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 al singolo utente specificato al momento della creazione dell'istanza.
Apri l'istanza in JupyterLab e verifica che i dati IA generativa di Google Cloud Il repository GitHub è presente.
Nella console Google Cloud, vai alla pagina Notebook gestiti dall'utente.
Nell'elenco delle istanze di blocchi note gestiti dall'utente, fai clic su 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 Monitoring
Puoi monitorare le metriche di sistema e di applicazione per le tue istanze di notebook gestite dall'utente utilizzando la console Google Cloud. Per scoprire 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 Blocchi note gestiti dall'utente.
Fai clic sul nome dell'istanza di blocchi note gestiti dall'utente di cui vuoi visualizzare le metriche.
Nella pagina Dettagli blocco note, 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 alcun dato immediatamente. Attendi qualche minuto e aggiorna la scheda della console.
Crea una pianificazione dell'istanza VM per l'istanza di notebook gestita dall'utente
Poiché un'istanza di blocchi note gestiti dall'utente è un'istanza VM di Compute Engine, puoi utilizzare le API per creare una pianificazione di istanza VM.
Utilizza una pianificazione dell'istanza VM per avviare e arrestare l'istanza di Notebook gestiti dall'utente. 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 di notebook gestite dall'utente 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
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
Descrivi il ruolo personalizzato:
gcloud iam roles describe Vm_Scheduler --project=$projectid
Assegna il ruolo all'account di servizio predefinito di Compute Engine
Per concedere all'account di servizio predefinito di Compute Engine l'autorizzazione per avviare e arrestare le istanze di notebook gestite dall'utente, devi assegnare il ruolo personalizzato Vm_Scheduler
.
L'account di servizio predefinito Compute Engine per il tuo progetto ha il seguente indirizzo email: PROJECT_NUMBER-compute@developer.gserviceaccount.com
, dove PROJECT_NUMBER
è il numero del progetto.
Identifica il numero del progetto e memorizzalo nella variabile shell
project_number
:project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)') echo $project_number
Assegna il ruolo personalizzato all'account di servizio predefinito:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Crea e allega il programma
Per creare una pianificazione dell'istanza che avvii l'istanza di notebook gestiti dall'utente alle 07:00 e la fermi alle 18:00:
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 usoUTC
. Per ulteriori informazioni, consulta fuso orario.Identifica il nome dell'istanza dei blocchi note gestiti dall'utente eseguendo il seguente comando e annotando il valore
NAME
restituito:gcloud compute instances list
Memorizza il nome nella variabile shell
notebook_vm
:notebook_vm=NOTEBOOK_VM_NAME echo $notebook_vm
Sostituisci NOTEBOOK_VM_NAME con il nome dell'istanza di Notebook gestita dall'utente.
Collega la pianificazione dell'istanza all'istanza di notebook gestita dall'utente:
gcloud compute instances add-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-a
Descrivi la pianificazione dell'istanza:
gcloud compute resource-policies describe optimize-notebooks \ --region=us-central1
Puoi verificare se la pianificazione dell'istanza viene eseguita correttamente controllando i log di controllo di Compute Engine per il criterio della risorsa di pianificazione dell'istanza e l'istanza VM collegata. Potresti dover attendere fino a 15 minuti dopo l'ora programmata 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 nel seguente modo:
Nella console Google Cloud, vai alla pagina Blocchi note gestiti dall'utente.
Seleziona la tua istanza di blocco note gestita dall'utente.
Fai clic su Elimina.
In Cloud Shell, elimina le singole risorse rimanenti eseguendo i comandi riportati di seguito.
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
Passaggi successivi
- Scopri il codelab Vertex AI per la creazione di un blocco note sicuro gestito dall'utente.
- Scopri come utilizzare i Controlli di servizio VPC per configurare un'istanza di Jupyter Notebook gestita dall'utente all'interno di un perimetro di servizio.
- Scopri di più sulle best practice e sulle architetture di riferimento per la progettazione di VPC.