Configurer des bacs à sable pour les services

Les bacs à sable Cloud Run fournissent un environnement rapide, sécurisé et isolé pour exécuter du code non approuvé ou des outils, tels que des agents d'IA, dans votre service existant dans l'environnement de deuxième génération. Les bacs à sable sont fortement optimisés pour la latence et s'exécutent dans la même instance que votre conteneur, en partageant le processeur et la mémoire qui lui sont alloués.

Cette page explique comment configurer des bacs à sable sur votre conteneur. Pour savoir comment écrire du code pour interagir avec le bac à sable à l'aide de la CLI, consultez Exécution de code dans Cloud Run.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Installez et initialisez la gcloud CLI.
  7. Déployez un service Cloud Run dans l'environnement d'exécution de deuxième génération.

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer et déployer des services Cloud Run, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Si vous déployez un service ou une fonction à partir du code source, vous devez également disposer de rôles supplémentaires dans votre projet et votre compte de service Cloud Build.

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec les APIGoogle Cloud , telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.

Activer les bacs à sable

Tout changement de configuration entraîne la création d'une révision. Les révisions ultérieures obtiennent aussi automatiquement le même paramètre de configuration, à moins que vous ne le mettiez explicitement à jour.

Lorsque vous activez les bacs à sable, votre service Cloud Run est déployé dans l'environnement d'exécution de deuxième génération. Pour activer les bacs à sable dans les services Cloud Run, utilisez la Google Cloud CLI ou une configuration YAML :

gcloud

Pour déployer ou mettre à jour le service, spécifiez l'option --sandbox-launcher :

  • Pour déployer un nouveau service, exécutez la commande suivante :

    gcloud beta run deploy SERVICE --image IMAGE_URL --sandbox-launcher

    Remplacez les éléments suivants :

    • SERVICE : nom de votre service Cloud Run.
    • IMAGE_URL : référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL est au format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • Pour mettre à jour un service existant, exécutez la commande suivante :

    gcloud beta run services update SERVICE --sandbox-launcher

YAML

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Mettez à jour le fichier YAML de votre service pour inclure l'attribut sandboxLauncher défini sur true dans la configuration de votre conteneur :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER
            image: IMAGE_URL
            sandboxLauncher: true
            port: 8080
    

    Remplacez les éléments suivants :

    • SERVICE : nom de votre service Cloud Run.
    • CONTAINER : nom de votre conteneur.
    • IMAGE_URL : référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL est au format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Créez ou mettez à jour le service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

    La commande gcloud run services replace utilise par défaut le fichier service.yaml s'il est présent.

Les bacs à sable partagent le processeur et la mémoire alloués au conteneur hôte. Assurez-vous que les limites de processeur et de mémoire de votre conteneur principal sont suffisantes pour votre application et pour les bacs à sable actifs que vous exécutez en même temps.

Désactiver les bacs à sable

Pour désactiver la possibilité de lancer un bac à sable dans votre service, utilisez Google Cloud CLI ou une configuration YAML :

gcloud

Mettez à jour le service à l'aide de l'indicateur --no-sandbox-launcher en exécutant la commande suivante :

gcloud beta run services update SERVICE --no-sandbox-launcher

Remplacez SERVICE par le nom du service.

YAML

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Mettez à jour le fichier YAML de votre service pour supprimer l'attribut sandboxLauncher dans la configuration de votre conteneur :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER
            image: IMAGE_URL
            port: 8080
    

    Remplacez les éléments suivants :

    • SERVICE : nom de votre service Cloud Run.
    • CONTAINER : nom de votre conteneur.
    • IMAGE_URL : référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL est au format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Créez ou mettez à jour le service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

    La commande gcloud run services replace utilise par défaut le fichier service.yaml s'il est présent.

Lancer des bacs à sable

Une fois les bacs à sable activés, vous pouvez les lancer depuis votre environnement d'exécution de conteneur. Le fichier binaire du bac à sable se trouve à l'emplacement /usr/local/gcp/bin/sandbox.

Vous pouvez exécuter le fichier binaire en référençant son chemin d'accès absolu dans votre code source. Par exemple, pour imprimer Hello dans votre bac à sable isolé, choisissez l'une des options suivantes :

Node.js

Pour exécuter la commande sandbox à partir d'une application Node.js, incluez le code suivant :

exec(`/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"`, (e, stdout, stderr) => {
    res.send({ stdout, stderr });
});

Python

Pour exécuter la commande de bac à sable à partir d'une application Python, incluez le code suivant :

import subprocess
result = subprocess.run(
    ["/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello"],
    capture_output=True,
    text=True,
)
return {"stdout": result.stdout, "stderr": result.stderr}

Go

Pour exécuter la commande sandbox à partir d'une application Go, incluez le code suivant :

cmd := exec.Command("/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello")
out, err := cmd.CombinedOutput()

CLI Sandbox

Pour exécuter la commande sandbox directement à partir de la ligne de commande, exécutez la commande suivante :

/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"

Les exemples de ce guide utilisent la commande sandbox au lieu de son chemin d'accès absolu /usr/local/gcp/bin/sandbox.

Pour afficher la liste complète des commandes disponibles, exécutez la commande /usr/local/gcp/bin/sandbox -h.

Pour exécuter du code non approuvé dans un bac à sable à partir de votre service, consultez Exécution de code dans Cloud Run.