Utiliser TLS pour des prédictions en ligne sécurisées avec Vertex AI

1. Introduction

Tirez parti de Private Service Connect (PSC) pour établir un accès privé hautement sécurisé pour les modèles déployés à partir de Vertex AI Model Garden. Au lieu d'exposer un point de terminaison public, cette méthode vous permet de déployer votre modèle sur un point de terminaison Vertex AI privé accessible uniquement dans votre cloud privé virtuel (VPC).

Private Service Connect crée un point de terminaison avec une adresse IP interne dans votre VPC, qui se connecte directement au service Vertex AI géré par Google qui héberge votre modèle. Cela permet aux applications de votre VPC et de vos environnements sur site (via Cloud VPN ou Interconnect) d'envoyer des requêtes d'inférence à l'aide d'adresses IP privées.

Il est essentiel de noter que tout le trafic réseau entre votre VPC et le point de terminaison Vertex AI privé reste sur le réseau dédié de Google, ce qui l'isole complètement de l'Internet public. De plus, cette connexion privée est sécurisée en transit à l'aide du chiffrement TLS. Ce chiffrement de bout en bout garantit que vos requêtes de prédiction et vos réponses de modèle sont protégées, ce qui améliore la confidentialité et l'intégrité des données. La combinaison de l'isolation du réseau via PSC et du chiffrement TLS fournit un environnement robuste et sécurisé pour vos prédictions en ligne, ce qui réduit la latence et renforce considérablement votre niveau de sécurité.

8bdac2f2d3dd88c9.png

Objectifs de l'atelier

Dans ce tutoriel, vous allez télécharger Gemma 3 depuis Model Garden, hébergé dans Vertex AI Online Inference en tant que point de terminaison privé accessible via Private Service Connect. Votre configuration de bout en bout comprendra les éléments suivants :

  1. Modèle Model Garden : vous allez sélectionner Gemma 3 dans Vertex AI Model Garden et le déployer sur un point de terminaison Private Service Connect.
  2. Private Service Connect : vous allez configurer un point de terminaison client dans votre cloud privé virtuel (VPC) composé d'une adresse IP interne au sein de votre propre réseau.
  3. Connexion sécurisée à Vertex AI : le point de terminaison PSC ciblera le rattachement de service généré automatiquement par Vertex AI pour le déploiement de votre modèle privé. Cela établit une connexion privée, garantissant que le trafic entre votre VPC et le point de terminaison de diffusion du modèle ne transite pas par l'Internet public.
  4. Configuration du client dans votre VPC : vous allez configurer un client (par exemple, une VM Compute Engine) dans votre VPC pour envoyer des requêtes d'inférence au modèle déployé à l'aide de l'adresse IP interne du point de terminaison PSC.
  5. Vérifier le chiffrement TLS : à partir de la VM cliente de votre VPC, vous utiliserez des outils standards ( openssl s_client) pour vous connecter à l'adresse IP interne du point de terminaison PSC. Cette étape vous permettra de confirmer que le canal de communication vers le service Vertex AI est bien chiffré à l'aide du protocole TLS en inspectant les détails du handshake et le certificat de serveur présenté.

À la fin de ce tutoriel, vous disposerez d'un exemple fonctionnel d'un modèle Model Garden diffusé en mode privé, accessible uniquement depuis votre réseau VPC désigné.

Points abordés

Dans ce tutoriel, vous allez apprendre à déployer un modèle à partir de Vertex AI Model Garden et à le rendre accessible de manière sécurisée depuis votre cloud privé virtuel (VPC) à l'aide de Private Service Connect (PSC). Cette méthode permet à vos applications de votre VPC (le client) de se connecter en mode privé au point de terminaison du modèle Vertex AI (le service producteur) sans transiter par l'Internet public.

Plus précisément, vous apprendrez à :

  1. Comprendre PSC pour Vertex AI : comment PSC permet des connexions privées et sécurisées entre le client et le producteur. Votre VPC peut accéder au modèle Model Garden déployé à l'aide d'adresses IP internes.
  2. Déployer un modèle avec accès privé : comment configurer un point de terminaison Vertex AI pour que votre modèle Model Garden utilise PSC, ce qui en fait un point de terminaison privé.
  3. Rôle du rattachement de service : lorsque vous déployez un modèle sur un point de terminaison Vertex AI privé, Google Cloud crée automatiquement un rattachement de service dans un projet locataire géré par Google. Ce rattachement de service expose le service de diffusion du modèle aux réseaux clients.
  4. Créer un point de terminaison PSC dans votre VPC :
  • Comment obtenir l'URI unique du rattachement de service à partir des détails de votre point de terminaison Vertex AI déployé.
  • Comment réserver une adresse IP interne dans le sous-réseau de votre choix dans votre VPC.
  • Comment créer une règle de transfert dans votre VPC qui fait office de point de terminaison PSC, en ciblant le rattachement de service Vertex AI. Ce point de terminaison rend le modèle accessible via l'adresse IP interne réservée.
  1. Établir une connectivité privée : comment le point de terminaison PSC de votre VPC se connecte au rattachement de service, en reliant votre réseau au service Vertex AI de manière sécurisée.
  2. Envoyer des requêtes d'inférence en mode privé : comment envoyer des requêtes de prédiction à partir de ressources (telles que des VM Compute Engine) de votre VPC à l'adresse IP interne du point de terminaison PSC.
  3. Validation : étapes à suivre pour tester et confirmer que vous pouvez envoyer des requêtes d'inférence de votre VPC au modèle Model Garden déployé via la connexion privée.
  4. Vérifier le chiffrement TLS : comment utiliser des outils depuis votre client VPC (par exemple, une VM Compute Engine) pour vous connecter via TLS à l'adresse IP interne du point de terminaison PSC.

Une fois cette opération terminée, vous pourrez héberger des modèles de Model Garden qui ne sont accessibles que depuis votre infrastructure de réseau privé.

Ce dont vous avez besoin

Projet Google Cloud

Autorisations IAM

2. Avant de commencer

Mettre à jour le projet pour qu'il soit compatible avec le tutoriel

Ce tutoriel utilise des $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, procédez comme suit :

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
projectid=[YOUR-PROJECT-ID]
echo $projectid

Activation de l'API

Dans Cloud Shell, procédez comme suit :

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. Déployer le modèle

Suivez les étapes ci-dessous pour déployer votre modèle à partir de Model Garden.

Dans la console Google Cloud, accédez à Model Garden, puis recherchez et sélectionnez Gemma 3.

47c724030a846b25.png

Cliquez sur "Déployer le modèle", puis sélectionnez "Vertex AI".

a9a9f4aef7e52356.png

Sélectionnez "Modifier les paramètres" en bas de la section "Paramètres de déploiement".

d5b449d2893ddf2f.png

Dans le volet "Déployer sur Vertex AI", assurez-vous que l'accès au point de terminaison est configuré sur "Private Service Connect", puis sélectionnez votre projet.

c679aa90c3638e31.png

Laissez toutes les autres options sur leurs valeurs par défaut, puis sélectionnez "Déployer" en bas de la page et vérifiez l'état du déploiement dans vos notifications.

d5eab71cbb43e2fe.png

Dans Model Garden, sélectionnez la région us-central1, qui fournit le modèle et le point de terminaison Gemma 3. Le déploiement du modèle prend environ cinq minutes.

fce9d5c9152255f1.png

Au bout de 30 minutes, le point de terminaison passera à l'état "Actif" une fois l'opération terminée.

d6cc741415213e1a.png

Obtenez l'ID du point de terminaison et notez-le en sélectionnant le point de terminaison.

87d1756fa534619d.png

Sélectionnez le point de terminaison pour récupérer son ID et mettre à jour la variable. Dans l'exemple présenté, l'ID est 1934769929467199488.

Dans Cloud Shell, procédez comme suit :

endpointID=<Enter_Your_Endpoint_ID>
region=us-central1

Procédez comme suit pour obtenir l'URI du rattachement de service Private Service Connect. Cette chaîne d'URI est utilisée par le client lors du déploiement d'un point de terminaison client PSC.

Dans Cloud Shell, utilisez la variable ID/Région du point de terminaison, puis exécutez la commande suivante :

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

Vous trouverez un exemple ci-dessous. :

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

Copiez le contenu après serviceAttachment dans une variable appelée "Service_attachment". Vous en aurez besoin ultérieurement lors de la création de la connexion PSC.

user@cloudshell:$ Service_attachment=<Enter_Your_ServiceAttachment>

4. Configuration du client

Créer le VPC client

Dans Cloud Shell, procédez comme suit :

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

Créer le sous-réseau de la VM cliente

Dans Cloud Shell, procédez comme suit :

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

Créez le sous-réseau du point de terminaison PSC. Dans Cloud Shell, procédez comme suit :**:**

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

5. Activer IAP

Pour permettre à IAP de se connecter à vos instances de VM, créez une règle de pare-feu qui :

  • s'applique à toutes les instances de VM que vous souhaitez rendre accessibles à l'aide d'IAP ;
  • autorise le trafic entrant à partir de la plage IP 35.235.240.0/20, qui contient toutes les adresses IP qu'IAP utilise pour le transfert TCP.

Dans Cloud Shell, créez la règle de pare-feu IAP.

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

6. Créer des instances de VM clientes

Dans Cloud Shell, créez l'instance de VM cliente, 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. Points de terminaison Private Service Connect

Le client crée un point de terminaison client (règle de transfert) avec une adresse IP interne dans son VPC. Ce point de terminaison PSC cible le rattachement de service du producteur. Les clients du VPC client ou du réseau hybride peuvent envoyer du trafic à cette adresse IP interne pour accéder au service du producteur.

Réservez une adresse IP pour le point de terminaison client.

Dans Cloud Shell, créez la règle de transfert.

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

Vérifiez que l'adresse IP est réservée.

Dans Cloud Shell, répertoriez l'adresse IP réservée.

gcloud compute addresses list 

L'adresse IP 10.10.10.6 doit être réservée.

3029e97ddc9c192d.png

Créez le point de terminaison client en spécifiant l'URI du rattachement de service, target-service-attachment, que vous avez capturé à l'étape précédente, dans la section Déployer le modèle.

Dans Cloud Shell, décrivez le rattachement réseau.

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

Vérifiez que le rattachement de service accepte le point de terminaison.

Dans Cloud Shell, procédez comme suit :

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

Dans la réponse, vérifiez que l'état "ACCEPTED" s'affiche dans le champ pscConnectionStatus.

e1debc2bdb6a1a44.png

8. Configurer la connexion au point de terminaison HTTPS Vertex via TLS

Créez une zone privée DNS pour pouvoir obtenir une inférence en ligne sans avoir à spécifier d'adresse IP.

Dans Cloud Shell, procédez comme suit :

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."

Créez un enregistrement A pour mapper le domaine à l'adresse IP PSC.

Dans Cloud Shell, procédez comme suit :

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

Créez une instance Cloud Router comme prérequis pour une instance NAT.

Dans Cloud Shell, procédez comme suit :

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

Créez une instance Cloud NAT utilisée pour télécharger les packages openssl et dnsutils.

Dans Cloud Shell, procédez comme suit :

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

Connectez-vous via SSH (console) à la VM cliente. Dans Cloud Shell, procédez comme suit :

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

Mettez à jour les packages ci-dessous, installez open-ssl et installez les utilitaires DNS.

Dans Cloud Shell, procédez comme suit :

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

Vous aurez besoin du numéro de projet à l'étape suivante. Pour obtenir votre numéro de projet, exécutez la commande suivante à partir de Cloud Shell et placez-le dans une variable :

Dans Cloud Shell, procédez comme suit :

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

Vous aurez besoin de quelques autres variables définies dans les étapes suivantes. Définissez ces variables(ENDPOINT_ID, REGION, VERTEX_AI_PROJECT_ID) en les capturant d'abord à partir de Cloud Shell, puis en créant les mêmes variables dans la VM.

Dans Cloud Shell, procédez comme suit :

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

Exemple de résultat ci-dessous :

549538389202
test4-473419
Us-central1
1934769929467199s

Dans votre VM cliente, ajoutez ces variables (exemple ci-dessous) :

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

Téléchargez le certificat Vertex AI en exécutant la commande suivante à partir de votre répertoire d'accueil dans votre VM. Cette commande crée un fichier nommé 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

Déplacez le certificat vers le magasin d'approbation du système.

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

Mettez à jour le gestionnaire de certificats.

sudo update-ca-certificates

Une fois la mise à jour effectuée, le résultat doit se présenter comme suit :

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 final à partir de la VM cliente

Sur la VM cliente, réauthentifiez-vous avec les identifiants par défaut de l'application et spécifiez les champs d'application Vertex AI :

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

Sur la VM cliente, exécutez la commande curl suivante pour tester la prédiction de votre modèle Gemini avec l'invite "Qu'est-ce qui pèse le plus : 500 grammes de plumes ou de pierres ?

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?"}] }'

RÉSULTAT FINAL : SUCCÈS !

Le résultat que vous devriez voir est une prédiction de Gemma 3 en bas de la sortie. Cela montre que vous avez pu atteindre le point de terminaison de l'API en mode privé via le point de terminaison 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. Effectuer un nettoyage

Dans Cloud Shell, supprimez les composants du tutoriel.

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. Félicitations

Félicitations ! Vous avez configuré et validé l'accès privé à l'API Gemma 3 hébergée sur Vertex AI Prediction à l'aide d'un point de terminaison Private Service Connect utilisant un certificat autosigné obtenu à partir de Vertex AI et déployé dans le magasin d'approbation des VM.

Vous avez créé l'infrastructure cliente, y compris la réservation d'une adresse IP interne, la configuration d'un point de terminaison Private Service Connect (règle de transfert) dans votre VPC et un DNS privé pour correspondre au certificat autosigné *prediction.p.vertexai.goog. Ce point de terminaison se connecte de manière sécurisée au service Vertex AI en ciblant le rattachement de service associé à votre modèle Gemma 3 déployé.

Cette configuration garantit que vos applications du VPC ou des réseaux connectés peuvent interagir en mode privé avec l'API Gemma 3 à l'aide d'une adresse IP interne utilisant des certificats. Tout le trafic reste dans le réseau de Google et ne transite jamais par l'Internet public.

Et ensuite ?

Lectures complémentaires et vidéos

Documents de référence