Passer au contenu principal
Un serveur MCP enregistré annonce les outils qu’il veut — et un agent en appellera volontiers n’importe lequel. La posture sûre est l’inverse : décidez la courte liste d’outils dont vous avez réellement besoin, autorisez exactement ceux-là, et refusez le reste. C’est une liste d’autorisation, et sur OrcaRouter vous la construisez à partir de règles tool_name_glob évaluées sur la surface mcp. Chaque tools/call qui traverse la passerelle MCP passe par votre politique firewall avant d’atteindre le vrai serveur. Donc la liste d’autorisation n’est pas consultative — un appel à un outil que vous n’avez pas autorisé ne se dispatche jamais.
L’édition de politique est une action console. Les routes /api/workspace/firewall/* s’authentifient avec votre token de session / d’accès, pas une clé relais sk-orca-…. Écrire des règles requiert le rôle Developer+ ; tout membre d’espace de travail (jusqu’à Viewer) peut lire les politiques et le flux des outils découverts.

1. Pourquoi une liste d’autorisation à refus par défaut pour des outils mcp sécurisés

Une liste de refus — « bloquer les outils dangereux » — échoue à l’instant où un serveur ajoute un nouvel outil, en renomme un, ou que vous connectez un second serveur. L’ensemble des outils dangereux est ouvert ; l’ensemble que vous vouliez utiliser est petit et connu. Une liste d’autorisation inverse le défaut de sorte que l’inconnu est refusé, pas admis :
  • Les nouveaux outils sont refusés par défaut. Un serveur qui se dote d’un outil delete_repo après que vous l’avez connecté ne peut pas être appelé tant que vous ne l’avez pas ajouté à la liste d’autorisation.
  • La portée est par serveur. Le namespace <server>.<tool> vous laisse autoriser github.create_issue tout en refusant tout le reste sous github.*.
  • Un seul point d’étranglement. La même politique gouverne le serveur intégré et chaque serveur BYO derrière la passerelle, donc il y a un seul endroit pour lire la liste d’autorisation.
La liste d’autorisation s’associe naturellement au mode observe : activez-le d’abord, laissez le trafic réel peupler le flux des Outils Découverts, puis promouvez les outils que vous voyez en règles d’autorisation explicites et basculez le défaut sur deny.

2. Les deux pièces

Une liste d’autorisation est un default_verdict plus un ensemble ordonné de règles.

default_verdict: deny

Le repli de la politique pour tout tools/call qu’aucune règle ne fait correspondre. Réglez-le sur deny et tout ce que vous n’avez pas explicitement autorisé est bloqué. (Il accepte aussi allow et auditaudit est le défaut.)

règles allow

Une règle par outil (ou par glob). Chacune porte un tool_name_glob et un verdict allow. Un tools/call correspondant au glob se résout en allow et se dispatche ; tout le reste retombe sur le défaut deny.
Le glob est confronté au nom d’outil avec namespace — github.create_issue, shell.exec. * correspond à n’importe quel outil (utilisez-le avec parcimonie ; une règle d’autorisation avec * défait toute la liste d’autorisation). Un <server>. en tête cadre le glob à un seul serveur.

3. Un exemple concret

Vous avez connecté un serveur github et vous voulez seulement que les agents lisent et ouvrent des issues — jamais supprimer ni administrer quoi que ce soit. Dans la console, ouvrez Firewall → Policies, réglez le verdict par défaut de la politique sur deny, et ajoutez deux règles d’autorisation :
Ordretool_name_globVerdict
1github.create_issueallow
2github.list_issuesallow
C’est toute la liste d’autorisation. Avec le défaut à deny :
  • github.create_issue → correspond à la règle 1 → allow, se dispatche.
  • github.delete_repo → ne correspond à rien → deny par défaut.
Un appel MCP refusé revient au modèle comme une erreur d’outil (firewall deny: …) — la même forme que renvoie n’importe quel outil défaillant — de sorte que l’agent peut s’adapter au lieu de planter. (Sur la surface inbound un deny est plutôt un HTTP 400 avec le code d’erreur firewall_blocked.)
Les règles sont ordonnées et évaluées de haut en bas. Ne placez pas un large allow tool_name_glob: github.* au-dessus de vos règles de deny spécifiques — la première correspondance gagne et le joker admettrait les outils mêmes que vous vouliez exclure. Dans le doute, gardez la liste d’autorisation étroite et appuyez-vous sur le défaut deny plutôt que sur les jokers.

4. Resserrer avec les arguments

Un nom d’outil sur la liste d’autorisation peut quand même être appelé avec de mauvais arguments. Resserrez davantage en ajoutant une clause args_match (JSONPath + un opérateur comme eq, contains, regex, in, ou cidr_match) à la règle, ou en superposant une règle deny au-dessus de l’allow pour une forme d’argument spécifique — par exemple, autorisez github.create_issue mais deny-le quand le dépôt cible n’est pas sur une liste approuvée. Voir la référence des règles du firewall pour l’ensemble complet des opérateurs.
sanitize redacte les arguments d’un appel d’outil avant transmission — il ne touche jamais à ce qu’un outil renvoie. Pour rogner le contenu renvoyé, c’est un contrôle différent ; voir assainir la sortie des outils.

5. Le déployer en sécurité

Basculez un refus par défaut à l’échelle du serveur en production et vous risquez de casser un agent qui dépendait discrètement d’un outil que vous avez oublié. Deux réglages dé-risquent :
Un drapeau par politique qui rétrograde les verdicts enforcing en audit. Votre défaut deny et vos règles deny journalisent [shadow] would deny … au lieu de bloquer, de sorte que vous pouvez valider la liste d’autorisation contre le trafic réel avant qu’elle ne morde. En savoir plus dans modes d’application.
Un réglage d’espace de travail qui journalise chaque appel non couvert comme une lacune dans le flux des Outils Découverts. Exécutez-le avant d’écrire la liste d’autorisation pour apprendre exactement quels outils vos agents appellent, puis promouvez chacun en règle d’autorisation explicite.
Une fois le journal shadow propre — aucun appel légitime n’aurait été refusé — effacez shadow_mode et la liste d’autorisation s’applique.

6. Vérifier que ça marche

Après l’application, confirmez que les outils refusés sont réellement écartés :
  • Dry-run d’un tools/call contre la politique (Developer+) pour voir le verdict et quelle règle — ou le défaut — l’a produit, sans envoyer de trafic réel. Passez un nom d’outil, une surface, et des arguments d’exemple ; le moteur les évalue et renvoie la trace de verdict sans enregistrer d’événement.
  • Surveillez les événements. Chaque appel bloqué enregistre un événement firewall qu’un Developer+ peut lire dans la console ; la page événements d’audit couvre le flux et ses champs.
Vous préférez ne pas rédiger chaque règle à la main ? Le preset d’autonomie tight écrit une politique de refus par défaut pour vous (plus des règles de deny pour les outils shell destructeurs et les noms d’outils de forme fetch), puis vous rajoutez les outils spécifiques dont vous avez besoin. Voir modes d’application pour ce que chaque niveau d’autonomie installe.

Connexe

Connecter un serveur MCP

Enregistrer un serveur avant de pouvoir lister ses outils autorisés.

Firewall : serveurs MCP

Le comportement d’exécution de la passerelle et les verdicts par appel.

Référence des règles du firewall

Le DSL de règle complet — globs, args_match, egress, sanitize.

Appels d'outils dangereux

La menace qu’une liste d’autorisation est conçue pour contenir.

Limites d'egress

Gouverner où un outil autorisé peut atteindre.

Guardrails vs. firewall

Quand recourir à la politique de contenu vs. la politique d’outils.