Il livello dei permessi che manca alla maggior parte dei dispiegamenti RAG enterprise

Il tuo LLM privato non sta facendo trapelare. È il livello di retrieval.

Un analista junior pone una domanda di routine e un ACL obsoleto, catturato al momento dell'ingestione, consegna al modello un memo Board-Only. Il Sovereign RBAC Firewall autorizza ogni documento recuperato al momento della query, rispetto all'insieme live di gruppi nidificati e attributi dell'utente, e scarta i documenti trattenuti prima che il modello veda un token. Codice deterministico, esterno a qualsiasi LLM. Gli agenti consigliano, il codice decide.

40/40

Decisioni corrette sul set golden di autorizzazione

0 divulgazioni non autorizzate, 0 falsi dinieghi, calcolati dall'harness di valutazione

29/40

La baseline fedele ad ACL piatto sugli stessi 40 casi

10 divulgazioni non autorizzate, 1 falso diniego

$670K

Costo aggiuntivo di una violazione Shadow AI rispetto a un incidente tradizionale

IBM Cost of a Data Breach, 2025

Questa è una demo eseguibile, non un dispiegamento. Ogni identità e ogni documento è un fixture sintetico di una banca europea; l'identity provider è un fixture JSON modellato su Azure AD/SCIM, e il vector store gira in-process dietro un'interfaccia modellata su Qdrant.

Il pilot supera la demo. Poi fallisce la security review.

Comprare un LLM privato non lo rende sicuro da puntare sul corpus dei gioielli della corona.

La build standard del pilot etichetta ogni chunk di documento con un ACL piatto al momento dell'ingestione. Quel disegno crolla di fronte all'identità enterprise reale: gruppi Active Directory nidificati, ereditarietà cross-OU, livelli di clearance, concessioni di progetto a tempo, e cessazioni che avvengono dopo che l'indice è stato costruito. Il risultato è il fallimento classico che questa demo mette in scena da un capo all'altro: un'analista junior pone una domanda normale e la pipeline RAG consegna al modello un memo Board-Only, perché uno snapshot obsoleto al momento dell'ingestione diceva che poteva vederlo.

La causa radice è strutturale. Il permesso sul documento è una proprietà live di un grafo di identità, quindi qualsiasi snapshot di essa è già sbagliato. Un modello migliore non risolve questo: un modello perfetto a cui viene consegnato un documento del consiglio lo fa comunque trapelare. Il valore sta nel governare ciò che raggiunge il modello, non nella qualità del modello.

La posta in gioco è misurata. Le violazioni Shadow AI costano $670K in più rispetto agli incidenti tradizionali, e il 65% delle violazioni legate all'AI ha compromesso PII dei clienti (IBM Cost of a Data Breach, 2025). Le violazioni Shadow AI richiedono 247 giorni per essere rilevate rispetto a una media di 241 giorni, e 1 organizzazione su 5 ha subito una violazione legata allo Shadow AI (IBM, 2025). Sul versante regolatorio, gli obblighi di trasparenza dell'Articolo 50 dell'EU AI Act diventano applicabili il 2 agosto 2026, e il tetto combinato delle sanzioni GDPR più AI Act arriva a EUR 55M o all'11% del fatturato annuo globale.

La nostra stessa pagina della soluzione definisce l'enforcement dei permessi al momento del retrieval «il motivo per cui la maggior parte dei pilot RAG enterprise fallisce la security review» e «il problema irrisolto più difficile nel RAG enterprise». L'analisi di prodotto del whitepaper alle sue spalle ha segnalato il RAG RBAC-aware sul mercato come descritto ma non dimostrato, senza un'implementazione funzionante. Questa demo è quella implementazione funzionante.

Come funziona il Sovereign RBAC Firewall

Un motore di policy deterministico decide cosa vede il modello. Non il modello, e non un prompt.

Ogni query esegue la stessa pipeline:

query + identità utente → retrieval → firewall RBAC (deterministico, esterno a qualsiasi LLM) → solo documenti consentiti → LLM di risposta → record di audit concatenato con hash

1. Risoluzione live dei permessi

Per ogni documento candidato, il firewall risolve i permessi effettivi dell'utente al momento della query: appiattisce ricorsivamente i gruppi AD/OU nidificati (il fixture nidifica 3 livelli in profondità) e valuta gli attributi ABAC rispetto al riferimento di policy strutturato del documento: livello di clearance da L1 a L4, dispositivo gestito, dipartimento, concessioni di progetto a tempo con scadenza, e stato occupazionale.

2. Un verdetto deterministico

Ogni documento riceve ALLOW, WITHHELD con un reason code verificabile da macchina (BOARD_MEMBERSHIP_REQUIRED, ACCESS_WINDOW_EXPIRED, ALL_ACCESS_REVOKED_TERMINATION, POLICY_CONFLICT), oppure NEEDS_REVIEW. I documenti trattenuti vengono scartati prima della finestra di contesto, così il modello non vede mai documenti a cui l'utente non può accedere. Su qualsiasi conflitto o riferimento irrisolto, nega per default e instrada alla revisione umana invece di indovinare.

3. La ricevuta

Ogni query appende un record a una catena di hash SHA-256 append-only con verifica di manomissione: utente, insieme di permessi risolto, documenti recuperati, serviti e trattenuti con reason code, conflitti needs-review, modello e provider, e la coppia prompt/risposta. Esportabile come JSON, generato all'interno del VPC. Il record di evidenza dell'accesso in retrieval che un fascicolo dell'Articolo 50 dell'EU AI Act richiede.

La baseline che batte non è un avversario di comodo

Il lato di confronto della demo è un RAG fedele e naive ad ACL piatto, la build che la maggior parte dei pilot spedisce davvero. Risolve genuinamente i gruppi nidificati al momento dell'ingestione. I suoi fallimenti sono i suoi due limiti onesti e inerenti: lo snapshot diventa obsoleto, e un tag piatto non può esprimere clearance, dispositivo, finestra temporale o cessazione. Sul set golden di 40 casi della demo, quei due limiti producono 10 divulgazioni non autorizzate e 1 falso diniego, il falso diniego essendo un neoassunto post-ingestione la cui titolarità lo snapshot congelato ha mancato.

L'LLM è scenografia intercambiabile

Il percorso di risposta, costruito su Pydantic AI, riceve solo chunk consentiti post-firewall, dichiara cosa è stato trattenuto e perché invece di bluffare, e ha zero autorità sui permessi. È intercambiabile di provider con una sola variabile d'ambiente: Anthropic (modello predefinito claude-opus-4-8), OpenAI, Gemini, o Ollama per un dispiegamento sovrano air-gapped, dove nulla, neanche un token, lascia il box. Nessuna chiave API è mai richiesta: la demo instrada le risposte a un bridge locale quando uno è in esecuzione e altrimenti ricade su uno stub deterministico, e lo scoreboard di valutazione non chiama mai un LLM. Il firewall è il prodotto; il modello è scenografia.

Lo scoreboard è indipendente

Le etichette golden per il set di 40 casi sono derivate meccanicamente da un oracolo di riferimento indipendente, un'implementazione separata scritta dalle definizioni di policy e non dal firewall sotto test. Lo scoreboard è una funzione del grafo di identità, non risultati scelti a mano, e ogni cifra è calcolata a runtime, mai hard-coded. L'overhead di enforcement si misura in microsecondi, in-process, per la sola logica del firewall; un round-trip IdP di produzione aggiunge latenza che questa demo sostituisce con uno stub.

Un solo chokepoint, pronto per gli agenti

Gartner proietta che il 40% delle applicazioni enterprise incorporerà agenti AI entro fine 2026, rispetto a meno del 5% nel 2025. Lo stesso cancello deterministico authorize(user, doc) è il percorso di estensibilità documentato per quel mondo, non una feature spedita di questa demo: un agente non può recuperare ciò che l'utente per conto del quale opera non potrebbe.

La fuga da EUR 412 million, lavorata da un capo all'altro

Una domanda, posta da un'analista sintetica, risposta su entrambi i lati dello split screen. Ogni immagine sotto è uno screenshot dell'app in esecuzione; ogni identità, documento e cifra è dato di fixture sintetico.

La domanda che fa trapelare

Lena Vogt, analista EMEA Credit Risk con clearance L2, chiede: «Qual è la nostra proiezione di credit-loss EMEA del Q3 e la metodologia dietro di essa?» Il retrieval fa emergere il board pack Q3 Board-Only insieme a documenti che lei può vedere. Il lato ACL piatto lo serve: anni di debito di ereditarietà di gruppi nidificati nel grafo di identità l'hanno resa transitivamente membro del «Board», e un tag solo-gruppo non ha alcun concetto di clearance. Il memo raggiunge il modello, la risposta legge EUR 412 million, e il banner dice LEAK.

Lo split-screen della fuga: il lato Naive Flat-ACL legge la proiezione Board-Only da EUR 412 million all'analista L2 Lena Vogt con un banner rosso LEAK e un avviso che è stato servito 1 documento non autorizzato, mentre il lato RAGGUARD mostra 5 recuperati, 2 concessi, 3 negati.
Il momento della fuga: un memo Board-Only letto a un'analista L2. La cifra è sintetica; la modalità di fallimento no.

La stessa query, dietro il firewall

Sul lato RAGGUARD, lo stesso retrieval viene eseguito, ma il board pack è trattenuto prima dell'LLM con il reason code BOARD_MEMBERSHIP_REQUIRED: il documento richiede clearance L4 e Lena detiene L2. Il modello risponde correttamente dalla nota metodologica Internal e dal memo Confidential a cui la sua catena di gruppi nidificati le dà diritto, e dichiara cosa è stato trattenuto e perché invece di bluffare.

Il lato RAGGUARD della demo dopo la query di Lena: 5 recuperati, 2 concessi, 3 negati, con una nota di trattenimento che elenca i documenti negati e i loro reason code, incluso BOARD_MEMBERSHIP_REQUIRED sul board pack.
Stessa domanda, stesso retrieval: 5 recuperati, 2 concessi, 3 negati, ogni diniego con un reason code.

Cosa ha visto davvero il modello

Il modal dei dettagli di decisione mostra l'input verbatim del modello su entrambi i lati. A sinistra, il board pack trapelato sta dentro il prompt, contrassegnato in rosso. A destra, è semplicemente assente: il modello non vede mai documenti a cui l'utente non può accedere. La vista per documento rende esplicita la divergenza, la stessa riga del board pack che recita «Served without authorization» da un lato e «Access denied at retrieval» con il suo reason code dall'altro.

L'input verbatim del modello su entrambi i lati: il documento Board-Only contrassegnato in rosso dentro il prompt ACL piatto, e assente dal prompt RAGGUARD, etichettato come fondato solo su documenti consentiti.
Le finestre di contesto, verbatim: il documento trapelato presente a sinistra, assente a destra.
La vista di decisione per documento: la riga del board pack che recita Served without authorization sul lato ACL piatto e Access denied at retrieval con il reason code BOARD_MEMBERSHIP_REQUIRED sul lato RAGGUARD.
Lo stesso documento, due verdetti: servito senza autorizzazione versus negato al retrieval, con il reason code.

L'iniezione che non aveva nulla da rubare

La nota metodologica Internal porta una stringa di prompt-injection incorporata che istruisce qualsiasi assistente AI che la legga a ignorare i propri permessi di retrieval e a emettere la cifra Board completa. Sul lato firewall non ha nulla da esfiltrare: il board pack non è mai entrato nella finestra di contesto, perché l'autorizzazione è avvenuta prima dell'LLM. Questo è un caso etichettato, mostrato come difesa in profondità dall'enforcement al momento del retrieval, non un prodotto di guardrail separato.

La riga di prompt-injection incorporata dentro la nota metodologica Internal, evidenziata nella vista dei dettagli di decisione, che istruisce qualsiasi assistente AI a ignorare i permessi di retrieval e a emettere la cifra di credit-loss del Board.
L'iniezione, nel documento che il modello era autorizzato a leggere. Il documento che prende di mira non ha mai raggiunto il modello.

Il grafo di identità si muove. Lo snapshot no.

Priya Shah è stata cessata nove minuti fa sull'orologio della demo, e il webhook del fixture è scattato. Il firewall restituisce ALL_ACCESS_REVOKED_TERMINATION su tutto: 0 concessi, 5 negati. Lo snapshot ACL piatto, costruito prima della cessazione, la serve ancora, perché il re-index non è stato eseguito. La demo percorre lo stesso bordo per Marco Rossi, la cui concessione a tempo Project-Atlas è scaduta ieri sull'orologio della demo (ACCESS_WINDOW_EXPIRED), per Raj Patel, che siede in un gruppo che consente e in un gruppo che nega contemporaneamente (POLICY_CONFLICT, tenuto per revisione umana), e per Wei Chen, il membro del board L4 che il firewall serve correttamente, il controllo positivo che prova che non sta semplicemente negando tutto.

Il caso del dipendente cessato: Priya Shah con un badge TERMINATED nella striscia identità, il lato RAGGUARD che mostra 0 concessi e 5 negati con il reason code ALL_ACCESS_REVOKED_TERMINATION, mentre il lato ACL piatto serve ancora dal suo snapshot obsoleto.
Cessata nove minuti fa: il firewall revoca tutto; lo snapshot di ingestione non se n'è accorto.

La ricevuta, a schermo

Ognuna di queste decisioni atterra nella traccia di audit a prova di manomissione: un record JSON concatenato con hash di chi ha chiesto cosa, cosa è stato servito, cosa è stato trattenuto e perché, e quale modello ha risposto, con un chip di verifica CHAIN INTACT e un export con un clic. Generato automaticamente, all'interno del VPC.

La traccia di audit a prova di manomissione: un chip CHAIN INTACT, il record JSON concatenato con hash dei documenti serviti e trattenuti con reason code, e il pulsante Export Audit Record.
Il record di audit concatenato con hash: l'artefatto che un fascicolo dell'Articolo 50 richiede, non una certificazione.

Lo scoreboard, con il suo perimetro esatto

Il set golden è 40 decisioni allow/deny etichettate (utente, documento): 10 utenti contro 4 documenti sensibili, etichette derivate meccanicamente dall'oracolo indipendente dalla semantica del grafo di identità. Il firewall ottiene 40/40 con 0 divulgazioni non autorizzate e 0 falsi dinieghi. La baseline ACL piatto ottiene 29/40 con 10 divulgazioni non autorizzate, incluso il board pack servito a 7 utenti non autorizzati, la finestra Atlas scaduta e il dipendente cessato, più 1 falso diniego. Ogni cifra è calcolata dall'harness a runtime, mai hard-coded, e il drill-down per caso mostra ciascuna etichetta dell'oracolo accanto alle decisioni di entrambi i sistemi. Questi sono risultati del set golden, non garanzie a mondo aperto.

Lo scoreboard del benchmark a 40 casi: Naive Flat-ACL RAG a 29/40 con 10 divulgazioni non autorizzate e 1 falso diniego, RAGGUARD a 40/40 con 0 divulgazioni non autorizzate e 0 falsi dinieghi.
Lo scoreboard, calcolato dal vivo dall'harness di valutazione rispetto alle etichette dell'oracolo.
Un drill-down di benchmark per caso: l'oracolo etichetta il caso deny, la baseline ACL piatto ha servito il documento, e RAGGUARD lo ha trattenuto, con i chip di policy che spiegano la decisione.
Drill-down per caso: etichetta dell'oracolo, decisione ACL piatto, decisione del firewall, e la policy che l'ha decisa.

Naive Flat-ACL RAG versus il Sovereign RBAC Firewall

Lo stesso confronto che la demo esegue dal vivo, sullo stesso grafo di identità e sugli stessi documenti.

Dimensione Naive Flat-ACL RAG (la build tipica del pilot) Sovereign RBAC Firewall (RAGGUARD)
Quando avviene l'autorizzazione All'ingestione, congelata in un tag su ciascun chunk Al momento del retrieval, per query, per documento
Gruppi nidificati ed ereditarietà cross-OU Risolti una volta all'ingestione; lo snapshot diventa obsoleto Appiattiti ricorsivamente rispetto al grafo di identità live a ogni query
ABAC: clearance, dispositivo, concessioni a tempo, stato occupazionale Inesprimibile in un tag piatto Valutato per documento rispetto al riferimento di policy strutturato
Cessazione nove minuti fa Ancora servito finché non gira il re-index ALL_ACCESS_REVOKED_TERMINATION su tutto
Policy in conflitto su un documento Serve il documento Deny-by-default: NEEDS_REVIEW, instradato a un umano con il conflitto esplicitato
Set golden a 40 casi 29/40: 10 divulgazioni non autorizzate, 1 falso diniego 40/40: 0 divulgazioni non autorizzate, 0 falsi dinieghi
Traccia di audit Nessuna Record concatenato con hash, a prova di manomissione, di ogni servizio e ogni trattenimento, esportabile come JSON

Cosa questa demo non fa

  • ✓ Non si collega a un Active Directory, Okta, SharePoint o Confluence live. L'identity provider è un fixture JSON sintetico modellato su Azure AD/SCIM, cessazioni e scadenze sono eventi di fixture, e il vector store è in-process dietro un'interfaccia modellata su Qdrant. Il connettore IdP live è lo swap di produzione documentato, non ciò che gira oggi.
  • ✓ Non coinvolge alcuna banca reale, clienti o conti live. Lena Vogt, Marco Rossi, Priya Shah, Raj Patel, Wei Chen, ogni documento e la cifra di EUR 412 million sono sintetici.
  • ✓ Non rivendica garanzie a mondo aperto. 40/40 con 0 divulgazioni non autorizzate è il risultato calcolato su un set golden etichettato fisso di 40 casi, non una promessa che nulla trapeli mai in produzione.
  • ✓ Non misura la latenza di produzione. L'overhead di enforcement su scala di microsecondi è solo logica del firewall, in-process; un round-trip IdP live, che questa demo sostituisce con uno stub, aggiunge di più.
  • ✓ Non spedisce una suite di guardrail, DLP, o una piattaforma multi-agente. È una sola capacità fatta in modo convincente: il firewall dei permessi al momento del retrieval, con il caso di iniezione come un esempio etichettato di difesa in profondità. Il percorso di risposta è Pydantic AI, e il cancello deterministico deliberatamente non agentico è il disegno; la governance agentica è il percorso di estensibilità documentato.
  • ✓ Non certifica la conformità. L'export di audit è il record di evidenza che un fascicolo dell'Articolo 50 dell'EU AI Act richiede, non una certificazione, e per questa demo non esistono clienti, dispiegamenti o case study.

Domande che i buyer fanno davvero

Come impediamo al nostro chatbot AI interno di mostrare ai dipendenti documenti che non dovrebbero vedere?

Applica l'autorizzazione al momento del retrieval, non al momento dell'ingestione. Un motore di policy deterministico esterno all'LLM controlla ogni documento recuperato rispetto alle membership di gruppo live e agli attributi dell'utente prima che raggiunga il modello, così i documenti trattenuti non entrano mai nella finestra di contesto. In questa demo quel cancello ottiene 40/40 su un set golden etichettato di 40 casi, contro 29/40 per la build ACL piatto che la maggior parte dei pilot spedisce.

Tagghiamo già i documenti con i permessi quando li indicizziamo. Perché non basta?

Perché il tag è uno snapshot e il permesso è una proprietà live del tuo grafo di identità. Un ACL al momento dell'ingestione manca tutto ciò che cambia dopo l'indicizzazione, come una cessazione o una concessione di progetto scaduta, e non può esprimere affatto regole di attributo come il livello di clearance o il dispositivo gestito. Nella demo quei due limiti spiegano 10 divulgazioni non autorizzate e 1 falso diniego su un benchmark di 40 casi, da una baseline che risolve fedelmente i gruppi nidificati all'ingestione.

Una prompt injection può ingannare il modello e fargli trapelare un documento riservato?

Non se il documento non raggiunge mai il modello. La demo include un caso etichettato in cui una nota incorporata in un documento istruisce qualsiasi assistente AI a ignorare i propri permessi di retrieval e a emettere la cifra Board-Only, e l'iniezione non ha nulla da esfiltrare perché l'autorizzazione è avvenuta prima dell'LLM e il memo non è mai entrato nella finestra di contesto. Quello è un esempio di difesa in profondità dell'enforcement al momento del retrieval, non un prodotto di guardrail autonomo.

Cosa succede quando le policy di accesso sono in conflitto o il sistema non è sicuro?

Nega per default. Quando un utente detiene sia una membership che consente sia una che nega sullo stesso documento, o un riferimento di policy non può essere risolto, il firewall restituisce NEEDS_REVIEW e instrada il caso a un umano con il conflitto esplicitato, invece di indovinare. La demo mostra esattamente questo: un credit risk manager che è in un gruppo consentito e in un gruppo negato contemporaneamente ha il memo contestato tenuto per revisione, non servito.

Qualche dato lascia il nostro VPC? Può girare completamente air-gapped?

Il firewall è Python deterministico che non ha bisogno di alcun modello, e il percorso di risposta è intercambiabile con una sola variabile d'ambiente: Anthropic, OpenAI, Gemini o Ollama. Imposta LLM_PROVIDER=ollama per un dispiegamento sovrano air-gapped e nulla, neanche un token, lascia il box. La demo stessa gira offline senza chiave API, e lo scoreboard di valutazione non chiama mai un LLM.

Cosa mostriamo a un auditor su chi ha avuto accesso a cosa attraverso il sistema AI?

Ogni query appende un record a una catena di hash SHA-256 a prova di manomissione: chi ha chiesto, l'insieme di permessi risolto, cosa è stato servito, cosa è stato trattenuto e perché, e quale modello ha risposto. Si esporta come JSON ed è generato all'interno del tuo VPC. È il record di evidenza dell'accesso in retrieval che un fascicolo dell'Articolo 50 dell'EU AI Act richiede, non una certificazione di conformità.

Questa è un'integrazione Active Directory live o una demo?

Una demo eseguibile che prova il meccanismo. L'identity provider è un fixture JSON sintetico modellato su Azure AD/SCIM, cessazioni e scadenze delle concessioni sono eventi di fixture, e il vector store gira in-process dietro un'interfaccia modellata su Qdrant. Il motore di policy, l'harness di valutazione e l'export di audit concatenato con hash sono reali e girano esattamente come mostrato; poiché il fixture rispecchia le interfacce Azure AD Graph e SCIM, il percorso di produzione documentato verso un IdP live è uno swap di config, non una riscrittura.

Ricerca tecnica

La ricerca dietro questa demo — l'architettura, il disegno di verifica e il blueprint enterprise.

Valuti il dispiegamento di LLM privati in un'impresa regolamentata?

Il livello dei permessi è la parte difficile. Lo costruiamo noi.

Se il tuo team sta lottando con come puntare un modello privato su un corpus governato da anni di ereditarietà di gruppi nidificati, o con cosa gli obblighi di trasparenza dell'EU AI Act significano per i tuoi log di retrieval, ci farebbe davvero piacere sentire come ci stai pensando. Il problema è di tutta l'industria e lo saranno anche le risposte.

Assessment del livello dei permessi

  • ✓ Mappa dove la tua pipeline RAG autorizza oggi: al momento dell'ingestione o al momento del retrieval
  • ✓ Modella la tua ereditarietà di gruppi nidificati e cross-OU come un grafo di policy live
  • ✓ Definisci le regole ABAC che un tag piatto non può esprimere: clearance, dispositivo, concessioni a tempo
  • ✓ Specifica il record di accesso in retrieval che il tuo fascicolo dell'Articolo 50 richiede

Costruire il firewall al momento del retrieval

  • ✓ Un cancello deterministico authorize(user, doc) esterno a qualsiasi LLM
  • ✓ Risoluzione IdP live dietro interfacce modellate su Azure AD Graph e SCIM
  • ✓ Instradamento deny-by-default dei conflitti alla revisione umana
  • ✓ Una traccia di audit concatenata con hash, esportabile, generata nel tuo VPC
Social

Pubblicato anche su