Accès réseau
Une sandbox n'ouvre aucune connexion sortante sans votre autorisation : network utilise par défaut
agents.Network.none(). Toutes les sandbox exécutables, sauf DangerousLocalSandbox, acceptent les deux mêmes
options pour contrôler ce qui en sort.
NoSandbox n'accepte aucune des deux : elle n'ouvre aucune connexion.
networkdéfinit les connexions sortantes que la sandbox peut ouvrir.header_bindingsrépertorie les identifiants que la sandbox ajoute à ces connexions, comme un token pour vos dépôts GitHub privés. Voir Liaison d'en-tête.
Autoriser les connexions
Construire network avec l'une des trois méthodes :
agents.Network.none() # no outbound connection
agents.Network.all() # every outbound connection
agents.Network.allow(hosts=("api.github.com", "pypi.org")) # only HTTPS to these hostsChaque entrée de hosts est un nom d'hôte ou une adresse IP, avec un :port facultatif. Écrivez "pypi.org",
pas "https://pypi.org" : un schéma, un chemin ou un caractère générique * provoque une erreur. La sandbox accède
à ces hôtes uniquement via HTTPS. Elle refuse toute requête en http:// vers ces hôtes.
agents.Agent(
model="mistral-large-4",
environment=agents.BashkitSandbox(network=agents.Network.allow(hosts=("api.github.com",))),
)Seul bash ouvre des connexions, avec des commandes comme curl. Lorsque
access vaut "files" ou "none", le modèle n'a pas accès à bash : network
limite alors uniquement les hooks et les scripts de configuration de votre sandbox.
Chaque type de sandbox ne peut appliquer que certaines politiques. À sa construction, une sandbox refuse toute politique qu'elle ne peut pas appliquer. Elle ne s'exécute donc jamais avec des limites moins strictes que celles que vous avez définies :
| sandbox | network | Identifiants |
|---|---|---|
NoSandbox | none() | aucun |
BashkitSandbox | none(), all(), allow() | aucun |
MistralSandbox | none(), all() | GitHubBinding, MistralApiBinding, WorkspaceHeaderBindings |
LocalDockerSandbox | none(), all() | aucun |
DangerousLocalSandbox | toujours all() | aucun |
experimental.CustomSandbox | ce que déclare la sous-classe | ce que déclare la sous-classe |
Réseau Bashkit
Les adresses privées et de bouclage restent bloquées, même lorsqu'un hôte dans Network.allow() correspond à l'une d'elles. Pour
accéder à un service sur votre machine ou votre réseau local, par exemple pour tester une
API locale, désactivez cette restriction :
agents.BashkitSandbox(
network=agents.Network.allow(hosts=("localhost:8000",)),
block_private_ips=False,
)Politique réseau de la sandbox Mistral
MistralSandbox filtre le trafic par adresse IP et accepte donc Network.none() (par défaut) ou
Network.all(). Network.allow(hosts=...) provoque une erreur.
Pour autoriser uniquement certaines adresses IP, passez egress=agents.EgressPolicy.custom(allow_cidrs=...). Cette option autorise
les adresses répertoriées en complément de Network.none() : vous ne pouvez donc pas la combiner avec Network.all(). Une
plage /0 comme 0.0.0.0/0 provoque une erreur : utilisez plutôt Network.all().
agents.MistralSandbox() # no outbound access (default)
agents.MistralSandbox(network=agents.Network.all()) # unrestricted
agents.MistralSandbox(
egress=agents.EgressPolicy.custom(
allow_cidrs=(
"203.0.113.10", # single IPv4 address
"10.0.0.0/8", # IPv4 CIDR range
"2001:db8::/32", # IPv6 CIDR range
),
),
)Chaque entrée de allow_cidrs est une adresse IPv4 ou IPv6, ou une plage CIDR. custom nécessite au moins une
entrée. Les noms d'hôtes et les URL ne sont pas acceptés ; résolvez-les d'abord en adresses IP.
Liaison d'en-tête
Une liaison d'en-tête ajoute un identifiant aux requêtes qui quittent la sandbox. La sandbox ne voit jamais sa valeur.
agents.Agent(
model="mistral-large-4",
environment=agents.MistralSandbox(
network=agents.Network.all(),
header_bindings=(agents.GitHubBinding(repos=("your-org/your-repo",)),),
),
)Le token provient du connecteur GitHub de la personne qui démarre la session. La liaison ne nécessite donc
aucun secret. Une liaison doit pouvoir accéder à ses hôtes, sinon la construction de la sandbox provoque une erreur : avec
MistralSandbox, passez network=agents.Network.all(). Les
références des liaisons d'en-tête répertorient les autres types, et
le tableau de la section Autoriser les connexions indique les types pris en charge par chaque sandbox.
Problèmes courants
| Message affiché | Cause | Solution |
|---|---|---|
MistralSandbox does not support Network.allow(); pass network=Network.none() or network=Network.all() | MistralSandbox filtre par adresse IP, pas par hôte. | Utilisez Network.all(), ou autorisez des adresses avec egress=agents.EgressPolicy.custom(allow_cidrs=...). |
MistralSandbox: agents.GitHubBinding needs network access to github.com, api.github.com, which Network.none() blocks; pass network=Network.all() | Une liaison d'en-tête ne peut pas accéder à ses hôtes. | Passez network=agents.Network.all(). |
Et après
Secrets : fournissez à vos outils un identifiant qui ne figure pas dans votre code.