1. Layer 1 — Chiave API con scope
La chiave è il primo gate. Prima che qualsiasi contenuto venga ispezionato o che qualsiasi modello venga chiamato, il gateway risolve la chiave chiamante e decide se la richiesta è anche solo consentita. Cosa porta la chiave:model_limits— il set di modelli che la chiave può chiamare. Una richiesta per un modello fuori dalla lista viene rifiutata immediatamente.allow_ips— allowlist di IP opzionale. Una richiesta da una sorgente non elencata viene rifiutata.credit_limit_usd— un tetto di spesa fisso. Una richiesta che spingerebbe la chiave oltre il tetto viene rifiutata.expiry— una data di scadenza fissa. Le chiavi scadute vengono rifiutate.environment— un tag (production,staging,dev, …) per organizzare e identificare la chiave per ambiente di deployment.guardrail_id— la policy del guardrail che si collega a questa chiave (vedi Layer 2 e Layer 4).firewall_policy_id— la policy del firewall che si collega a questa chiave (vedi Layer 3).is_firewall_gateway— segnala la chiave come token con scope di firewall-gateway; richiesto per le rotte evaluate e gateway MCP.
is_firewall_gateway e le letture in
chiaro della chiave richiedono Admin.
Per il modello completo della chiave vedi
Scope, chiavi, policy e workspace.
2. Layer 2 — Guardrails in input
Una volta validata la chiave, il gateway esegue le regole di stage input del guardrail collegato rispetto al testo della richiesta — prima di qualsiasi chiamata al modello upstream. Cosa vede: I messaggi del chiamante come inviati. (Un prompt iniettato da un registry di prompt viene aggiunto successivamente, nella fase di routing; le regole di input non lo vedono.) Tipi di regola disponibili:keyword, regex, pii, max_chars,
external, llm_judge, grounding.
Azioni che una regola può produrre:
| Azione | Cosa succede |
|---|---|
block | La richiesta viene rifiutata — HTTP 400 guardrail_blocked. Nessuna quota addebitata. Marcata skip-retry. |
mask | Il match viene redatto (es. jane@acme.com → [EMAIL]). Il testo sanitizzato continua verso il modello. |
flag | Il match viene registrato; il traffico è invariato. |
block in questo stage significa che il modello non viene mai chiamato.
Costo: zero. Il chiamante vede un errore strutturato che nomina il guardrail e
la regola che ha scattato.
Dove configurare: Console → Guardrails, oppure la guardrail API. Richiede
Developer+ per creare o modificare. Vedi
Guardrails per il riferimento completo delle regole.
3. Layer 3 — Il modello gira
Se la chiave è valida e i guardrails in input passano, il gateway inoltra la richiesta al modello upstream. Questo è l’unico layer senza applicazione configurabile — è semplicemente il modello che fa il suo lavoro. Il firewall opera sulle azioni che il modello produce (Layer 3 → Layer 4 sotto), non sul modello stesso. Il routing, i fallback e il load balancing avvengono qui in modo trasparente.4. Layer 4 — Agent Firewall (chiamate a tool ed egress)
Dopo che il modello risponde — o inline, man mano che le chiamate a tool vengono emesse — l’Agent Firewall giudica ogni azione che il modello richiede. Quattro superfici di applicazione:| Superficie | Cosa vede il firewall |
|---|---|
inbound | Le definizioni dei tool che l’agent pubblicizza al modello. Blocca un tool pericoloso prima che il modello possa sceglierlo. |
response | I tool_calls che il modello emette nella sua risposta. |
mcp | Un tools/call dispatchato attraverso il gateway MCP del Firewall o tramite l’hook di evaluate. |
egress | Una destinazione di rete in uscita (host / IP / CIDR) segnalata da un tool — la superficie di SSRF e esfiltrazione di dati. |
| Verdetto | Cosa fa |
|---|---|
allow | La chiamata procede. Loggata. |
audit | La chiamata procede; registrata per revisione. Il default_verdict predefinito. |
deny | La chiamata è bloccata — HTTP 400 firewall_blocked sulla superficie inbound; un errore di tool su mcp. |
sanitize | Le sottostringhe corrispondenti vengono redatte dagli argomenti del tool; la chiamata ripulita procede. Su inbound (nessun argomento ancora), escala a deny. |
pending_approval | La chiamata è trattenuta; un revisore fuori banda approva o rifiuta; l’agent ri-invia con un token di approvazione monouso. |
cap_cost | Nega una volta che la spesa accumulata dell’esecuzione dell’agent supera un tetto in centesimi per regola. |
deny sulla superficie inbound non costa token del modello — il block
scatta prima della chiamata upstream. Un hold pending_approval restituisce
HTTP 400 firewall_approval_pending con un id di approvazione su cui il client
fa polling.
Dove configurare: Console → Firewall, oppure la firewall API. Richiede
Developer+ per creare o modificare policy e regole. Vedi
Firewall e
Regole del firewall per il linguaggio completo
delle regole.
5. Layer 5 — Guardrails in output
Dopo che il modello risponde (e dopo che qualsiasi ciclo di chiamate a tool si completa), il gateway esegue le regole di stage output del guardrail collegato rispetto al testo della risposta prima che raggiunga il chiamante. Gli stessi tipi di regola e azioni si applicano come nel Layer 2. Unblock di
output restituisce HTTP 400 guardrail_blocked e rimborsa la quota
pre-consumata — il chiamante non paga nulla.
Streaming e masking dell’output. Un’azione
block viene applicata sia
alle risposte in streaming che a quelle non in streaming — su uno stream, lo
scanner taglia a metà volo ed emette un messaggio sostitutivo. Un’azione mask
sull’output si applica attualmente solo alle risposte non in streaming; su una
risposta in streaming il chunk originale passa senza essere mascherato. Verifica
la tua combinazione stage/stream nella sandbox del guardrail prima di farci
affidamento.6. Layer 6 — Audit
Ogni match, verdetto e decisione di approvazione viene scritto nella traccia di audit, correlato all’esecuzione dell’agent e alla sessione che lo ha causato. Non è un passaggio di applicazione separato — gira in parallelo con i Layer 2–5 — ma è il layer che rende gli altri responsabili. Cosa viene loggato:- Match dei guardrail: tipo di regola, azione, stage, stringa di dettaglio, e (se Log raw content è abilitato) la sottostringa corrispondente.
- Eventi del firewall: superficie, nome del tool, verdetto, regola corrispondente, codice di motivazione, fattori di rischio, e l’esecuzione/sessione a cui appartiene la chiamata.
- Decisioni di approvazione: chi ha approvato o rifiutato, quando, e se la regola sottostante è cambiata tra hold e decisione.
- Modifiche alle policy: ogni create, update, delete e modifica del livello di autonomia scrive una riga di audit versionata.
7. Tabella riassuntiva
| Layer | Cosa controlla | Cosa vede | Risultato su un hit | Dove configurare |
|---|---|---|---|---|
| 1. Chiave con scope | Identità, accesso al modello, spesa, IP, scadenza | Il token di autenticazione della richiesta | HTTP 4xx prima che giri qualcosa; nessuna misurazione | Console → API Keys (Developer+) |
| 2. Guardrails in input | Contenuto del testo della richiesta | I messaggi del chiamante | Block (HTTP 400 guardrail_blocked, nessun addebito), mask o flag | Console → Guardrails (Developer+) |
| 3. Modello | — | — | — | Config routing / canale |
| 4. Agent Firewall | Chiamate a tool, dispatch MCP, egress | Nome del tool, argomenti, destinazione | allow / audit / deny / sanitize / pending_approval / cap_cost | Console → Firewall (Developer+) |
| 5. Guardrails in output | Contenuto del testo della risposta | La risposta del modello | Block (HTTP 400, quota rimborsata), mask o flag | Console → Guardrails (Developer+) |
| 6. Audit | Attribuzione e traccia | Tutto quanto sopra | Voce di log immutabile | Console → Matches (Member) / Events & Runs (Developer+) |
8. Ordine di risoluzione delle policy
Per qualsiasi richiesta, il guardrail attivo e la policy del firewall vengono risolti indipendentemente:- Collegamento della chiave — se la chiave porta un
guardrail_idofirewall_policy_idesplicito, quella policy si collega (quando esiste ed è abilitata). - Default del workspace — se la chiave non ha collegamento, si applica il
guardrail o la policy
is_defaultabilitata del workspace. - Nessuno dei due — nessuna applicazione. La richiesta è byte-identica a un workspace che non ha mai abilitato la feature.
9. Fail-open e fail-closed
Due comportamenti — applicati a casi diversi.Fail-open (errori transitori): Se la risoluzione della policy incontra un
errore transitorio — un singhiozzo del database, un problema di rete verso un
vendor esterno — il gateway degrada a nessuna applicazione anziché interrompere
il traffico. La sicurezza degrada; la disponibilità è preservata. Configura
fail_open: false sulle regole external o llm_judge quando un controllo
mancato è inaccettabile per la tua policy.Fail-closed (casi ambigui): Dove non applicare vanificherebbe la regola,
il motore fa fail closed: un report egress con una destinazione non risolvibile
viene negato; un approval store irraggiungibile trattiene la chiamata invece di
lasciarla passare; una skill la cui ownership non può essere risolta viene
bloccata. La disponibilità è preservata sul percorso felice; la sicurezza non
viene saltata silenziosamente nei casi limite che contano.10. Approfondimenti
Guardrails
Riferimento completo delle regole — tipi, azioni, entità PII, LLM judge,
grounding e la sandbox di test.
Firewall
Modello di policy, verdetti, superfici, shadow mode, approvazione HITL e
rilevamento delle anomalie.
Regole del firewall
Il linguaggio di matching delle regole — glob dei tool, clausole sugli
argomenti, elenchi egress e sanitizer.
Guardrails vs. Firewall
Quale layer intercetta quale minaccia — e quando hai bisogno di entrambi.
Scope, chiavi e policy
Il modello completo della chiave: cosa porta una chiave e come si risolvono
le policy.
Modalità di applicazione
Fail-open vs. fail-closed — l’albero di decisione completo.
