Contrôlez l'entrée privée et la sortie Internet d'un bac à sable Agent Platform avec Private Service Connect (PSC-E / PSC-I). Ces contrôles rendent le bac à sable conforme à VPC Service Controls dans un périmètre ou sans périmètre.
Présentation
VPC Service Controls vous permet de définir un périmètre de service qui isole les Cloud de Confiance by S3NS ressources afin de limiter le risque d'exfiltration de données. Le bac à sable Gemini Enterprise Agent Platform offre à vos agents un environnement de calcul sécurisé et isolé pour exécuter du code non approuvé, utiliser un navigateur Web (utilisation de l'ordinateur) ou exécuter une image de conteneur personnalisée. Le bac à sable expose un plan de données interactif et effectue des appels sortants. Il est donc régi par deux contrôles Private Service Connect : l'entrée privée (PSC-E) et le contrôle de sortie (PSC-I).
Lorsque vous exécutez le bac à sable dans un périmètre, les éléments suivants restent protégés dans votre limite :
- Données que votre agent lit ou écrit lors d'une session de bac à sable (fichiers sur le disque du bac à sable, état en mémoire).
- Instantanés du bac à sable qui capturent l'état du disque et de la mémoire, et qui sont stockés automatiquement dans un bucket Cloud Storage.
- Requêtes et réponses échangées avec le plan de données du bac à sable (par exemple, commandes d'utilisation de l'ordinateur et captures d'écran).
- Images de conteneurs personnalisées extraites d'Artifact Registry.
- Appels effectués par le bac à sable vers les API Google (par exemple, Cloud Storage ou Agent Platform).
Vous pouvez également configurer le contrôle d'entrée et de sortie sans périmètre VPC Service Controls, car ce sont les PSC-E (entrée privée) et PSC-I (sortie) qui rendent un bac à sable conforme à VPC Service Controls. Pour configurer l'entrée et la sortie sans périmètre VPC Service Controls, passez à Contrôler la sortie du bac à sable avec une interface Private Service Connect (PSC-I).
Limites et points à noter
- L'entrée privée ne peut être activée que pour un seul projet client, et il doit s'agir du même projet utilisateur dans lequel le bac à sable s'exécute.
- Seule la résolution privée via l'appairage DNS est prise en charge. Le transfert DNS public est désactivé pour éviter le tunneling.
- La journalisation des requêtes et des réponses n'est pas disponible pour les ressources protégées par VPC Service Controls.
- L'accès programmatique et à la console depuis l'extérieur du périmètre est refusé, sauf si l'appelant se trouve à un niveau d'accès.
Avant de commencer
- Créez ou identifiez le périmètre de service VPC Service Controls qui contient votre projet. Pour que les bacs à sable soient sécurisés par le périmètre VPC Service Controls, votre Cloud de Confiance by S3NS projet doit se trouver dans le périmètre avant que vous ne créiez les bacs à sable.
- Activez l'API Agent Platform (
aiplatform.googleapis.com) dans votre projet. - Disposez d'un réseau VPC dans la région où vous exécutez les bacs à sable.
- Vérifiez que vous disposez des rôles requis :
- Rôle d'administrateur Access Context Manager pour le périmètre
- Administrateur de réseaux Compute (
roles/compute.networkAdmin) dans le projet propriétaire du rattachement de réseau.
Ajouter Agent Platform à votre périmètre de service
Ajoutez l'API Agent Platform à la liste des services restreints dans votre périmètre VPC Service Controls. Cela protège Agent Platform (y compris le plan de contrôle du bac à sable) et bloque l'accès à l'API depuis l'Internet public, sauf si l'appelant se trouve à un niveau d'accès.
- Ouvrez VPC Service Controls dans la Cloud de Confiance console et modifiez votre périmètre.
- Sous Services restreints, ajoutez API Vertex AI (
aiplatform.googleapis.com). - Assurez-vous que les dépendances utilisées par votre bac à sable se trouvent dans le même périmètre, généralement Cloud Storage (
storage.googleapis.com) et Artifact Registry (artifactregistry.googleapis.com, pour les images de conteneurs personnalisées). Le stockage des instantanés est géré automatiquement. - Pour rétablir l'accès aux utilisateurs de confiance en dehors du périmètre (par exemple, votre réseau d'entreprise), associez un niveau d'accès au périmètre.
Facultatif : Configurer l'accès privé aux API Google
Dans le périmètre VPC Service Controls, le bac à sable accède aux API Google en mode privé via l'adresse IP virtuelle (VIP) restreinte. Depuis vos propres réseaux VPC et sur site, utilisez également la VIP restreinte afin que les requêtes ne transitent jamais par l'Internet public.
- Acheminez
*.googleapis.comvers la VIP restreinte199.36.153.4/30et activez l'accès privé à Google sur les sous-réseaux qui appellent les API Google. - Créez des zones privées Cloud DNS pour
googleapis.com(et, si vous extrayez des images,pkg.dev/gcr.io) qui sont résolues en VIP restreinte.
Contrôler la sortie du bac à sable avec une interface Private Service Connect (PSC-I)
Pour permettre au bac à sable d'accéder à Internet ou à des services privés, connectez sa sortie à votre VPC avec une interface Private Service Connect, puis réglez ce trafic avec vos propres contrôles de sortie.
Chaque ressource de cette étape est créée dans le projet utilisateur propriétaire du bac à sable ou dans son projet hôte VPC partagé. La sortie est dirigée vers le réseau VPC unique et le rattachement de réseau que vous avez définis dans le modèle.
Créer le rattachement de réseau
Créez le rattachement de réseau pour le bac à sable :
# A dedicated subnet for the PSC interface (minimum /28)
gcloud compute networks subnets create sandbox-psc-subnet \
--network=YOUR_VPC \
--range=10.0.0.0/28 \
--region=REGION
# The network attachment the sandbox connects into
gcloud compute networks network-attachments create sandbox-egress-na \
--region=REGION \
--connection-preference=ACCEPT_AUTOMATIC \
--subnets=sandbox-psc-subnet
Référencer le rattachement à partir du modèle de bac à sable
Définissez les champs de sortie dans SandboxEnvironmentTemplate afin que le bac à sable achemine la sortie via votre VPC :
from vertexai import Client
client = Client(project="PROJECT_ID", location="REGION",
http_options={"api_version": "v1beta1"})
templates = client.agent_engines.sandboxes.templates
op = templates.create(
name=agent_instance_name,
display_name="cu-vpcsc-template",
config={
"custom_container_environment": {
"custom_container_spec": {"image_uri": "IMAGE_URI"},
"ports": [{"port": 8080, "protocol": "TCP"}],
},
"egress_control_config": {
"internet_access": True, # Enables outbound access from the sandbox. With VPC-SC, that traffic is bridged into your VPC.
"customer_vpc_network":
"projects/PROJECT_ID/global/networks/YOUR_VPC", # The VPC network in your project that egress is bridged into. Checked by VPC-SC at creation time.
"network_attachment":
"projects/PROJECT_ID/regions/REGION/networkAttachments/sandbox-egress-na", # The network attachment that accepts the sandbox's PSC interface.
},
},
)
L'interface PSC crée le chemin privé dans votre VPC, et la plate-forme dirige automatiquement la sortie du bac à sable vers celui-ci lorsque internet_access est activé.
Pour configurer et régir le chemin en dehors de votre VPC, déterminez si vous avez besoin d'une sortie Internet ou d'une sortie privée uniquement :
- Sortie Internet : pour la sortie Internet, Cloud NAT est requis, ainsi que le contrôle de la destination à l'aide de règles Cloud Next Generation Firewall (Cloud NGFW) ou de Secure Web Proxy.
- Sortie privée uniquement (accès aux services dans votre VPC ou sur site, sans Internet) : Cloud NAT n'est pas requis. Vous n'avez besoin que de routes, d'une règle de pare-feu et d'un appairage DNS.
Configurer la sortie Internet et régir les destinations
Le bac à sable entre dans votre VPC sur une adresse interne (RFC 1918). Il a donc besoin de Cloud NAT pour accéder à Internet. Réservez une adresse IP de sortie statique si votre liste d'autorisation de destinations est basée sur l'adresse IP source.
# Reserve a static egress IP (optional, for destination-side allow-listing)
gcloud compute addresses create sandbox-egress-ip --region=REGION
# Cloud Router + NAT for the region, scoped to the PSC subnet
gcloud compute routers create sandbox-egress-router \
--network=YOUR_VPC --region=REGION
gcloud compute routers nats create sandbox-egress-nat \
--router=sandbox-egress-router --region=REGION \
--nat-external-ip-pool=sandbox-egress-ip \
--nat-custom-subnet-ip-ranges=sandbox-psc-subnet
Pour limiter les destinations que le bac à sable peut atteindre lorsque son trafic transite par votre VPC, choisissez le niveau de contrôle dont vous avez besoin :
Cloud NGFW (au niveau du réseau) : une stratégie de pare-feu de réseau globale avec des règles d'autorisation (les objets de nom de domaine complet sont compatibles) et un refus par défaut pour tout le reste :
gcloud compute network-firewall-policies create sandbox-egress-policy --global # Allow only the destinations your agent needs (by FQDN) gcloud compute network-firewall-policies rules create 1000 \ --firewall-policy=sandbox-egress-policy --global-firewall-policy \ --direction=EGRESS --action=allow --layer4-configs=tcp:443 \ --dest-fqdns=api.partner.example.com # Default-deny the rest of egress gcloud compute network-firewall-policies rules create 65000 \ --firewall-policy=sandbox-egress-policy --global-firewall-policy \ --direction=EGRESS --action=deny --layer4-configs=all \ --dest-ip-ranges=0.0.0.0/0 gcloud compute network-firewall-policies associations create \ --firewall-policy=sandbox-egress-policy --global-firewall-policy \ --network=YOUR_VPCProxy Web sécurisé (application/L7) : déployez le proxy Web sécurisé comme point d'inspection de sortie dans votre VPC pour une stratégie par URL compatible avec TLS, et acheminez la sortie du sous-réseau PSC via celui-ci.
Configurer la sortie privée uniquement
Si le bac à sable n'a besoin que de services privés dans votre VPC ou sur site, assurez-vous que votre VPC dispose d'une route vers la destination, autorisez-la avec une règle de pare-feu de sortie à partir du sous-réseau PSC (10.0.0.0/28), et résolvez le nom du service via l'appairage DNS.
Configurer l'appairage DNS
Autorisez la résolution de noms du bac à sable via votre VPC au lieu de résolveurs publics (cela bloque également l'exfiltration par tunneling DNS). Créez une zone privée Cloud DNS dans votre VPC avec les enregistrements dont le bac à sable a besoin, puis configurez l'appairage DNS afin que le bac à sable résolve les noms de cette zone.
Accorder l'accès à l'agent de service (VPC partagé)
Si le rattachement de réseau se trouve dans un projet distinct (projet A) du projet dans lequel le bac à sable est exécuté (projet B), accordez à l'agent de service Agent Platform du projet B le rôle Utilisateur de réseau Compute dans le projet A.
# Agent Platform service agent of the project that runs the sandbox
service-PROJECT_NUMBER@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com
# On the project that owns the network attachment
gcloud projects add-iam-policy-binding NETWORK_PROJECT_ID \
--member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
Remplacez les éléments suivants :
PROJECT_NUMBER: numéro du projet qui exécute le bac à sable.NETWORK_PROJECT_ID: ID du projet propriétaire du rattachement de réseau.
Activer l'entrée privée avec Private Service Connect (PSC-E)
Les charges de travail interactives exposent un plan de données auquel un client doit se connecter. Accédez à ce plan de données via un point de terminaison Private Service Connect (PSC-E) privé dans votre VPC au lieu de l'Internet public.
Déclarer le projet client autorisé
Définissez la configuration d'entrée dans le modèle avec le projet client autorisé à se connecter. Seul le même projet utilisateur dans lequel le bac à sable s'exécute peut avoir une entrée privée dans le VPC du bac à sable.
Connectez-vous au bac à sable à partir d'un VPC dans ce même projet :
config = {
# ...custom_container_environment, egress_control_config...
"ingress_control_config": {
"private_service_connect_config": {
# Must be the same project the sandbox runs in.
"enable_private_service_connect": True,
}
},
}
Créer le point de terminaison PSC dans votre VPC
Une fois le bac à sable créé, lisez le rattachement de service à partir de ses informations de connexion et ciblez-le avec une règle de transfert (point de terminaison PSC) dans votre VPC :
# The sandbox returns a service attachment to connect to
service_attachment = sandbox.connection_info.service_attachment
# Reserve an internal IP and create the PSC endpoint
gcloud compute addresses create sandbox-ingress-ip \
--region=REGION --subnet=YOUR_SUBNET
gcloud compute forwarding-rules create sandbox-ingress-ep \
--region=REGION \
--network=YOUR_VPC \
--address=sandbox-ingress-ip \
--target-service-attachment=SERVICE_ATTACHMENT_URI
Les clients du VPC de ce projet (ou accessibles via celui-ci) se connectent désormais au bac à sable via l'adresse IP privée du point de terminaison (par exemple, un client se connectant via le port WebSocket ou CDP du bac à sable).
Étape suivante
- Consultez la présentation du bac à sable et les conteneurs personnalisés (BYOC).
- Découvrez comment les interfaces Private Service Connect fonctionnent avec Agent Runtime.
- Consultez la section Dépannage de VPC Service Controls.
- Suivez l'atelier de programmation sur l'interface PSC de Agent Engine pour obtenir une présentation complète de la sortie.