Claude Code et le SDK Agent sont des outils puissants qui peuvent exécuter du code, accéder à des fichiers et interagir avec des services externes en votre nom. Comme tout outil ayant ces capacités, les déployer de manière réfléchie garantit que vous bénéficiez des avantages tout en maintenant des contrôles appropriés.
Contrairement aux logiciels traditionnels qui suivent des chemins de code prédéterminés, ces outils génèrent leurs actions de manière dynamique en fonction du contexte et des objectifs. Cette flexibilité est ce qui les rend utiles, mais cela signifie également que leur comportement peut être influencé par le contenu qu'ils traitent : fichiers, pages web ou entrées utilisateur. C'est parfois appelé injection de prompt. Par exemple, si le README d'un référentiel contient des instructions inhabituelles, Claude Code pourrait les incorporer dans ses actions de manière que l'opérateur n'avait pas anticipée. Ce guide couvre des moyens pratiques de réduire ce risque.
La bonne nouvelle est que sécuriser un déploiement d'agent ne nécessite pas d'infrastructure exotique. Les mêmes principes qui s'appliquent à l'exécution de n'importe quel code semi-approuvé s'appliquent ici : isolation, moindre privilège et défense en profondeur. Claude Code inclut plusieurs fonctionnalités de sécurité qui aident avec les préoccupations courantes, et ce guide les parcourt ainsi que des options de durcissement supplémentaires pour ceux qui en ont besoin.
Tous les déploiements n'ont pas besoin d'une sécurité maximale. Un développeur exécutant Claude Code sur son ordinateur portable a des exigences différentes d'une entreprise traitant les données des clients dans un environnement multi-locataire. Ce guide présente des options allant des fonctionnalités de sécurité intégrées de Claude Code aux architectures de production durcies, afin que vous puissiez choisir ce qui convient à votre situation.
Les agents peuvent prendre des mesures involontaires en raison d'une injection de prompt (instructions intégrées dans le contenu qu'ils traitent) ou d'une erreur du modèle. Les modèles Claude sont conçus pour résister à cela, et comme nous l'avons analysé dans notre fiche technique du modèle, nous croyons que Claude Opus 4.5 est le modèle de frontier le plus robuste disponible.
La défense en profondeur est néanmoins une bonne pratique. Par exemple, si un agent traite un fichier malveillant qui lui ordonne d'envoyer les données des clients à un serveur externe, les contrôles réseau peuvent bloquer complètement cette demande.
Claude Code inclut plusieurs fonctionnalités de sécurité qui répondent aux préoccupations courantes. Consultez la documentation de sécurité pour plus de détails.
Pour les déploiements qui nécessitent un durcissement supplémentaire au-delà des paramètres par défaut de Claude Code, ces principes guident les options disponibles.
Une limite de sécurité sépare les composants ayant des niveaux de confiance différents. Pour les déploiements hautement sécurisés, vous pouvez placer les ressources sensibles (comme les identifiants) en dehors de la limite contenant l'agent. Si quelque chose se passe mal dans l'environnement de l'agent, les ressources en dehors de cette limite restent protégées.
Par exemple, plutôt que de donner à un agent un accès direct à une clé API, vous pourriez exécuter un proxy en dehors de l'environnement de l'agent qui injecte la clé dans les demandes. L'agent peut faire des appels API, mais il ne voit jamais l'identifiant lui-même. Ce modèle est utile pour les déploiements multi-locataires ou lors du traitement de contenu non approuvé.
Si nécessaire, vous pouvez restreindre l'agent aux seules capacités requises pour sa tâche spécifique :
| Ressource | Options de restriction |
|---|---|
| Système de fichiers | Monter uniquement les répertoires nécessaires, préférer la lecture seule |
| Réseau | Restreindre à des points de terminaison spécifiques via proxy |
| Identifiants | Injecter via proxy plutôt que d'exposer directement |
| Capacités système | Supprimer les capacités Linux dans les conteneurs |
Pour les environnements hautement sécurisés, superposer plusieurs contrôles fournit une protection supplémentaire. Les options incluent :
La bonne combinaison dépend de votre modèle de menace et de vos exigences opérationnelles.
Différentes technologies d'isolation offrent différents compromis entre la force de sécurité, les performances et la complexité opérationnelle.
Dans toutes ces configurations, Claude Code (ou votre application SDK Agent) s'exécute à l'intérieur de la limite d'isolation—le sandbox, le conteneur ou la VM. Les contrôles de sécurité décrits ci-dessous restreignent ce que l'agent peut accéder depuis cette limite.
| Technologie | Force d'isolation | Surcharge de performance | Complexité |
|---|---|---|---|
| Runtime sandbox | Bonne (paramètres par défaut sécurisés) | Très faible | Faible |
| Conteneurs (Docker) | Dépend de la configuration | Faible | Moyen |
| gVisor | Excellente (avec la bonne configuration) | Moyen/Élevé | Moyen |
| VMs (Firecracker, QEMU) | Excellente (avec la bonne configuration) | Élevé | Moyen/Élevé |
Pour une isolation légère sans conteneurs, sandbox-runtime applique les restrictions du système de fichiers et du réseau au niveau du système d'exploitation.
L'avantage principal est la simplicité : aucune configuration Docker, image de conteneur ou configuration réseau requise. Le proxy et les restrictions du système de fichiers sont intégrés. Vous fournissez un fichier de paramètres spécifiant les domaines et chemins autorisés.
Comment cela fonctionne :
bubblewrap sur Linux, sandbox-exec sur macOS) pour restreindre l'accès en lecture/écriture aux chemins configurésConfiguration :
npm install @anthropic-ai/sandbox-runtimeEnsuite, créez un fichier de configuration spécifiant les chemins et domaines autorisés.
Considérations de sécurité :
Noyau du même hôte : Contrairement aux VMs, les processus en sandbox partagent le noyau de l'hôte. Une vulnérabilité du noyau pourrait théoriquement permettre une évasion. Pour certains modèles de menace, c'est acceptable, mais si vous avez besoin d'une isolation au niveau du noyau, utilisez gVisor ou une VM séparée.
Pas d'inspection TLS : Le proxy met en liste blanche les domaines mais n'inspecte pas le trafic chiffré. Si l'agent a des identifiants permissifs pour un domaine autorisé, assurez-vous qu'il n'est pas possible d'utiliser ce domaine pour déclencher d'autres demandes réseau ou pour exfiltrer des données.
Pour de nombreux cas d'utilisation de développeur unique et CI/CD, sandbox-runtime élève considérablement la barre avec une configuration minimale. Les sections ci-dessous couvrent les conteneurs et les VMs pour les déploiements nécessitant une isolation plus forte.
Les conteneurs fournissent une isolation via les espaces de noms Linux. Chaque conteneur a sa propre vue du système de fichiers, de l'arborescence des processus et de la pile réseau, tout en partageant le noyau de l'hôte.
Une configuration de conteneur durcie en sécurité pourrait ressembler à ceci :
docker run \
--cap-drop ALL \
--security-opt no-new-privileges \
--security-opt seccomp=/path/to/seccomp-profile.json \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=100m \
--tmpfs /home/agent:rw,noexec,nosuid,size=500m \
--network none \
--memory 2g \
--cpus 2 \
--pids-limit 100 \
--user 1000:1000 \
-v /path/to/code:/workspace:ro \
-v /var/run/proxy.sock:/var/run/proxy.sock:ro \
agent-imageVoici ce que fait chaque option :
| Option | Objectif |
|---|---|
--cap-drop ALL | Supprime les capacités Linux comme NET_ADMIN et SYS_ADMIN qui pourraient permettre l'escalade de privilèges |
--security-opt no-new-privileges | Empêche les processus de gagner des privilèges via les binaires setuid |
--security-opt seccomp=... | Restreint les appels système disponibles ; la valeur par défaut de Docker en bloque ~44, les profils personnalisés peuvent en bloquer davantage |
--read-only | Rend le système de fichiers racine du conteneur immuable, empêchant l'agent de persister les modifications |
--tmpfs /tmp:... | Fournit un répertoire temporaire accessible en écriture qui est effacé lorsque le conteneur s'arrête |
--network none | Supprime toutes les interfaces réseau ; l'agent communique via la prise Unix montée ci-dessous |
--memory 2g | Limite l'utilisation de la mémoire pour prévenir l'épuisement des ressources |
--pids-limit 100 | Limite le nombre de processus pour prévenir les bombes fork |
--user 1000:1000 | S'exécute en tant qu'utilisateur non-root |
-v ...:/workspace:ro | Monte le code en lecture seule afin que l'agent puisse l'analyser mais pas le modifier. Évitez de monter les répertoires d'hôte sensibles comme ~/.ssh, ~/.aws ou ~/.config |
-v .../proxy.sock:... | Monte une prise Unix connectée à un proxy s'exécutant en dehors du conteneur (voir ci-dessous) |
Architecture de prise Unix :
Avec --network none, le conteneur n'a aucune interface réseau. La seule façon pour l'agent d'atteindre le monde extérieur est via la prise Unix montée, qui se connecte à un proxy s'exécutant sur l'hôte. Ce proxy peut appliquer les listes blanches de domaines, injecter les identifiants et enregistrer tout le trafic.
C'est la même architecture utilisée par sandbox-runtime. Même si l'agent est compromis via une injection de prompt, il ne peut pas exfiltrer les données vers des serveurs arbitraires—il ne peut communiquer que via le proxy, qui contrôle les domaines accessibles. Pour plus de détails, consultez le billet de blog sur le sandboxing de Claude Code.
Options de durcissement supplémentaires :
| Option | Objectif |
|---|---|
--userns-remap | Mappe la racine du conteneur à l'utilisateur d'hôte sans privilèges ; nécessite une configuration du démon mais limite les dégâts en cas d'évasion de conteneur |
--ipc private | Isole la communication inter-processus pour prévenir les attaques entre conteneurs |
Les conteneurs standard partagent le noyau de l'hôte : lorsque le code à l'intérieur d'un conteneur effectue un appel système, il va directement au même noyau qui exécute l'hôte. Cela signifie qu'une vulnérabilité du noyau pourrait permettre l'évasion du conteneur. gVisor résout ce problème en interceptant les appels système en espace utilisateur avant qu'ils n'atteignent le noyau de l'hôte, en implémentant sa propre couche de compatibilité qui gère la plupart des appels système sans impliquer le vrai noyau.
Si un agent exécute du code malveillant (peut-être en raison d'une injection de prompt), ce code s'exécute dans le conteneur et pourrait tenter des exploits du noyau. Avec gVisor, la surface d'attaque est beaucoup plus petite : le code malveillant devrait d'abord exploiter l'implémentation en espace utilisateur de gVisor et aurait un accès limité au vrai noyau.
Pour utiliser gVisor avec Docker, installez le runtime runsc et configurez le démon :
// /etc/docker/daemon.json
{
"runtimes": {
"runsc": {
"path": "/usr/local/bin/runsc"
}
}
}Ensuite, exécutez les conteneurs avec :
docker run --runtime=runsc agent-imageConsidérations de performance :
| Charge de travail | Surcharge |
|---|---|
| Calcul lié au CPU | ~0% (pas d'interception d'appel système) |
| Appels système simples | ~2× plus lent |
| Entrée/sortie intensive de fichiers | Jusqu'à 10-200× plus lent pour les modèles d'ouverture/fermeture lourds |
Pour les environnements multi-locataires ou lors du traitement de contenu non approuvé, l'isolation supplémentaire vaut souvent la surcharge.
Les VMs fournissent une isolation au niveau matériel via les extensions de virtualisation CPU. Chaque VM exécute son propre noyau, créant une limite forte—une vulnérabilité dans le noyau invité ne compromet pas directement l'hôte. Cependant, les VMs ne sont pas automatiquement « plus sécurisées » que les alternatives comme gVisor. La sécurité des VMs dépend fortement de l'hyperviseur et du code d'émulation des appareils.
Firecracker est conçu pour l'isolation légère des microVMs—il peut démarrer les VMs en moins de 125 ms avec moins de 5 MiB de surcharge mémoire, en supprimant l'émulation d'appareils inutile pour réduire la surface d'attaque.
Avec cette approche, la VM de l'agent n'a pas d'interface réseau externe. Au lieu de cela, elle communique via vsock (prises virtuelles). Tout le trafic s'achemine via vsock vers un proxy sur l'hôte, qui applique les listes blanches et injecte les identifiants avant de transférer les demandes.
Pour les déploiements cloud, vous pouvez combiner l'une des technologies d'isolation ci-dessus avec les contrôles réseau natifs du cloud :
credential_injector) qui valide les demandes, applique les listes blanches de domaines, injecte les identifiants et transfère vers les API externesLes agents ont souvent besoin d'identifiants pour appeler les API, accéder aux référentiels ou interagir avec les services cloud. Le défi est de fournir cet accès sans exposer les identifiants eux-mêmes.
L'approche recommandée est d'exécuter un proxy en dehors de la limite de sécurité de l'agent qui injecte les identifiants dans les demandes sortantes. L'agent envoie les demandes sans identifiants, le proxy les ajoute et transfère la demande à sa destination.
Ce modèle a plusieurs avantages :
Claude Code supporte deux méthodes pour acheminer les demandes d'échantillonnage via un proxy :
Option 1 : ANTHROPIC_BASE_URL (simple mais uniquement pour les demandes d'API d'échantillonnage)
export ANTHROPIC_BASE_URL="http://localhost:8080"Cela indique à Claude Code et au SDK Agent d'envoyer les demandes d'échantillonnage à votre proxy au lieu de l'API Anthropic directement. Votre proxy reçoit les demandes HTTP en texte brut, peut les inspecter et les modifier (y compris injecter les identifiants), puis transfère vers l'API réelle.
Option 2 : HTTP_PROXY / HTTPS_PROXY (système complet)
export HTTP_PROXY="http://localhost:8080"
export HTTPS_PROXY="http://localhost:8080"Claude Code et le SDK Agent respectent ces variables d'environnement standard, acheminant tout le trafic HTTP via le proxy. Pour HTTPS, le proxy crée un tunnel CONNECT chiffré : il ne peut pas voir ou modifier le contenu des demandes sans interception TLS.
Vous pouvez créer votre propre proxy ou en utiliser un existant :
credential_injector pour ajouter les en-têtes d'authentificationAu-delà de l'échantillonnage à partir de l'API Anthropic, les agents ont souvent besoin d'un accès authentifié à d'autres services—référentiels git, bases de données, API internes. Il y a deux approches principales :
Fournissez l'accès via un serveur MCP ou un outil personnalisé qui achemine les demandes vers un service s'exécutant en dehors de la limite de sécurité de l'agent. L'agent appelle l'outil, mais la demande authentifiée réelle se produit en dehors—l'outil appelle un proxy qui injecte les identifiants.
Par exemple, un serveur MCP git pourrait accepter les commandes de l'agent mais les transférer à un proxy git s'exécutant sur l'hôte, qui ajoute l'authentification avant de contacter le référentiel distant. L'agent ne voit jamais les identifiants.
Avantages :
Pour les appels à l'API Anthropic, ANTHROPIC_BASE_URL vous permet d'acheminer les demandes vers un proxy qui peut les inspecter et les modifier en texte brut. Mais pour les autres services HTTPS (GitHub, registres npm, API internes), le trafic est souvent chiffré de bout en bout—même si vous l'achemineriez via un proxy via HTTP_PROXY, le proxy ne voit qu'un tunnel TLS opaque et ne peut pas injecter les identifiants.
Pour modifier le trafic HTTPS vers des services arbitraires, sans utiliser un outil personnalisé, vous avez besoin d'un proxy terminant TLS qui déchiffre le trafic, l'inspecte ou le modifie, puis le re-chiffre avant de le transférer. Cela nécessite :
HTTP_PROXY/HTTPS_PROXY pour acheminer le trafic via le proxyCette approche gère n'importe quel service basé sur HTTP sans écrire d'outils personnalisés, mais ajoute de la complexité autour de la gestion des certificats.
Notez que tous les programmes ne respectent pas HTTP_PROXY/HTTPS_PROXY. La plupart des outils (curl, pip, npm, git) le font, mais certains peuvent contourner ces variables et se connecter directement. Par exemple, fetch() de Node.js ignore ces variables par défaut ; dans Node 24+, vous pouvez définir NODE_USE_ENV_PROXY=1 pour activer le support. Pour une couverture complète, vous pouvez utiliser proxychains pour intercepter les appels réseau, ou configurer iptables pour rediriger le trafic sortant vers un proxy transparent.
Un proxy transparent intercepte le trafic au niveau du réseau, donc le client n'a pas besoin d'être configuré pour l'utiliser. Les proxies réguliers nécessitent que les clients se connectent explicitement et parlent HTTP CONNECT ou SOCKS. Les proxies transparents (comme Squid ou mitmproxy en mode transparent) peuvent gérer les connexions TCP brutes redirigées.
Les deux approches nécessitent toujours le proxy terminant TLS et le certificat CA de confiance—elles garantissent simplement que le trafic atteint réellement le proxy.
Les contrôles du système de fichiers déterminent quels fichiers l'agent peut lire et écrire.
Lorsque l'agent doit analyser le code mais pas le modifier, montez le répertoire en lecture seule :
docker run -v /path/to/code:/workspace:ro agent-imageMême l'accès en lecture seule à un répertoire de code peut exposer les identifiants. Les fichiers courants à exclure ou nettoyer avant le montage :
| Fichier | Risque |
|---|---|
.env, .env.local | Clés API, mots de passe de base de données, secrets |
~/.git-credentials | Mots de passe/jetons Git en texte brut |
~/.aws/credentials | Clés d'accès AWS |
~/.config/gcloud/application_default_credentials.json | Jetons ADC Google Cloud |
~/.azure/ | Identifiants Azure CLI |
~/.docker/config.json | Jetons d'authentification du registre Docker |
~/.kube/config | Identifiants du cluster Kubernetes |
.npmrc, .pypirc | Jetons du registre de paquets |
*-service-account.json | Clés de compte de service GCP |
*.pem, *.key | Clés privées |
Envisagez de copier uniquement les fichiers source nécessaires, ou d'utiliser le filtrage de style .dockerignore.
Si l'agent doit écrire des fichiers, vous avez quelques options selon que vous voulez que les modifications persistent :
Pour les espaces de travail éphémères dans les conteneurs, utilisez les montages tmpfs qui existent uniquement en mémoire et sont effacés lorsque le conteneur s'arrête :
docker run \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=100m \
--tmpfs /workspace:rw,noexec,size=500m \
agent-imageSi vous voulez examiner les modifications avant de les persister, un système de fichiers overlay permet à l'agent d'écrire sans modifier les fichiers sous-jacents—les modifications sont stockées dans une couche séparée que vous pouvez inspecter, appliquer ou rejeter. Pour une sortie entièrement persistante, montez un volume dédié mais gardez-le séparé des répertoires sensibles.