Règles
Serveurs MCP
Skills
1. Qu’est-ce que le Firewall
Un agent IA ne se contente pas de générer du texte — il agit. Il appelleshell.exec, interroge db.query, récupère une URL, charge un skill
communautaire ou route un appel d’outil à travers un serveur MCP tiers.
Chacun de ces actes est une action aux conséquences réelles, et les
guardrails au niveau du prompt ne peuvent pas les voir.
Le Firewall est une politique nommée, à portée d’espace de travail
que la passerelle évalue à chaque appel d’outil. Vous rédigez une politique
une fois, attachez-y une clé API (ou en définissez une comme défaut de
l’espace de travail), et dès lors chaque appel d’outil émis par cette clé
est vérifié contre la politique — avant qu’il n’atteigne l’outil.
Chaque politique est une liste ordonnée de règles. Une règle décide
d’une seule chose — à quels appels d’outils elle s’applique (un glob de
nom d’outil, optionnellement scopé à un skill et à une surface
d’application) et quoi en faire (un verdict : allow, audit, deny,
sanitize, hold for approval, ou cap cost). Le moteur parcourt les règles
dans l’ordre de priorité, la première correspondance gagne, et retombe
sur le verdict par défaut de la politique si rien ne correspond.
La modification d’une politique prend effet sur chaque clé qui y est
attachée dès le prochain appel. Aucun redéploiement. Aucun changement de
code d’agent. La politique est appliquée dans la passerelle — votre agent
continue d’émettre des appels d’outils exactement comme auparavant.
2. Les quatre surfaces d’application
Chaque appel d’outil est évalué contre exactement une surface — le point du cycle de vie de la requête où le firewall le voit :| Surface | Ce qu’elle voit |
|---|---|
inbound | Les outils qu’un agent annonce au modèle sur la requête (définitions d’outils). Vous permet de bloquer un outil dangereux avant même que le modèle puisse le choisir. |
response | Les tool_calls que le modèle émet dans sa réponse. |
mcp | Un tools/call dispatché à travers la passerelle MCP du Firewall ou évalué via le hook du SDK. |
egress | Une destination réseau sortante (host / IP / CIDR) rapportée par un outil — la surface de SSRF et d’exfiltration de données. |
3. Concepts fondamentaux
| Concept | Définition |
|---|---|
| Politique | Un ensemble de règles nommé, à portée d’espace de travail. Possède enabled, is_default, un default_verdict et un flag shadow_mode. |
| Règle | Une vérification à l’intérieur d’une politique : une priorité, une correspondance d’outil/skill, une surface optionnelle, un prédicat d’argument optionnel et un verdict. Voir Règles. |
| Verdict | L’action qu’une règle (ou le défaut) produit — voir §4. |
| Verdict par défaut | Appliqué lorsqu’aucune règle ne correspond. L’une des valeurs allow, audit (défaut) ou deny. |
| Mode shadow | La politique évalue et journalise mais ne bloque jamais — chaque verdict appliquant est rétrogradé en audit et la raison est préfixée [shadow] would …. Votre interrupteur de déploiement sûr. |
| Mode observe | Un réglage au niveau de l’espace de travail. Lorsqu’une requête ne résout aucune politique et que le mode observe est activé, l’appel est autorisé mais journalisé comme une lacune de couverture — c’est ce qui alimente la vue des outils découverts. |
Portée et résolution
Les politiques se résolvent exactement comme les Guardrails et les clés API — partagées dans l’espace de travail lorsque vous avez un espace de travail actif. Pour tout appel d’outil, la passerelle résout la politique dans cet ordre :- Attachement de clé — si la clé appelante a un
firewall_policy_id, cette politique s’applique (lorsqu’elle existe et est activée). - Défaut de l’espace de travail — sinon, la politique
is_defaultactivée de l’espace de travail s’applique. - Ni l’un ni l’autre — aucune application. Avec le mode observe activé, l’appel est autorisé et journalisé comme une lacune ; avec lui désactivé, l’appel est autorisé silencieusement (identique octet pour octet à un espace de travail qui n’a jamais activé la fonctionnalité).
4. Verdicts
Une règle (ou le verdict par défaut) produit l’une des valeurs :| Verdict | Ce qu’il fait |
|---|---|
allow | Laisse passer l’appel. Journalisé. |
audit | Autorise, mais l’enregistre pour revue. Le default_verdict par défaut — tout observer, ne rien bloquer, jusqu’à ce que vous soyez prêt. |
deny | Bloque l’appel. L’agent voit une erreur d’outil (ou une HTTP 400 sur la surface inbound). |
sanitize | Redacte les sous-chaînes correspondantes des arguments de l’outil (secrets, PII) et transmet l’appel nettoyé. Voir assainisseurs. Sur la surface inbound — où il n’y a pas encore d’arguments au moment de l’appel — sanitize escalade en un block. |
pending_approval | Met l’appel en attente d’un humain. L’agent reçoit une réponse « held » ; un relecteur approuve ou rejette hors-bande ; l’agent re-soumet avec un token d’approbation à usage unique. Voir §7. |
cap_cost | Refuse dès que la dépense accumulée de l’exécution de l’agent dépasse un plafond en centimes par règle. Un disjoncteur pour les boucles emballées. |
deny / sanitize / pending_approval sont tous
rétrogradés en audit afin que vous puissiez mesurer l’impact d’une
politique avant qu’elle ne change le trafic.
5. Comment un appel d’outil est évalué
- Un appel d’outil atteint la passerelle (annoncé en inbound, émis dans une réponse, dispatché à travers la passerelle MCP, ou rapporté comme egress).
- Le moteur résout la politique active (§3).
- Il parcourt les règles de la politique dans l’ordre de priorité (priorité plus basse d’abord ; égalités tranchées par l’id de règle). Une règle correspond lorsque sa surface, son glob de nom d’outil, son glob de nom de skill optionnel, ses clauses d’arguments optionnelles et sa portée d’egress optionnelle correspondent toutes.
- La première correspondance gagne → le verdict de la règle s’applique.
Si aucune règle ne correspond → le
default_verdictde la politique. - Si l’appel appartient à un skill
gouverné, le mode d’application du skill est appliqué par-dessus — un
skill en mode
blockforce un deny ; un skill en modequarantineescalade tout ce qui est en-deçà d’un deny verspending_approval. - La décision est journalisée comme un événement firewall (sauf s’il s’agit d’un dry run), corrélée à l’exécution et à la session de l’agent.
6. À quoi ressemble un block
Un appel refusé sur la surface inbound renvoie une HTTP 400 avec un corps d’erreur de forme OpenAI, le code d’erreurfirewall_blocked, et un
message nommant l’outil et la raison — par exemple tool "shell.exec" blocked by firewall: destructive shell command. L’erreur porte des
metadata structurées (code de raison, facteurs de risque, score) et est
marquée skip-retry (ré-exécuter le même appel ne ferait que bloquer à
nouveau).
Un appel dispatché à travers la passerelle MCP est bloqué comme une
erreur d’outil (firewall deny: <reason>) plutôt qu’une défaillance de
transport, de sorte que le modèle voit le rejet et peut réagir — choisir un
autre outil, demander à l’utilisateur, ou s’arrêter — au lieu de planter.
Un appel mis en attente (pending_approval) renvoie une HTTP 400 avec
le code firewall_approval_pending et un id d’approbation sur lequel le
client interroge.
7. Approbation humaine (HITL)
Un verdictpending_approval transforme un appel d’outil en une revue
hors-bande :
- Le moteur met en file d’attente un enregistrement d’approbation et renvoie une réponse « held » portant son id ; l’appel n’atteint pas l’outil.
- Un relecteur le résout — depuis la console (Developer+), ou via un callback webhook signé HMAC vers votre propre système d’approbation.
- Votre agent (ou le SDK MCP) interroge l’id d’approbation ; une fois
approuvé, il re-soumet l’appel d’origine avec un en-tête
X-OrcaRouter-Firewall-Approvalà usage unique, et la passerelle le laisse passer cette fois-là.
rule_changed afin que les relecteurs sachent que le contexte a changé.
8. Niveaux d’autonomie — un seul interrupteur pour toute votre posture
Ajuster les politiques règle par règle est le chemin précis ; les niveaux d’autonomie sont le chemin rapide. Un unique contrôle remplace atomiquement la posture Firewall et Guardrails de votre espace de travail en une seule transaction, avec annulation en un clic :| Niveau | Posture |
|---|---|
tight | Bloque le shell destructeur, les secrets dans les arguments et l’egress SSRF (deny par défaut) ; guardrails PII Shield + Secrets Blocker activés ; mode observe désactivé. |
balanced | Audite le shell destructeur, signale la PII ; mode observe désactivé. La posture de départ recommandée. |
permissive | Aucune politique appliquant, aucun guardrail ; mode observe activé pour que vous voyiez quand même tout. |
9. Détection d’anomalies
Au-delà des règles statiques, le Firewall apprend la forme normale d’utilisation des outils de chaque espace de travail et signale les écarts sur un flux lisible par un viewer :- Pics de débit / coût — l’activité par outil est scorée contre une
baseline heure-de-la-semaine apprise (une moyenne glissante sur 14
jours), de sorte que « 100 appels
db.queryà 3h du matin un dimanche » ressort même si chaque appel est individuellement autorisé. retry_loop— un agent qui martèle le même outil défaillant.novel_path— une transition d’outil à outil que cet espace de travail n’a jamais faite auparavant.
10. Observabilité
Le Firewall laisse une trace sur laquelle vous pouvez agir, le tout à portée d’espace de travail :| Surface | Ce qu’elle vous donne |
|---|---|
| Events | Chaque évaluation, filtrable par verdict, surface, outil, exécution et session. L’enregistrement brut derrière tout le reste. |
| Runs & sessions | Événements agrégés par exécution d’agent ou conversation — répartition des verdicts, outils et modèles distincts, première/dernière apparition. La vue « ce que cet agent a réellement fait ». |
| Discovered tools | Chaque outil que l’espace de travail a vu, marqué covered (une règle s’applique) ou gap (aucune ne s’applique). Pilote la rédaction de politiques à partir du trafic réel. |
| Simulate | Prévisualisez ce qu’un niveau d’autonomie changerait avant de l’appliquer. |
| Test | Exécutez en dry-run une politique contre un appel d’outil d’échantillon et voyez le verdict, la règle correspondante et la raison — rien n’est persisté, rien n’est dispatché. |
| Audit | Chaque changement de politique, de règle et de réglage écrit une ligne d’audit (espace de travail + central) après le commit du changement. Les secrets et les blobs de règles ne sont jamais journalisés. |
11. Relation avec le reste de la passerelle
| Surface | Comment cela se compose avec le Firewall ? |
|---|---|
| Guardrails | Plans complémentaires. Les Guardrails filtrent le texte des prompts/réponses ; le Firewall gouverne les actions d’outils. Les deux peuvent s’appliquer à une même requête. Les niveaux d’autonomie règlent les deux à la fois. |
| Routage | Indépendant. Le routage choisit le modèle/canal ; le firewall juge les appels d’outils peu importe quel modèle les a servis. |
| Clés API | Une clé s’attache à une politique via firewall_policy_id ; la liaison vit sur la clé dans la passerelle. Sans attachement, on retombe sur le défaut de l’espace de travail. |
| Passerelle MCP | Le firewall est la passerelle MCP — chaque serveur que vous enregistrez dispatche son tools/call à travers le moteur. |
| Skills | Le mode d’application d’un skill gouverné se superpose au verdict de la règle, de sorte qu’un skill en quarantaine est mis en attente même si aucune règle ne nomme ses outils. |
12. Connecter un agent à la passerelle Firewall
Il y a deux façons pour un appel d’outil d’atteindre le moteur :- Passerelle MCP — pointez votre client MCP (Claude Desktop, Cursor, un
framework d’agent) vers
https://api.orcarouter.ai/api/v1/firewall/mcp. La passerelle expose les outils de chaque serveur enregistré joignable, sous le namespace<server>.<tool>, et évalue chaquetools/callen ligne. Voir Serveurs MCP. - Hook d’évaluation — appelez
POST /api/v1/firewall/evaluatedepuis votre propre boucle d’agent avant de dispatcher un appel d’outil, et agissez sur le verdict.
403 sur ces
routes.
13. Référence API
Toutes les routes de console sont à portée d’espace de travail via le contexte d’espace de travail et appliquent RBAC de manière cohérente : les lectures et les sandboxes de test/simulation sont ouvertes à chaque membre ; les écritures nécessitent Developer+.Politiques & réglages
| Méthode & chemin | Rôle | Objectif |
|---|---|---|
GET /api/workspace/firewall/settings | Member | Lire les réglages firewall de l’espace de travail (mode observe, défauts). |
PUT /api/workspace/firewall/settings | Developer+ | Mettre à jour les réglages. |
GET /api/workspace/firewall/policies | Member | Lister les politiques (avec comptes de règles + clés attachées). |
GET /api/workspace/firewall/policies/:id | Member | Détail d’une seule politique. |
POST /api/workspace/firewall/policies | Developer+ | Créer une politique. |
PUT /api/workspace/firewall/policies | Developer+ | Mettre à jour une politique. |
DELETE /api/workspace/firewall/policies/:id | Developer+ | Supprimer une politique (409 si des clés y sont encore attachées). |
Posture, presets & sandboxes
| Méthode & chemin | Rôle | Objectif |
|---|---|---|
GET /api/workspace/firewall/presets | Member | Presets de règles intégrés. |
POST /api/workspace/firewall/autonomy | Developer+ | Appliquer un niveau d’autonomie. |
POST /api/workspace/firewall/autonomy/undo/:audit_id | Developer+ | Annuler un changement d’autonomie. |
GET /api/workspace/firewall/simulate | Member | Prévisualiser un niveau d’autonomie (?level=). |
POST /api/workspace/firewall/test | Developer+ | Exécuter en dry-run une politique contre un appel d’outil d’échantillon. |
Observabilité
| Méthode & chemin | Rôle | Objectif |
|---|---|---|
GET /api/workspace/firewall/discovered-tools | Member | Outils vus, marqués covered / gap. |
GET /api/workspace/firewall/events | Developer+ | Lister les événements firewall (filtrables). |
GET /api/workspace/firewall/events/by-request/:request_id | Developer+ | Événements pour une requête. |
GET /api/workspace/firewall/events/aggregate | Developer+ | Agrégation par exécutions / sessions. |
GET /api/workspace/firewall/trace/by-run | Developer+ | Nœuds de trace pour une exécution (?run_id=). |
GET /api/workspace/firewall/anomalies | Member | Flux d’anomalies (?window=). |
POST /api/workspace/firewall/anomalies/snooze | Developer+ | Mettre en sourdine le flux d’anomalies. |
Passerelle (machine-à-machine)
Celles-ci s’exécutent sur un token scopé à la passerelle firewall, pas sur la session de console :| Méthode & chemin | Objectif |
|---|---|
POST /api/v1/firewall/evaluate | Verdict pré-dispatch pour un appel d’outil. |
POST /api/v1/firewall/evaluate_plan | Vérification pré-exécution pour un plan multi-étapes. |
ANY /api/v1/firewall/mcp | L’endpoint unifié de la passerelle MCP. |
GET /api/v1/firewall/approvals/:id | Interroger l’état d’approbation d’un appel en attente. |
POST /api/v1/firewall/approvals/:id/callback | Callback d’approbation signé HMAC. |
14. FAQ
Que se passe-t-il si aucune politique ne se résout sur un appel d'outil ?
Que se passe-t-il si aucune politique ne se résout sur un appel d'outil ?
Comment déployer une politique en toute sécurité ?
Comment déployer une politique en toute sécurité ?
Un appel d'outil bloqué coûte-t-il du quota ?
Un appel d'outil bloqué coûte-t-il du quota ?
cap_cost est elle-même un contrôle de
facturation — elle refuse dès que la dépense de l’exécution franchit
votre plafond en centimes.Firewall ou Guardrails — lequel utiliser ?
Firewall ou Guardrails — lequel utiliser ?
tight les configure ensemble.L'application est-elle garantie pour chaque outil qu'un agent exécute ?
L'application est-elle garantie pour chaque outil qu'un agent exécute ?

auditet la raison est préfixée[shadow] would …. Surveillez les vues events et runs, confirmez qu’elle se déclenche sur ce que vous attendez et sur rien d’autre, puis désactivez le mode shadow pour commencer à appliquer.