Ce document fournit des instructions pour installer et exécuter le contrôleur Agent Sandbox sur un cluster Google Kubernetes Engine (GKE). Il explique également comment déployer un environnement en bac à sable sur le cluster dans lequel vous pouvez tester des commandes shell non approuvées.
Le contrôleur Agent Sandbox fournit un framework pour créer et gérer des environnements d'exécution éphémères. Cette approche vous permet de définir un modèle pour l'environnement de votre application, puis de créer des instances à la demande.
Le bac à sable de l'agent fournit un environnement sécurisé et isolé pour exécuter du code non fiable, tel que le code généré par de grands modèles de langage (LLM). L'exécution de ce type de code directement dans un cluster présente des risques de sécurité, car du code non approuvé peut potentiellement accéder à d'autres applications ou au nœud de cluster sous-jacent lui-même, ou interférer avec eux.
L'Agent Sandbox atténue ces risques en fournissant une isolation forte des processus, du stockage et du réseau pour le code qu'il exécute. Cette isolation est obtenue à l'aide de gVisor, une technologie qui crée une barrière sécurisée entre l'application et le système d'exploitation du nœud de cluster. D'autres technologies de bac à sable, par exemple les conteneurs Kata, peuvent être utilisées à la place. Toutefois, l'exemple de ce document n'utilise que gVisor.
Ce document fournit des instructions pour exécuter Agent Sandbox sur un cluster GKE Autopilot ou Standard.
Agent Sandbox est un projet Open Source. Pour savoir comment contribuer au projet ou obtenir des informations techniques plus détaillées, consultez le projet Open Source Agent Sandbox.
Coûts
Les étapes décrites dans ce document entraînent des frais sur votre compte Google Cloud. Les coûts commencent lorsque vous créez un cluster GKE. Ces coûts incluent les frais par cluster pour GKE, comme indiqué sur la page de tarification, et les frais d'exécution des VM Compute Engine.
Pour éviter des frais inutiles, assurez-vous de désactiver GKE ou de supprimer le projet une fois que vous avez terminé ce document.
Avant de commencer
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Google Kubernetes Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, activate Cloud Shell.
Définir des variables d'environnement
Pour simplifier les commandes que vous exécutez dans ce document, vous pouvez définir des variables d'environnement dans Cloud Shell. Dans Cloud Shell, définissez les variables d'environnement utiles suivantes en exécutant les commandes suivantes :
export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME="agent-sandbox-cluster" export GKE_LOCATION="us-central1" export AGENT_SANDBOX_VERSION="v0.1.0" export NODE_POOL_NAME="agent-sandbox-node-pool" export MACHINE_TYPE="e2-standard-2" export PYTHON_CLIENT_VERSION="main"Voici une explication de ces variables d'environnement :
PROJECT_ID: ID de votre projet actuel Google Cloud . La définition de cette variable permet de s'assurer que toutes les ressources, comme votre cluster GKE, sont créées dans le bon projet.CLUSTER_NAME: nom de votre cluster GKE, par exempleagent-sandbox-cluster.GKE_LOCATION: région Google Cloud dans laquelle votre cluster GKE et votre dépôt Artifact Registry seront créés (par exemple,us-central1). Nous vous recommandons de les colocaliser, car cela réduit la latence d'extraction des images.AGENT_SANDBOX_VERSION: version du contrôleur Agent Sandbox à déployer sur votre cluster.NODE_POOL_NAME: nom du pool de nœuds qui exécutera les charges de travail en bac à sable, par exempleagent-sandbox-node-pool.MACHINE_TYPE: type de machine des nœuds de votre pool de nœuds, par exemplee2-standard-2. Pour en savoir plus sur les différentes séries de machines et sur le choix entre les différentes options, consultez le Guide des ressources de familles de machines et guide comparatif.PYTHON_CLIENT_VERSION: version du client Python Agentic Sandbox à installer.
Déployer le bac à sable de l'agent
Maintenant que votre projet Google Cloud et votre environnement Cloud Shell sont configurés, vous êtes prêt à provisionner l'infrastructure nécessaire et à déployer Agent Sandbox.
Créer un cluster GKE
Vous allez maintenant créer un cluster GKE avec gVisor activé. Ce cluster fournit l'environnement Kubernetes dans lequel vous allez déployer et exécuter le contrôleur Agent Sandbox et l'exemple d'application en bac à sable. gVisor fournit la technologie de bac à sable pour exécuter du code non approuvé de manière sécurisée.
Vous pouvez créer un cluster Autopilot ou Standard. Autopilot active gVisor automatiquement, tandis que les clusters standards vous obligent à créer manuellement un pool de nœuds compatible avec gVisor :
Autopilot
Pour créer un cluster Autopilot à l'aide de la gcloud CLI, exécutez la commande suivante :
gcloud container clusters create-auto ${CLUSTER_NAME} \ --location=${GKE_LOCATION} \ --project=${PROJECT_ID}Standard
Pour créer un cluster standard à l'aide de la gcloud CLI, procédez comme suit :
Créez le cluster :
gcloud container clusters create ${CLUSTER_NAME} \ --location=${GKE_LOCATION}Créez un pool de nœuds distinct avec gVisor activé :
gcloud container node-pools create ${NODE_POOL_NAME} \ --cluster=${CLUSTER_NAME} \ --location=${GKE_LOCATION} \ --machine-type=${MACHINE_TYPE} \ --image-type=cos_containerd \ --sandbox type=gvisor
Récupérez les identifiants du cluster afin que la CLI
kubectlpuisse s'y connecter. Cette commande met à jour votre fichier de configuration Kubernetes, qui est stocké par défaut dans le répertoire~/.kube/config. Ce fichier de configuration contient les identifiants dontkubectla besoin pour interagir avec votre cluster GKE :gcloud container clusters get-credentials ${CLUSTER_NAME} \ --location=${GKE_LOCATION}Déployer le contrôleur Agent Sandbox sur votre cluster
Vous pouvez déployer le contrôleur Agent Sandbox et ses composants requis en appliquant les fichiers manifestes de la version officielle à votre cluster. Ces fichiers manifestes sont des fichiers de configuration qui indiquent à Kubernetes de télécharger tous les composants nécessaires au déploiement et à l'exécution du contrôleur Agent Sandbox sur votre cluster.
Exécutez les commandes suivantes pour déployer le contrôleur Agent Sandbox sur votre cluster GKE :
kubectl apply \ -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/${AGENT_SANDBOX_VERSION}/manifest.yaml \ -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/${AGENT_SANDBOX_VERSION}/extensions.yamlVérifier le contrôleur du bac à sable de l'agent
Après avoir appliqué les manifestes, vérifiez que le pod du contrôleur Agent Sandbox s'exécute correctement dans l'espace de noms
agent-sandbox-system:kubectl get pods -n agent-sandbox-systemAttendez que le pod affiche "Running" (En cours d'exécution) dans la colonne ÉTAT et "1/1" dans la colonne PRÊT. Lorsque le pod s'exécute correctement, le résultat ressemble à ceci :
NAME READY STATUS RESTARTS AGE agent-sandbox-controller-0 1/1 Running 0 44dMaintenant que le contrôleur Agent Sandbox est en cours d'exécution, il peut créer et gérer automatiquement des environnements sandbox pour toutes les ressources
Sandboxque vous créez dans votre cluster.Déployer un environnement de bac à sable
Maintenant que le contrôleur Agent Sandbox s'exécute dans votre cluster GKE, vous devez déployer les composants de l'environnement de bac à sable exemple. Cette section vous explique comment créer le blueprint du bac à sable (
SandboxTemplate), déployer le routeur réseau nécessaire et installer le client Python que vous utiliserez pour interagir avec le bac à sable.La méthode recommandée pour créer votre bac à sable et interagir avec lui consiste à utiliser le client Python Agentic Sandbox. Ce client fournit une interface qui simplifie l'ensemble du cycle de vie d'un bac à sable, de la création au nettoyage. Il s'agit d'une bibliothèque Python que vous pouvez utiliser pour créer, utiliser et supprimer des bacs à sable de manière programmatique.
Le client utilise un routeur Sandbox comme point d'entrée central pour tout le trafic. Dans l'exemple décrit dans ce document, le client crée un tunnel vers ce routeur à l'aide de la commande
kubectl port-forward, de sorte que vous n'avez pas besoin d'exposer d'adresses IP publiques. Sachez que l'utilisation dekubectl port-forwardn'est pas une solution sécurisée et qu'elle doit être limitée aux environnements de développement.Créer un
SandboxTemplateet unSandboxWarmPoolVous allez maintenant définir la configuration de votre bac à sable en créant une ressource
SandboxTemplateet une ressourceSandboxWarmPool.SandboxTemplatesert de plan réutilisable que le contrôleur Agent Sandbox utilise pour créer des environnements de bac à sable cohérents et préconfigurés. La ressourceSandboxWarmPoolgarantit qu'un nombre spécifié de pods pré-chauffés sont toujours en cours d'exécution et prêts à être revendiqués. Un bac à sable préchauffé est un pod en cours d'exécution qui a déjà été initialisé. Cette pré-initialisation permet de créer de nouveaux bacs à sable en moins d'une seconde et évite la latence de démarrage d'un bac à sable normal :Dans Cloud Shell, créez un fichier nommé
sandbox-template-and-pool.yamlet contenant ce qui suit :apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxTemplate metadata: name: python-runtime-template namespace: default spec: podTemplate: metadata: labels: sandbox: python-sandbox-example spec: runtimeClassName: gvisor containers: - name: python-runtime image: registry.k8s.io/agent-sandbox/python-runtime-sandbox:v0.1.0 ports: - containerPort: 8888 readinessProbe: httpGet: path: "/" port: 8888 initialDelaySeconds: 0 periodSeconds: 1 resources: requests: cpu: "250m" memory: "512Mi" ephemeral-storage: "512Mi" restartPolicy: "OnFailure" --- apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxWarmPool metadata: name: python-sandbox-warmpool namespace: default spec: replicas: 2 sandboxTemplateRef: name: python-runtime-templateAppliquez les fichiers manifestes
SandboxTemplateetSandboxWarmPool:kubectl apply -f sandbox-template-and-pool.yaml
Déployer le routeur de bac à sable
Le client Python que vous utiliserez pour créer des environnements de bac à sable et interagir avec eux utilise un composant appelé Sandbox Router pour communiquer avec les bacs à sable.
Pour cet exemple, vous allez utiliser le mode développeur du client pour les tests. Ce mode est destiné au développement local et utilise la commande
kubectl port-forwardpour établir un tunnel direct entre votre machine locale et le service Sandbox Router exécuté dans le cluster. Cette approche de tunneling évite d'avoir besoin d'une adresse IP publique ou d'une configuration d'entrée complexe, et simplifie l'interaction avec les bacs à sable depuis votre environnement local.Pour déployer le routeur Sandbox :
Dans Cloud Shell, créez un fichier nommé
sandbox-router.yamlavec le contenu suivant :# A ClusterIP Service to provide a stable endpoint for the router pods. apiVersion: v1 kind: Service metadata: name: sandbox-router-svc namespace: default spec: type: ClusterIP selector: app: sandbox-router ports: - name: http protocol: TCP port: 8080 # The port the service will listen on targetPort: 8080 # The port the router container listens on (from the sandbox_router/Dockerfile) --- # The Deployment to manage and run the router pods. apiVersion: apps/v1 kind: Deployment metadata: name: sandbox-router-deployment namespace: default spec: replicas: 2 # Run at least two replicas for high availability selector: matchLabels: app: sandbox-router template: metadata: labels: app: sandbox-router spec: # Ensure pods are spread across different zones for HA topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: app: sandbox-router containers: - name: router image: us-central1-docker.pkg.dev/k8s-staging-images/agent-sandbox/sandbox-router:v20251124-v0.1.0-10-ge26ddb2 ports: - containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 periodSeconds: 5 livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 10 periodSeconds: 10 resources: requests: cpu: "250m" memory: "512Mi" limits: cpu: "1000m" memory: "1Gi" securityContext: runAsUser: 1000 runAsGroup: 1000Appliquez le fichier manifeste pour déployer le routeur sur votre cluster :
kubectl apply -f sandbox-router.yaml
Installer le client Python
Maintenant que les composants du cluster, comme le routeur Sandbox, sont déployés, la dernière étape préparatoire consiste à installer le client Python Agentic Sandbox sur votre machine locale. Rappelons que ce client est une bibliothèque Python qui vous permet de créer, d'utiliser et de supprimer des bacs à sable de manière programmatique. Vous l'utiliserez dans la section suivante pour tester l'environnement :
Créez et activez un environnement virtuel Python :
python3 -m venv .venv source .venv/bin/activateInstallez le package client à partir du dépôt
agent-sandbox:pip install "git+https://github.com/kubernetes-sigs/agent-sandbox.git@${PYTHON_CLIENT_VERSION}#subdirectory=clients/python/agentic-sandbox-client"
Tester le bac à sable
Maintenant que tous les composants de configuration sont en place, vous pouvez créer un bac à sable et interagir avec lui à l'aide du client Python Agentic Sandbox.
Dans votre répertoire
agent-sandbox, créez un script Python nommétest_sandbox.pyavec le contenu suivant :from agentic_sandbox import SandboxClient # Automatically tunnels to svc/sandbox-router-svc with SandboxClient( template_name="python-runtime-template", namespace="default" ) as sandbox: print(sandbox.run("echo 'Hello from the sandboxed environment!'").stdout )Depuis votre terminal (avec l'environnement virtuel toujours actif), exécutez le script de test :
python3 test_sandbox.py
Le message "Hello from the sandboxed environment!" (Bonjour depuis l'environnement de bac à sable !) doit s'afficher. Il s'agit de la sortie du bac à sable.
Félicitations ! Vous avez exécuté une commande shell dans un bac à sable sécurisé. La méthode
sandbox.run()vous permet d'exécuter n'importe quelle commande shell. Le bac à sable de l'agent exécute la commande dans une barrière sécurisée qui protège les nœuds de votre cluster et les autres charges de travail contre le code non approuvé. Cela permet à un agent d'IA ou à tout workflow automatisé d'exécuter des tâches de manière sécurisée et fiable.Lorsque vous exécutez le script,
SandboxClientgère toutes les étapes pour vous. Il crée la ressourceSandboxClaimpour démarrer le bac à sable, attend que le bac à sable soit prêt, puis utilise la méthodesandbox.run()pour exécuter les commandes du shell bash à l'intérieur du conteneur sécurisé. Le client capture et imprime ensuite lestdoutde cette commande. La sandbox est automatiquement supprimée après l'exécution du programme.Effectuer un nettoyage des ressources
Pour éviter que des frais ne soient facturés sur votre compte Google Cloud , supprimez le cluster GKE que vous avez créé :
gcloud container clusters delete $CLUSTER_NAME --location=$GKE_LOCATION --quietÉtapes suivantes
- Pour en savoir plus sur le projet Open Source Agent Sandbox, consultez GitHub.
- Pour comprendre la technologie sous-jacente qui assure l'isolation de sécurité de vos charges de travail, consultez GKE Sandbox.
- Pour en savoir plus sur l'amélioration de la sécurité de vos clusters et de vos charges de travail, consultez la présentation de la sécurité dans GKE.