Déployer un agent IA autonome capable d’analyser des flux externes (flux RSS, alertes de veille, pages web, courriels entrants) introduit une surface d’attaque critique : l’injection de prompt indirecte (Indirect Prompt Injection). Un contenu externe malveillant peut tenter de détourner les instructions de l’agent pour exfiltrer des secrets, interroger le réseau local ou saturer l’hôte par déni de service.
Plutôt que de compter uniquement sur le filtrage sémantique du modèle LLM : par nature probabiliste : , une architecture Zero-Trust déplace la sécurité au niveau du système d’exploitation et du réseau : l’agent est confiné dans une enclave hermétique dépourvue de tout privilège d’infrastructure.
Pourquoi isoler un agent autonome
Dans une approche de défense en profondeur, on postule que le contexte du LLM peut être compromis par une donnée externe. L’infrastructure doit donc garantir mathématiquement et matériellement que même un agent détourné ne peut ni rebondir sur le LAN, ni lire les bases de production, ni épuiser les ressources du serveur :
Les quatre invariants matériels de l’enclave sont :
- Zéro accès au plan de contrôle : aucun montage de
/var/run/docker.sock, aucun volume partagé avec le stockage primaire (NAS/SAN) ni accès direct à la base de données centrale. - Cloisonnement réseau strict : réseau bridge dédié avec blocage explicite des plages privées RFC1918 (
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16) à l’exception de l’endpoint de collecte de la Data Diode. - Contingentement matériel (cgroups v2) : plafonnement dur de la RAM, du CPU et du nombre de processus (
pids_limit) pour neutraliser toute fork-bomb ou fuite mémoire. - Communication sortante par Data Diode signée : l’enclave ne peut pas requêter le cœur du système ; elle ne peut qu’émettre des télémétries structurées signées par
HMAC-SHA256.
Conteneur standard vs enclave isolée
| Vecteur de risque | Agent IA déployé sans enclave | Enclave IA Zero-Trust durcie |
|---|---|---|
| Injection de prompt visant l’hôte | Risque d’exécution ou lecture de secrets voisins | Système de fichiers read_only: true, no-new-privileges, UID non-root |
| Mouvement latéral LAN / SSRF | Accès possible aux services internes non authentifiés | Filtrage réseau strict + validation anti-SSRF des IP résolues |
| Emballement boucle LLM / OOM | Saturation de la RAM hôte et crash des services critiques | mem_limit: 512m, cpus: 1.0, pids_limit: 128 via cgroups |
| Corruption de la base centrale | Écriture directe en base avec credentials partagés | Zéro credential BDD ; télémétrie poussée via Data Diode HMAC-SHA256 |
| Arrêt d’urgence (Killswitch) | Dépend de la réactivité interne du processus agent | Sentinelle externe indépendante capable de couper l’enclave hors-bande |
Configuration Docker Compose
Le descripteur d’infrastructure ci-dessous verrouille les capacités noyau Linux (cap_drop: ALL), interdit l’élévation de privilèges et impose un système de fichiers racine immuable :
services:
autonomous_enclave:
image: registry.internal/enclave-agent:1.4.0
container_name: ai_enclave_worker
restart: unless-stopped
user: "10001:10001"
read_only: true
tmpfs:
- /tmp:size=64M,noexec,nosuid,nodev
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
deploy:
resources:
limits:
cpus: "1.00"
memory: 512M
pids: 128
networks:
- enclave_isolated_net
La Data Diode signée en HMAC-SHA256
Pour remonter ses indicateurs de performance (KPIs, résumés d’exécution, coûts tokens) vers le tableau de bord central sans jamais disposer d’un accès en lecture/écriture sur la base principale, l’enclave signe chaque paquet JSON avec une clé partagée à portée unique et un horodatage anti-rejeu :
import hashlib
import hmac
import json
import time
def build_diode_envelope(payload: dict, diode_secret: str) -> dict:
timestamp = int(time.time())
canonical = json.dumps(payload, sort_keys=True, separators=(",", ":"))
message = f"{timestamp}.{canonical}".encode("utf-8")
signature = hmac.new(diode_secret.encode("utf-8"), message, hashlib.sha256).hexdigest()
return {
"ts": timestamp,
"payload": payload,
"hmac_sha256": signature,
}
Le récepteur central vérifie d’abord la fraîcheur du timestamp (abs(now - ts) < 60), valide la signature en temps constant (hmac.compare_digest), puis applique un schéma Pydantic strict avant toute persistance.
| Commande | Description |
|---|
5. Synthèse architecturale
L’autonomie d’un agent IA en production est directement proportionnelle à la rigueur de son confinement. En combinant un système de fichiers immuable, des quotas cgroups infranchissables et une Data Diode unidirectionnelle signée, on tire parti de la puissance d’automatisation des LLM tout en garantissant l’intégrité du système d’information.
