Vos outils d’agents IA sont les nouvelles extensions de navigateur : une couche de confort avec le pouvoir de ruiner votre semaine. Le Model Context Protocol (MCP) rend trivial le raccordement des agents aux systèmes de fichiers, aux API SaaS et aux data lakes. Il rend tout aussi trivial la fuite de secrets, l’exfiltration de données personnelles clients, ou l’exécution d’une boucle coûteuse qui réveille l’équipe SRE à 3 h du matin. Si vous livrez des serveurs MCP sans architecture d’isolation, d’identité à portée limitée et de contrôle d’egress, vous apprendrez ces leçons en production.
Ces dernières semaines, plusieurs praticiens ont partagé des mises en garde : des serveurs MCP tournant avec deux clés API dans le même processus ; des appels d’outils qui héritent de privilèges ambiants ; des agents capables d’atteindre n’importe quelle destination en egress. Dans le même temps, les plateformes de sécurité se ruent pour « gouverner les agents IA » — signe que les budgets et les régulateurs regardent. Vous pouvez attendre qu’un vendeur règle le problème, ou mettre en place dès maintenant un plan pragmatique et dormir mieux.
Ce que MCP change (et pourquoi c’est risqué)
MCP standardise une façon pour les modèles et les runtimes d’agents d’appeler des « outils » via un serveur local ou distant. Un outil peut lire un fichier local, récupérer une fiche CRM ou déclencher un déploiement. Excellente DX. C’est aussi une nouvelle frontière de confiance :
- Les outils s’exécutent souvent sur des portables développeur où traînent des identifiants ambiants, des agents SSH et des réglages réseau permissifs.
- Les appels d’outils sont orchestrés par des LLM non déterministes, sujets à l’injection de prompt et aux actions trop larges.
- Des serveurs MCP tiers arrivent sous forme de binaires ou de packages avec des dépendances transitives opaques et des canaux de mise à jour peu transparents.
Si cela vous rappelle l’écosystème des extensions de navigateur, c’est normal — sauf que cette fois, le « content script » peut toucher votre base de données de production si vous l’y autorisez.
Un modèle de menaces pour CTO appliqué aux serveurs MCP
- Escalade via injection de prompt : un contenu non fiable pousse un agent à appeler un outil puissant (p. ex. « exporter tous les contrats vers une URL externe »).
- Enchevêtrement d’identifiants : plusieurs clés chargées dans un même processus ; le mauvais outil utilise la mauvaise identité.
- Egress non borné : des outils peuvent appeler des domaines arbitraires, transformant votre réseau en tuyau d’exfiltration.
- Risque supply chain : serveurs MCP avec mise à jour implicite automatique ou versions non signées ; des dépendances de dev deviennent des passifs en prod.
- Abus de ressources : boucles infinies ou traitements massifs dépassant coûts/SLO.
- Fuite inter‑locataires : un MCP hébergé multi‑tenant sans frontières d’identité solides laisse fuiter des données entre clients.
Un plan crédible limite le blast radius sur cinq axes : processus, identité, réseau, données et coût.
Une architecture qui limite le blast radius
1) Exécuter les outils hors processus avec un contrat étroit
Ne regroupez pas tous les outils dans un processus long‑vécu. Lancez chaque invocation d’outil dans un worker isolé avec :
- Isolation OS : processus séparé avec profil restrictif (seccomp, AppArmor sous Linux ; sandbox-exec sous macOS ; job objects sous Windows). Désactivez l’écriture sur le système de fichiers sauf dans un répertoire temporaire.
- Canal d’E/S explicite : communiquez via stdin/stdout avec une enveloppe compacte et typée (MessagePack ou CBOR). Gardez le contrat minuscule : entrées, sorties, erreur, métriques. Aucun global partagé.
- TTL court : durée de vie du processus en secondes. Du démarrage à l’arrêt en moins de 60 s pour la plupart des outils ; 5–10 minutes max pour les traitements de masse avec heartbeat.
Oui, forker un worker par appel ajoute 10–25 ms sur un laptop et 5–15 ms dans un conteneur réchauffé. C’est une assurance bon marché contre les mouvements latéraux.
2) Identité par outil avec identifiants de courte durée
Chaque appel d’outil doit disposer d’une identité unique et limitée dans le temps. Deux schémas fonctionnent bien :
- Workload identity (préféré) : utilisez SPIFFE/SPIRE ou l’identité de charge de travail cloud pour émettre par appel un SVID X.509/JWT. Le worker l’échange contre un jeton de service de courte durée (2–10 minutes) limité au périmètre des actions autorisées de l’outil.
- Broker de jetons à périmètre : si vous devez utiliser des clés API, faites tourner un broker local ou hébergé qui émet, par appel, des jetons signés par votre organisation et limités en portée. Aucune clé fournisseur brute dans le processus worker. Expiration à T+5 minutes ; liaison à tool_call_id et à l’audience.
Rendez impossible pour un « outil système de fichiers » d’hériter par accident du jeton CRM. Ne chargez jamais deux identifiants sans lien dans le même processus ; laissez le broker imposer l’isolation.
3) Garde-fous d’egress : forcez tout le trafic via un proxy de politique
Ne faites pas confiance aux variables d’environnement. Forcez les workers à n’atteindre Internet qu’au travers d’un proxy d’egress local ou distant avec mTLS et politiques. La politique doit couvrir :
- Allowlist par outil : l’outil A peut appeler github.com et internal-api.company, l’outil B peut appeler crm.vendor.com. Refusez tout le reste.
- Contraintes de méthode et de chemin : uniquement GET/POST ; bloquez DELETE ; restreignez les regex de chemin (p. ex., ^/v1/contacts/[^/]+$).
- DNS pinning et contraintes de certificats : bloquez les AC génériques ; privilégiez le certificate pinning ou TOFU avec alerting.
- Budgets de débit et d’octets : 60 requêtes/minute max et 5 Mo d’egress par appel, sauf relèvement explicite.
Open Policy Agent (OPA) ou un proxy léger dédié conviennent. Attendez‑vous à 3–8 ms de latence ajoutée par requête. Acceptable comparé au coût d’un incident.
4) Budgets de ressources et gardes d’état fini
Les agents se perdent. Vos contrôles non. Mettez des budgets et des machines à états explicites entre « le modèle dit fais X » et « l’outil fait X » :
- Budgets par appel : secondes CPU, plafond mémoire (p. ex., 256 Mo), nombre max d’invocations d’outil (p. ex., 10), TTL mur (p. ex., 120 s), octets d’egress (p. ex., 2 Mo).
- FSM pour les outils critiques : exigez que l’agent parcoure des états distincts : PLAN → PREVIEW → USER_ACK → EXECUTE. Approuvez automatiquement PREVIEW pour les opérations à faible risque ; exigez un ACK utilisateur pour les changements à haut risque.
- Disjoncteur hors bande : un interrupteur général et une désactivation par outil prenant effet en moins de 60 secondes via votre magasin de configuration/feature flag.
Ne noyez pas la FSM dans le prompt du modèle. Faites‑la respecter dans l’orchestrateur.
5) Prévention des pertes de données sur les entrées et sorties
Ne laissez pas des données sensibles circuler dans les outils sans visibilité. Mettez en place une DLP légère :
- Classification : Regex+ML pour emails, numéros de sécurité sociale (SSN), cartes bancaires, clés. Étiquetez chaque champ de sortie avec un niveau de sensibilité.
- Masquage et minimisation : supprimez ou hachez les champs sensibles sauf si l’outil déclare un périmètre de besoin‑d’en‑connaître approuvé par la politique.
- Contrôles d’exfiltration au proxy : bloquez les envois vers des domaines inconnus si la charge utile contient des étiquettes de haute sensibilité.
Commencez avec un jeu de règles simple et affinez. Vous détecterez vite les fuites évidentes.
Modes de déploiement : local, hébergé ou hybride
Local (agent sur la machine du développeur)
Avantages : Coût infra nul, excellente intégration avec les fichiers locaux et les outils CLI, itération rapide. Inconvénients : Environnement le moins contrôlable ; variabilité des OS ; identifiants ambiants partout ; appareils BYOD.
- Packaging : distribuez en binaire signé avec mise à jour automatique via des canaux signés. Livrez des builds reproductibles et une SBOM.
- Isolation : utilisez des workers par appel avec sandbox OS ; FS en lecture seule par défaut ; montez en bind un répertoire temporaire pour tout écrit.
- Egress : embarquez un petit proxy local (à l’écoute sur 127.0.0.1) qui applique la politique et sort via le réseau d’entreprise ou personnel.
Visez une latence de cold start inférieure à 250 ms pour un outil simple ; les utilisateurs l’acceptent.
Hébergé (votre cloud)
Avantages : Contrôle le plus fort sur l’identité, l’egress et l’audit ; mises à jour centrales ; adapté aux entreprises. Inconvénients : Coût infra et complexité de la multi‑location ; plus difficile d’accéder aux fichiers locaux ou ressources air‑gap.
- Multi‑tenancy : un namespace Kubernetes par locataire ou pool avec politiques réseau strictes. Utilisez une workload identity par pod worker.
- Secrets : aucun secret statique dans K8s. Utilisez le KMS cloud + broker pour émettre des jetons par appel.
- Stockage : volumes éphémères uniquement ; rétention max 24 h pour les logs sans payloads ; les charges utiles sensibles vont dans un object store chifré et temporaire avec URLs pré‑signées expirant en 15 minutes.
Comptez 1k–3k $/mois pour faire tourner un proxy d’egress modeste et un pool de workers pour ~100 RPS de pic. C’est moins cher qu’une revue d’incident de sécurité.
Hybride (local léger, distant lourd)
Un serveur MCP local léger gère les lectures de système de fichiers ou l’intégration IDE, tandis que les outils lourds (CRM, facturation, déploiement) tournent hébergés. Faites passer les appels sensibles par le proxy d’egress et le broker d’identité hébergés ; gardez les outils locaux en lecture seule par défaut. Vous gardez ainsi l’UX locale sans céder le contrôle des opérations critiques.
Observabilité réellement utile
Un blob de logs par appel d’outil n’est pas de l’observabilité. Il vous faut des événements structurés qui disent qui a fait quoi, pourquoi, et où cela est allé.
- Schéma d’événement : tenant_id, user_id (ou agent_id), model_trace_id, tool_name, tool_call_id (UUIDv7), worker_spiffe_id, policy_decision_id, egress_rule_id, budgets_used, bytes_out, status, et hash d’entrée/sortie.
- Corrélation : propagez un model_trace_id depuis la requête LLM à travers chaque invocation d’outil et saut de proxy.
- Échantillonnage et rétention : conservez 100 % des refus de politique, 100 % des flux très sensibles, et un échantillon de 5–10 % du reste pendant 30 jours. Masquez les payloads ; gardez les hashes pour la déduplication.
- Alertes qui comptent : destinations d’egress inhabituelles, pics d’épuisement de budgets, refus de politique répétés par le même outil, et tentatives d’accès inter‑locataires.
Préparez un runbook pour chaque alerte avec une désactivation en un clic de l’outil impliqué. Mesurez le time‑to‑disable en secondes, pas en minutes.
Achat et conformité pour les serveurs MCP tiers
Si vous adoptez des serveurs MCP communautaires ou éditeurs, ajoutez une barrière de sécurité légère :
- Versions signées et SBOM : vérifiez les signatures (Sigstore/cosign). La SBOM doit inclure les dépendances transitives et la fréquence des mises à jour.
- Preuve de sandbox : stratégie d’isolation de processus documentée ; pas de mélange d’identifiants par processus. Demandez un test unitaire ou une démo prouvant l’isolation.
- Configurabilité : allowlists d’egress, jetons par outil, contrôles de budget et hooks d’audit doivent être de première classe, pas des TODO.
- Builds reproductibles : capacité à reconstruire depuis la source et vérifier la correspondance des binaires.
- Gestion des données : politique de rétention claire ; possibilité de désactiver la journalisation des payloads ; garanties de suppression inférieures à 24 h pour toute donnée mise en cache.
Fixez cette barre dès maintenant ; vos incidents futurs seront plus courts, moins chers et moins publics.
Plan de déploiement : 30 / 60 / 90 jours
Jours 0–30 : inventaire et confinement
- Inventoriez tous les outils et serveurs MCP en usage (officiels et « shadow ») et classez par risque : lecture seule, lecture‑écriture interne, lecture‑écriture externe.
- Introduisez un orchestrateur minimal qui standardise les workers par appel et un proxy d’egress local avec une allowlist pour les 3 principaux outils. Mesurez la latence ajoutée.
- Activez la journalisation d’événements structurés avec model_trace_id et tool_call_id. Pas de payloads pour l’instant, uniquement des métadonnées.
Jours 31–60 : identité et politique
- Montez un broker de jetons ou SPIRE ; migrez un outil à forte valeur vers des identifiants par appel et de courte durée. Éliminez au passage toute clé fournisseur longuement valide.
- Rédigez des politiques OPA pour l’egress et les budgets. Imposez des contraintes méthode/chemin pour votre API externe la plus risquée (CRM, facturation, hébergeur de code).
- Ajoutez une étape d’ACK utilisateur pour tout outil qui écrit sur des systèmes de production. Mesurez la latence d’approbation et la satisfaction utilisateur.
Jours 61–90 : passage à l’échelle et durcissement
- Étendez les contrôles d’identité et d’egress à 80 % du volume d’outils. Activez le hachage/masquage des payloads pour la DLP.
- Ajoutez des kill switches et feature flags par outil reliés à un runbook d’astreinte. Testez un incident simulé de bout en bout.
- Adoptez des versions signées et des vérifications SBOM pour les serveurs MCP tiers. Échouez en mode fermé sur les binaires non signés après une période de grâce.
Au jour 90, vous devez pouvoir répondre, en moins de cinq minutes : « Qu’a fait cet agent, avec quelle identité, contre quels systèmes, et comment je le coupe ? »
Ce que ça coûte (et pourquoi ça vaut le coup)
- Latence : +10–25 ms pour l’isolation de processus ; +3–8 ms par requête au proxy ; +5–20 ms pour l’émission de jeton. Net : +20–50 ms par appel d’outil dans les chemins courants. Pour une UX au 95e percentile, c’est très bien.
- Infra : un petit cluster de proxy d’egress et l’orchestration ajoutent environ 1k–3k $/mois à ~100 RPS de pic, plus le stockage pour 30 jours de métadonnées (~dizaines de Go).
- Temps dev : 2–3 semaines‑ingénieur pour construire un orchestrateur minimal et la politique du proxy ; 2–4 semaines de plus pour brancher la workload identity et la DLP sur les outils à risque.
Comparez ces chiffres au coût médian d’un incident de sécurité mineur (50k–200k $ en triage/forensics/juridique) ou à une semaine perdue en rotation de secrets et communications clients. Ce n’est pas du plaquage or ; c’est éviter de se tirer une balle dans le pied.
Quand dire non
- Aucun accès écriture à la prod par défaut : exigez une autorisation explicite, des portes FSM et un ACK utilisateur pour tout chemin d’écriture en production.
- Aucun identifiant ambiant : si un outil exige de coller des clés API statiques dans un fichier de config, faites‑le d’abord passer par un broker — ou ne le livrez pas.
- Aucun egress arbitraire : les outils qui « ont besoin d’Internet ouvert » obtiennent un profil de navigateur sandboxé ou un environnement de recherche, pas la production.
- Aucune cohabitation de locataires sans frontières d’identité : si vous ne pouvez pas tracer la boîte autour d’un locataire, ne les exécutez pas ensemble.
Nearshorer ce travail sans perdre le contrôle
Si vous manquez d’équipe plateforme, c’est un bon candidat pour un pod nearshore : un sprint focalisé, très sécurité, avec livrables clairs et SLO mesurables. Vous voulez des ingénieurs capables de livrer un garde‑fou viable minimal en deux semaines, pas une « plateforme de politiques » sur un an. Exigez :
- Preuve d’isolation : une démo où un outil tente de lire des fichiers interdits et d’appeler des domaines bloqués — et échoue avec des logs utiles.
- Benchmarks : latence ajoutée P50 et P95 par appel d’outil et par saut de proxy sur du matériel développeur réel.
- Runbooks : une checklist d’une page pour désactiver un outil, faire tourner une clé et exporter un audit pour la sécurité.
Le vivier de talents senior de Brazil est à l’aise avec les conteneurs Linux, OPA et la pile d’identité cloud que vous exploitez déjà. Vous obtenez 6–8 heures de recouvrement avec les fuseaux US pour itérer rapidement sur des politiques qui demandent toujours du réglage.
L’essentiel
MCP est un bon standard. Le danger n’est pas le protocole — c’est la posture par défaut qui empile des outils puissants dans un seul processus avec une confiance ambiante, sans identité et avec un egress ouvert. Traitez vos serveurs MCP comme un logiciel de production avec une nouvelle frontière de confiance. Contenez le périmètre des processus, émettez des identités par appel, forcez le trafic via un proxy de politique, appliquez des budgets et des FSM, et journalisez comme si vous étiez audité demain. Faites‑le une fois, et vous pourrez dire « oui » à plus de capacités d’agent sans jouer la survie de l’entreprise.
Points clés
- Les outils MCP constituent une nouvelle frontière de confiance. Traitez‑les comme des extensions de navigateur dotées de pouvoirs de production.
- Exécutez les outils hors processus avec sandboxing OS ; des workers par appel ajoutent ~10–25 ms et vous évitent des incidents.
- Émettez des identités de courte durée par outil via SPIFFE ou un broker de jetons ; ne partagez jamais les identifiants entre outils.
- Faites passer tous les appels réseau par un proxy de politique avec allowlists, contraintes méthode/chemin et mTLS.
- Faites respecter budgets et portes FSM hors du prompt du modèle ; ajoutez un kill switch global relié aux runbooks.
- Adoptez des événements d’audit structurés et corrélés avec model_trace_id et tool_call_id ; conservez 30 jours de métadonnées.
- Commencez par un plan 30/60/90 : inventaire, identité/egress, puis passage à l’échelle et durcissement.
- Attendez‑vous à +20–50 ms par appel et ~1k–3k $/mois d’infra pour des garde‑fous solides — bon marché comparé à un incident.