1. Le schéma de règle firewall en un coup d’œil
Chaque règle porte les mêmes champs. Seulverdict est toujours requis — tout
le reste restreint ce que la règle correspond ou configure le verdict
choisi, et un matcher absent est vacuement vrai.
| Champ | Objectif |
|---|---|
priority | Ordre d’évaluation — la plus basse s’exécute d’abord. |
verdict | L’action lorsque la règle correspond (requis). |
stage | La surface à laquelle se scoper ; vide = toutes. |
tool_name_glob | Glob sur le nom de l’outil. |
args_match_json | Prédicat d’argument JSONPath, sous forme de chaîne encodée en JSON. |
egress_json | Liste host / CIDR d’autorisation-refus (règles d’egress), sous forme de chaîne encodée en JSON. |
sanitize_json | Configuration de rédaction (quand verdict = sanitize), sous forme de chaîne encodée en JSON. |
cap_cost_cents | Plafond de coût d’exécution en centimes USD (quand verdict = cap_cost). |
sequence_json | Prédicat de chaîne multi-étapes ordonnée (règles de séquence), sous forme de chaîne encodée en JSON. |
label / notes | Nom humain et justification — affichés dans les événements, ignorés par le moteur. |
default_verdict de la politique s’applique.
2. priority — l’ordre d’évaluation
Un ordinal entier. La plus basse s’exécute d’abord ; deux règles de même
priorité sont départagées par l’id de règle (ordre d’insertion). Placez vos
exceptions spécifiques au-dessus de vos attrape-tout larges — un allow pour
un outil de confiance à la priorité 10 bat un deny * à la priorité 100.
3. verdict — l’action
Le seul champ requis. Quand une règle correspond, son verdict décide ce qui
arrive à l’appel :
| Verdict | Effet |
|---|---|
allow | Laisse passer l’appel, journalisé. |
audit | Autorise et enregistre pour revue — le default_verdict habituel. |
deny | Bloque l’appel. |
sanitize | Redacte les sous-chaînes correspondantes des arguments de l’outil, puis transmet. |
pending_approval | Met l’appel en attente d’un relecteur humain. |
cap_cost | Refuse dès que la dépense accumulée d’une exécution d’agent dépasse un plafond. |
deny renvoie une HTTP 400 firewall_blocked sur la surface
inbound, ou une erreur d’outil sur la surface mcp. Un appel mis en attente
renvoie une HTTP 400 firewall_approval_pending avec un id sur lequel
l’agent interroge. En mode shadow, chaque
verdict appliquant est rétrogradé en audit et la raison est préfixée
[shadow] would …. Voir Verdicts pour la
table complète et les formes de block.
4. stage — la surface d’application
Épingle la règle à l’une des surfaces du firewall. Laissez-le vide et la règle
s’applique à toutes les surfaces :
inbound — définitions d'outils annoncées
inbound — définitions d'outils annoncées
response — tool_calls émis par le modèle
response — tool_calls émis par le modèle
tool_calls que le modèle émet dans sa réponse.mcp — dispatch de tools/call
mcp — dispatch de tools/call
tools/call routé à travers la
passerelle MCP du Firewall.egress — destination sortante
egress — destination sortante
cap_cost est un plafond de coût
d’exécution pré-dispatch, inerte sur response et egress ;
pending_approval ne met jamais en attente qu’à inbound, donc un épinglage
explicite response/egress est refusé. L’éditeur masque ces combinaisons ;
l’API les rejette. Voir Surfaces.5. tool_name_glob — quel outil
Un petit glob sensible à la casse sur le nom de l’outil — shell.* pour toute
une famille, *.delete pour un verbe à travers les serveurs, http_fetch pour
un outil exact. Vide ou * correspond à chaque outil. Un glob de nom de
skill optionnel (même grammaire) ajoute en AND une seconde condition sur le
skill propriétaire, de sorte que vous pouvez faire confiance à un outil d’un
skill intégré et le restreindre depuis un skill communautaire.
La grammaire complète — préfixe, suffixe, infixe, exact, et les cas limites qui
piègent — a sa propre référence :
Syntaxe des motifs glob.
6. args_match_json — avec quels arguments
Le glob répond quel outil ; args_match_json répond avec quels arguments —
la différence entre « bloquer shell.exec » et « bloquer shell.exec
seulement quand la commande est rm -rf ». Sa valeur est une chaîne encodée
en JSON portant un ensemble de clauses JSONPath, toutes combinées en
AND. Décodé, l’objet de clause ressemble à :
"args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}".
Les opérateurs sont eq, contains, regex, in, cidr_match, gt et
lt. Un args_match_json absent est vacuement vrai — la règle correspond sur
le glob seul. Le langage de prédicat complet, la syntaxe des chemins et le
comportement fail-closed d’une clause cassée sont dans
Valider les arguments et le
livre de recettes d’arguments.
7. egress_json — quelles destinations
Utilisé sur la surface egress : une chaîne encodée en JSON contenant une
liste host / CIDR d’autorisation-et-refus, mise en correspondance avec une
destination sortante qu’un outil atteint. Décodé, l’objet ressemble à :
deny définit ce qui est bloqué et allow y découpe des exceptions.
169.254.169.254, les plages RFC-1918, loopback, link-local et
metadata.google.internal), de sorte que vous n’avez pas à les rédiger à la
main. Ajoutez vos propres destinations par-dessus pour tout autre élément que
vous voulez restreindre. Voir
Contrôle d’egress pour la recette
complète et Exfiltration de données
pour comprendre pourquoi cela compte.8. sanitize_json — redacter les arguments
Utilisé quand verdict = sanitize : une chaîne encodée en JSON nommant
quels presets / regex personnalisées redactent les sous-chaînes correspondantes
des arguments de l’outil avant que l’appel nettoyé ne soit transmis — utile
pour retirer un secret ou une valeur PII qu’un agent a déposé dans un argument
sans bloquer toute l’action. Décodé, l’objet ressemble à :
9. cap_cost_cents — un plafond de dépense
Utilisé quand verdict = cap_cost : un plafond de coût d’exécution par règle,
un entier en centimes USD. Quand la règle correspond, l’appel est refusé
dès que la dépense accumulée de l’exécution d’agent dépasse le plafond — un
disjoncteur pour une boucle emballée, se résolvant en allow ou deny dans
les événements. Le plafond doit être explicite et non négatif, et la règle ne
peut être épinglée à response ou egress (où le verdict est inerte).
Comportement complet dans Plafonner le coût.
10. Une règle complète
En assemblant les champs — refusershell.exec, mais seulement quand la
commande paraît destructrice, scopée aux appels d’outils émis par le modèle :
shell.exec, la
clause unique restreint à une commande destructrice, et le verdict refuse. Tout
shell.exec dont la commande ne correspond pas à la regex retombe sur la
règle suivante ou le défaut de la politique. Attachez une clé à la politique
(firewall_policy_id sur la clé) et elle est en vigueur au prochain appel —
aucun redéploiement.
11. Comment les champs se combinent
Quel est le minimum dont une règle valide a besoin ?
Quel est le minimum dont une règle valide a besoin ?
verdict. Tout le reste est optionnel : un stage vide correspond à
toutes les surfaces, un tool_name_glob vide (ou *) correspond à chaque
outil, et un args_match_json absent correspond à n’importe quels
arguments. Un simple { "verdict": "audit" } est un attrape-tout valide.Les matchers font-ils un AND ou un OR ?
Les matchers font-ils un AND ou un OR ?
Quels champs s'apparient avec quel verdict ?
Quels champs s'apparient avec quel verdict ?
sanitize_json n’est lu que pour le verdict sanitize ; cap_cost_cents
seulement pour cap_cost ; egress_json seulement sur la surface
egress. La console valide ces appariements à l’enregistrement, de sorte
qu’une règle qui affiche un comportement mais ne peut jamais l’appliquer ne
peut être persistée.Que se passe-t-il si deux règles correspondent toutes les deux ?
Que se passe-t-il si deux règles correspondent toutes les deux ?
priority la plus basse gagne (égalités départagées par l’id de règle)
— la première correspondance gagne, et l’évaluation s’arrête là. Voir
Priorité des règles.