Utilizzo di TLS per le previsioni online sicure con Vertex AI

1. Introduzione

Sfrutta Private Service Connect (PSC) per stabilire un accesso privato e altamente sicuro per i modelli di cui è stato eseguito il deployment da Vertex AI Model Garden. Anziché esporre un endpoint pubblico, questo metodo ti consente di eseguire il deployment del modello in un endpoint Vertex AI privato accessibile solo all'interno del tuo Virtual Private Cloud (VPC).

Private Service Connect crea un endpoint con un indirizzo IP interno all'interno del VPC, che si connette direttamente al servizio Vertex AI gestito da Google che ospita il modello. In questo modo, le applicazioni nel tuo VPC e negli ambienti on-premise (tramite Cloud VPN o Interconnect) possono inviare richieste di inferenza utilizzando IP privati.

Fondamentalmente, tutto il traffico di rete tra il tuo VPC e l'endpoint Vertex AI privato rimane sulla rete dedicata di Google, isolandolo completamente dalla rete internet pubblica. Inoltre, questa connessione privata è protetta durante il transito tramite la crittografia TLS. Questa crittografia end-to-end garantisce la protezione delle richieste di previsione e delle risposte del modello, migliorando la riservatezza e l'integrità dei dati. La combinazione dell'isolamento di rete tramite PSC e della crittografia TLS fornisce un ambiente robusto e sicuro per le previsioni online, riducendo la latenza e rafforzando in modo significativo la postura di sicurezza.

8bdac2f2d3dd88c9.png

Cosa creerai

In questo tutorial, scaricherai Gemma 3 da Model Garden, ospitato in Vertex AI Online Inference come endpoint privato accessibile tramite Private Service Connect. La configurazione end-to-end includerà:

  1. Modello Model Garden: selezionerai Gemma 3 da Vertex AI Model Garden ed eseguirai il deployment in un endpoint Private Service Connect.
  2. Private Service Connect: configurerai un endpoint consumer in Virtual Private Cloud (VPC) costituito da un indirizzo IP interno all'interno della tua rete.
  3. Connessione sicura a Vertex AI: l'endpoint PSC ha come target l'allegato di servizio generato automaticamente da Vertex AI per il deployment del modello privato. In questo modo viene stabilita una connessione privata, garantendo che il traffico tra il tuo VPC e l'endpoint di erogazione del modello non attraversi la rete internet pubblica.
  4. Configurazione del client all'interno del VPC: configurerai un client (ad es. una VM di Compute Engine) all'interno del VPC per inviare richieste di inferenza al modello di cui è stato eseguito il deployment utilizzando l'indirizzo IP interno dell'endpoint PSC.
  5. Verifica della crittografia TLS: dalla VM client all'interno del VPC, utilizzerai strumenti standard ( openssl s_client) per connetterti all'indirizzo IP interno dell'endpoint PSC. Questo passaggio ti consentirà di verificare che il canale di comunicazione con il servizio Vertex AI sia effettivamente criptato utilizzando TLS esaminando i dettagli dell'handshake e il certificato del server presentato.

Alla fine, avrai un esempio funzionale di un modello Model Garden pubblicato in modalità privata, accessibile solo dall'interno della rete VPC designata.

Obiettivi didattici

In questo tutorial imparerai a eseguire il deployment di un modello da Vertex AI Model Garden e a renderlo accessibile in modo sicuro dal tuo Virtual Private Cloud (VPC) utilizzando Private Service Connect (PSC). Questo metodo consente alle tue applicazioni all'interno del tuo VPC (il consumer) di connettersi privatamente all'endpoint del modello Vertex AI (il servizio producer) senza attraversare la rete internet pubblica.

Nello specifico, imparerai:

  1. Informazioni su PSC per Vertex AI: in che modo PSC consente connessioni consumer-producer private e sicure. Il tuo VPC può accedere al modello Model Garden di cui è stato eseguito il deployment utilizzando indirizzi IP interni.
  2. Deployment di un modello con accesso privato: come configurare un endpoint Vertex AI per il modello Model Garden in modo che utilizzi PSC, rendendolo un endpoint privato.
  3. Il ruolo del collegamento al servizio: quando esegui il deployment di un modello in un endpoint Vertex AI privato, Google Cloud crea automaticamente un collegamento al servizio in un progetto tenant gestito da Google. Questo collegamento del servizio espone il servizio di erogazione del modello alle reti consumer.
  4. Creazione di un endpoint PSC nel tuo VPC:
  • Come ottenere l'URI dell'allegato di servizio univoco dai dettagli dell'endpoint Vertex AI di cui hai eseguito il deployment.
  • Come prenotare un indirizzo IP interno all'interno della subnet scelta nel VPC.
  • Come creare una regola di forwarding nel tuo VPC che funge da endpoint PSC, indirizzando il collegamento al servizio Vertex AI. Questo endpoint rende il modello accessibile tramite l'IP interno riservato.
  1. Stabilire la connettività privata: in che modo l'endpoint PSC nel tuo VPC si connette al collegamento al servizio, collegando la tua rete al servizio Vertex AI in modo sicuro.
  2. Invio privato di richieste di inferenza: come inviare richieste di previsione da risorse (come VM Compute Engine) all'interno del tuo VPC all'indirizzo IP interno dell'endpoint PSC.
  3. Convalida: passaggi per testare e confermare che puoi inviare correttamente richieste di inferenza dal tuo VPC al modello Model Garden di cui è stato eseguito il deployment tramite la connessione privata.
  4. Verifica della crittografia TLS:come utilizzare gli strumenti all'interno del client VPC (ad es. una VM Compute Engine) per connettersi tramite TLS all'indirizzo IP interno dell'endpoint PSC.

In questo modo, potrai ospitare modelli di Model Garden raggiungibili solo dalla tua infrastruttura di rete privata.

Che cosa ti serve

Progetto Google Cloud

Autorizzazioni IAM

2. Prima di iniziare

Aggiorna 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-ID]
projectid=[YOUR-PROJECT-ID]
echo $projectid

Abilitazione dell'API

In Cloud Shell, esegui le seguenti operazioni:

gcloud services enable "compute.googleapis.com"
gcloud services enable "aiplatform.googleapis.com"
gcloud services enable "serviceusage.googleapis.com"
gcloud services enable dns.googleapis.com

3. Esegui il deployment del modello

Segui i passaggi riportati di seguito per eseguire il deployment del modello da Model Garden

Nella console Google Cloud, vai a Model Garden, cerca e seleziona Gemma 3.

47c724030a846b25.png

Fai clic su Esegui il deployment del modello e seleziona Vertex AI.

a9a9f4aef7e52356.png

Seleziona Modifica impostazioni nella parte inferiore della sezione Impostazioni di implementazione.

d5b449d2893ddf2f.png

Nel riquadro Esegui il deployment su Vertex AI, assicurati che l'accesso all'endpoint sia configurato come Private Service Connect, quindi seleziona il tuo progetto.

c679aa90c3638e31.png

Lascia invariate tutte le impostazioni predefinite per le altre opzioni, quindi seleziona Implementa in basso e controlla lo stato dell'implementazione nelle notifiche.

d5eab71cbb43e2fe.png

In Model Garden, seleziona la regione us-central1, che fornisce il modello e l'endpoint Gemma 3. Il deployment del modello richiede circa 5 minuti.

fce9d5c9152255f1.png

Tra 30 minuti, l'endpoint passerà allo stato "Attivo" al termine dell'operazione

d6cc741415213e1a.png

Ottieni e annota l'ID endpoint selezionando l'endpoint.

87d1756fa534619d.png

Seleziona l'endpoint per recuperare il relativo ID endpoint e aggiornare la variabile. Nell'esempio mostrato, l'ID è 1934769929467199488.

In Cloud Shell, esegui le seguenti operazioni:

endpointID=<Enter_Your_Endpoint_ID>
region=us-central1

Per ottenere l'URI del collegamento di servizio Private Service Connect: Questa stringa URI viene utilizzata dal consumer quando viene implementato un endpoint consumer PSC.

In Cloud Shell, utilizza la variabile ID/regione endpoint, quindi esegui il seguente comando:

gcloud ai endpoints describe $endpointID --region=$region  | grep -i serviceAttachment:

Di seguito è riportato un esempio:

user@cloudshell:$ gcloud ai endpoints describe 1934769929467199488 --region=us-central1 | grep -i serviceAttachment:

Using endpoint [https://us-central1-aiplatform.googleapis.com/]
    serviceAttachment: projects/o9457b320a852208e-tp/regions/us-central1/serviceAttachments/gkedpm-52065579567eaf39bfe24f25f7981d

Copia i contenuti dopo serviceAttachment in una variabile denominata "Service_attachment", ti servirà in un secondo momento per creare la connessione PSC.

user@cloudshell:$ Service_attachment=<Enter_Your_ServiceAttachment>

4. Configurazione consumatore

Crea il VPC consumer

In Cloud Shell, esegui le seguenti operazioni:

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

Crea la subnet della VM consumer

In Cloud Shell, esegui le seguenti operazioni:

gcloud compute networks subnets create consumer-vm-subnet --project=$projectid --range=192.168.1.0/24 --network=consumer-vpc --region=$region --enable-private-ip-google-access

Crea la subnet dell'endpoint PSC. In Cloud Shell, esegui i seguenti passaggi**:**

gcloud compute networks subnets create pscendpoint-subnet --project=$projectid --range=10.10.10.0/28 --network=consumer-vpc --region=$region

5. Abilitare IAP

Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applichi a tutte le istanze VM a cui vuoi accedere tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro TCP.

In Cloud Shell, crea la regola firewall IAP.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

6. Crea istanze VM consumer

In Cloud Shell, crea l'istanza VM consumer, consumer-vm.

gcloud compute instances create consumer-vm \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --shielded-secure-boot \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=consumer-vm-subnet 

7. Endpoint di Private Service Connect

Il consumer crea un endpoint consumer (regola di forwarding) con un indirizzo IP interno all'interno del VPC. Questo endpoint PSC ha come target il collegamento del servizio del producer. I client all'interno della rete VPC consumer o ibrida possono inviare traffico a questo indirizzo IP interno per raggiungere il servizio del producer.

Prenota un indirizzo IP per l'endpoint consumer.

In Cloud Shell, crea la regola di forwarding.

gcloud compute addresses create psc-address \
    --project=$projectid \
    --region=$region \
    --subnet=pscendpoint-subnet \
    --addresses=10.10.10.6

Verifica che l'indirizzo IP sia riservato.

In Cloud Shell, elenca l'indirizzo IP riservato.

gcloud compute addresses list 

Dovresti vedere l'indirizzo IP 10.10.10.6 riservato.

3029e97ddc9c192d.png

Crea l'endpoint consumer specificando l'URI del collegamento al servizio, target-service-attachment, che hai acquisito nel passaggio precedente, sezione Deploy Model.

In Cloud Shell, descrivi il collegamento di rete.

 gcloud compute forwarding-rules create psc-consumer-ep \
    --network=consumer-vpc \
    --address=psc-address \
    --region=$region \
    --target-service-attachment=$Service_attachment \
    --project=$projectid

Verifica che l'allegato del servizio accetti l'endpoint.

In Cloud Shell, esegui le seguenti operazioni:

gcloud compute forwarding-rules describe psc-consumer-ep \
    --project=$projectid \
    --region=$region

Nella risposta, verifica che nel campo pscConnectionStatus venga visualizzato lo stato "ACCEPTED".

e1debc2bdb6a1a44.png

8. Configura la connessione all'endpoint HTTPS Vertex AI tramite TLS

Crea una zona DNS privata per poter utilizzare l'inferenza online senza dover specificare un indirizzo IP.

In Cloud Shell, esegui le seguenti operazioni:

DNS_NAME_SUFFIX="prediction.p.vertexai.goog."  

gcloud dns managed-zones create vertex \
--project=$projectid \
--dns-name=$DNS_NAME_SUFFIX \
--networks=consumer-vpc \
--visibility=private \
--description="A DNS zone for Vertex AI endpoints using Private Service Connect."

Crea un record A per mappare il dominio all'indirizzo IP di PSC.

In Cloud Shell, esegui le seguenti operazioni:

gcloud dns record-sets create "*.prediction.p.vertexai.goog." \
  --zone=vertex \
  --type=A \
  --ttl=300 \
  --rrdatas="10.10.10.6"

Crea l'istanza del router Cloud come prerequisito per un'istanza NAT.

In Cloud Shell, esegui le seguenti operazioni:

gcloud compute routers create consumer-cr \
--region=$region --network=consumer-vpc \
--asn=65001 

Crea l'istanza Cloud NAT utilizzata per scaricare i pacchetti openssl e dnsutils.

In Cloud Shell, esegui le seguenti operazioni:

gcloud compute routers nats create consumer-nat-gw \
  --router=consumer-cr \
  --region=$region \
  --nat-all-subnet-ip-ranges \
  --auto-allocate-nat-external-ips 

Connettiti tramite SSH (console) alla VM consumer. In Cloud Shell, esegui le seguenti operazioni:

gcloud compute ssh --zone "us-central1-a" "consumer-vm" --tunnel-through-iap --project "$projectid"

Aggiorna i pacchetti riportati di seguito, installa open-ssl e le utilità DNS

In Cloud Shell, esegui le seguenti operazioni:

sudo apt update 
sudo apt install openssl
sudo apt-get install -y dnsutils

Avrai bisogno del numero di progetto nel passaggio successivo. Per ottenere il numero di progetto, esegui il seguente comando da Cloud Shell e inseriscilo in una variabile:

In Cloud Shell, esegui le seguenti operazioni:

gcloud projects describe $projectid --format="value(projectNumber)"
Example Output: 549538389202
projectNumber=549538389202

Nei passaggi successivi dovrai definire altre variabili. Definisci queste variabili(ENDPOINT_ID, REGION, VERTEX_AI_PROJECT_ID) acquisendole prima da Cloud Shell e poi creando le stesse variabili nella VM.

In Cloud Shell, esegui le seguenti operazioni:

echo $projectNumber
echo $projectid 
echo $region
echo $endpointID

Output di esempio riportato di seguito:

549538389202
test4-473419
Us-central1
1934769929467199s

Nella VM consumer aggiungi queste variabili. Ecco un esempio:

projectNumber=1934769929467199488  
projectid=test4-473419
region=us-central1
endpointID=1934769929467199488

Scarica il certificato Vertex AI eseguendo il seguente comando dalla directory home della VM. Questo comando crea un file denominato vertex_certificate.crt.

sudo openssl s_client -showcerts -connect $endpointID-$region-$projectNumber.prediction.p.vertexai.goog:443 </dev/null | openssl x509 -outform pem -out vertex_certificate.crt

Output should look like below, error is expected.

2f2899141dde1af2.png

Sposta il certificato nell'archivio di attendibilità del sistema.

sudo mv vertex_certificate.crt /usr/local/share/ca-certificates

Aggiorna il gestore dei certificati.

sudo update-ca-certificates

Una volta aggiornato, dovrebbe avere il seguente aspetto.

user@linux-vm:~$ sudo update-ca-certificates

Updating certificates in /etc/ssl/certs...

1 added, 0 removed; done.

Running hooks in /etc/ca-certificates/update.d...

Done.

9. Test finale dalla VM consumer

Sulla VM consumer, esegui di nuovo l'autenticazione con le credenziali predefinite dell'applicazione e specifica gli ambiti di Vertex AI:

gcloud auth application-default login
--scopes=https://www.googleapis.com/auth/cloud-platform 

Nella VM consumer esegui il seguente comando curl per testare la previsione sul tuo modello Gemini con il prompt "Cosa pesa di più, un chilo di piume o di sassi?

curl -v -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)"   -H "Content-Type: application/json" https://$endpointID-$region-$projectNumber.prediction.p.vertexai.goog/v1/projects/$projectid/locations/$region/endpoints/$endpointID/chat/completions   -d '{"model": "google/gemma-3-12b-it", "messages": [{"role": "user","content": "What weighs more 1 pound of feathers or rocks?"}] }'

RISULTATO FINALE: RIUSCITO!!!

Il risultato che dovresti vedere è la previsione di Gemma 3 nella parte inferiore dell'output, il che dimostra che sei riuscito a raggiungere l'endpoint API in privato tramite l'endpoint PSC

 Connection #0 to host 10.10.10.6 left intact
{"id":"chatcmpl-9e941821-65b3-44e4-876c-37d81baf62e0","object":"chat.completion","created":1759009221,"model":"google/gemma-3-12b-it","choices":[{"index":0,"message":{"role":"assistant","reasoning_content":null,"content":"This is a classic trick question! They weigh the same. One pound is one pound, regardless of the material. 😊\n\n\n\n","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":106}],"usage":{"prompt_tokens":20,"total_tokens":46,"completion_tokens":26,"prompt_tokens_details":null},"prompt_logprobs":null

10. Esegui la pulizia

Da Cloud Shell, elimina i componenti del tutorial.

Get Deployed Model ID first with this command, you will need it to delete the Endpoint ID:

gcloud ai endpoints describe $endpointID \
  --region=$region \
  --project=$projectid \
  --format="table[no-heading](deployedModels.id)"

Example Output: 7389140900875599872

Put it in a Variable:

deployedModelID=7389140900875599872

Run following Commands:

gcloud ai endpoints undeploy-model $endpointID --deployed-model-id=$deployedModelID --region=$region --quiet

gcloud ai endpoints delete $endpointID --project=$projectid --region=$region --quiet

Run Following command to get $MODEL_ID to delete Model:

gcloud ai models list --project=$projectid --region=$region

Example Output:

Using endpoint [https://us-central1-aiplatform.googleapis.com/]
MODEL_ID: gemma-3-12b-it-1768409471942
DISPLAY_NAME: gemma-3-12b-it-1768409471942

Put MODEL_ID value in a variable:

MODEL_ID=gemma-3-12b-it-1768409471942

Run the follow command to delete Model:

gcloud ai models delete $MODEL_ID --project=$projectid --region=$region --quiet

Clean up rest of the lab:
gcloud compute instances delete consumer-vm --zone=us-central1-a --quiet

gcloud compute forwarding-rules delete psc-consumer-ep --region=$region --project=$projectid --quiet

gcloud compute addresses delete psc-address --region=$region --project=$projectid --quiet

gcloud compute networks subnets delete pscendpoint-subnet consumer-vm-subnet --region=$region --quiet

gcloud compute firewall-rules delete ssh-iap-consumer --project=$projectid

gcloud compute routers delete consumer-cr --region=$region

gcloud compute networks delete consumer-vpc --project=$projectid --quiet

11. Complimenti

Congratulazioni, hai configurato e convalidato correttamente l'accesso privato all'API Gemma 3 ospitata su Vertex AI Prediction utilizzando un endpoint Private Service Connect con un certificato autofirmato ottenuto da Vertex AI e di cui è stato eseguito il deployment nell'archivio di attendibilità delle VM.

Hai creato l'infrastruttura consumer, inclusa la prenotazione di un indirizzo IP interno, la configurazione di un endpoint Private Service Connect (una regola di forwarding) all'interno del tuo VPC e il DNS privato in modo che corrisponda al certificato autofirmato *prediction.p.vertexai.goog. Questo endpoint si connette in modo sicuro al servizio Vertex AI scegliendo il collegamento del servizio associato al modello Gemma 3 di cui è stato eseguito il deployment.

Questa configurazione garantisce che le tue applicazioni all'interno del VPC o delle reti connesse possano interagire privatamente con l'API Gemma 3 utilizzando un indirizzo IP interno tramite certificati. Tutto il traffico rimane all'interno della rete di Google, senza mai attraversare la rete internet pubblica.

Passaggi successivi

Ulteriori letture e video

Documentazione di riferimento