La capa de permisos que falta en la mayoría de los despliegues RAG empresariales
Una analista junior hace una pregunta rutinaria, y una ACL obsoleta del momento de la ingesta entrega al modelo un memorando Solo Consejo. El Sovereign RBAC Firewall autoriza cada documento recuperado en el momento de la consulta, frente al conjunto vivo de grupos anidados y atributos de la usuaria, y descarta los documentos retenidos antes de que el modelo vea un token. Código determinista, fuera de cualquier LLM. Los agentes aconsejan, el código decide.
40/40
Decisiones correctas en el conjunto dorado de autorización
0 divulgaciones no autorizadas, 0 denegaciones falsas, calculadas por el arnés de evaluación
29/40
La línea base fiel de ACL plana sobre los mismos 40 casos
10 divulgaciones no autorizadas, 1 denegación falsa
$670K
Coste añadido de una brecha de Shadow AI frente a un incidente tradicional
IBM Cost of a Data Breach, 2025
Esta es una demostración ejecutable, no un despliegue. Cada identidad y cada documento es un fixture sintético de un banco europeo; el proveedor de identidad es un fixture JSON con forma de Azure-AD/SCIM, y el almacén vectorial se ejecuta en proceso detrás de una interfaz con forma de Qdrant.
Comprar un LLM privado no lo convierte en seguro para apuntarlo al corpus de las joyas de la corona.
El piloto estándar etiqueta cada fragmento de documento con una ACL plana en la ingesta. Ese diseño se viene abajo ante la identidad empresarial real: grupos anidados de Active Directory, herencia entre OU, niveles de habilitación, concesiones de proyecto con vigencia limitada, y bajas que ocurren después de construido el índice. El resultado es el fallo clásico que esta demostración representa de extremo a extremo: una analista junior hace una pregunta normal, y el pipeline RAG entrega al modelo un memorando Solo Consejo, porque una instantánea obsoleta del momento de la ingesta decía que ella podía verlo.
La causa raíz es estructural. El permiso de un documento es una propiedad viva de un grafo de identidad, así que cualquier instantánea de esa propiedad ya es incorrecta. Un modelo mejor no lo corrige: un modelo perfecto al que se le entrega un documento del consejo sigue filtrándolo. El valor está en gobernar lo que llega al modelo, no en la calidad del modelo.
Lo que está en juego está medido. Las brechas de Shadow AI cuestan $670K más que los incidentes tradicionales, y el 65% de las brechas relacionadas con IA comprometieron PII de clientes (IBM Cost of a Data Breach, 2025). Las brechas de Shadow AI tardan 247 días en detectarse frente a una media de 241 días, y 1 de cada 5 organizaciones ha sufrido una brecha vinculada a la Shadow AI (IBM, 2025). En el lado regulatorio, las obligaciones de transparencia del Artículo 50 de la Ley de IA de la UE son exigibles el 2 de agosto de 2026, y el techo combinado de sanciones del RGPD más la Ley de IA alcanza EUR 55M o el 11% de la facturación anual mundial.
Nuestra propia página de solución llama a la aplicación de permisos en el momento de la recuperación «la razón por la que la mayoría de los pilotos RAG empresariales fallan su revisión de seguridad» y «el problema no resuelto más difícil del RAG empresarial». El análisis de producto del whitepaper que hay detrás lo señaló: el RAG consciente de RBAC en el mercado está descrito pero no demostrado, sin una implementación que funcione. Esta demostración es esa implementación que funciona.
Un motor de políticas determinista decide lo que ve el modelo. No el modelo, y no un prompt.
Cada consulta ejecuta el mismo pipeline:
consulta + identidad del usuario → recuperación → cortafuegos RBAC (determinista, fuera de cualquier LLM) → solo documentos permitidos → LLM de respuesta → registro de auditoría encadenado por hash
Para cada documento candidato, el cortafuegos resuelve los permisos efectivos del usuario en el momento de la consulta: aplana de forma recursiva los grupos AD/OU anidados (el fixture anida 3 niveles de profundidad) y evalúa atributos ABAC frente a la referencia de política estructurada del documento: nivel de habilitación L1 a L4, dispositivo gestionado, departamento, concesiones de proyecto con vigencia limitada y caducidad, y estado laboral.
Cada documento recibe ALLOW, WITHHELD con un código de razón comprobable por máquina (BOARD_MEMBERSHIP_REQUIRED, ACCESS_WINDOW_EXPIRED, ALL_ACCESS_REVOKED_TERMINATION, POLICY_CONFLICT), o NEEDS_REVIEW. Los documentos retenidos se descartan antes de la ventana de contexto, de modo que el modelo nunca ve documentos a los que el usuario no puede acceder. Ante cualquier conflicto o referencia no resuelta, deniega por defecto y deriva a revisión humana en lugar de adivinar.
Cada consulta añade un registro a una cadena hash SHA-256 de solo añadido con verificación de manipulación: usuario, conjunto de permisos resuelto, documentos recuperados, servidos y retenidos con códigos de razón, conflictos de needs-review, modelo y proveedor, y el par prompt/respuesta. Exportable como JSON, generado dentro de la VPC. El registro de evidencia de acceso a la recuperación que pide un expediente del Artículo 50 de la Ley de IA de la UE.
El lado de comparación de la demostración es un RAG de ACL plana ingenua y fiel, la construcción que la mayoría de los pilotos realmente entregan. Resuelve de verdad los grupos anidados en el momento de la ingesta. Sus fallos son sus dos límites honestos e inherentes: la instantánea se queda obsoleta, y una etiqueta plana no puede expresar habilitación, dispositivo, ventana temporal ni baja. En el conjunto dorado de 40 casos de la demostración, esos dos límites producen 10 divulgaciones no autorizadas y 1 denegación falsa, siendo la denegación falsa la de una persona incorporada tras la ingesta cuya habilitación la instantánea congelada no captó.
La ruta de respuesta, construida sobre Pydantic AI, recibe solo los fragmentos permitidos posteriores al cortafuegos, declara qué se retuvo y por qué en lugar de farolear, y no tiene ninguna autoridad sobre los permisos. Es intercambiable de proveedor con una sola variable de entorno: Anthropic (modelo por defecto claude-opus-4-8), OpenAI, Gemini u Ollama para un despliegue soberano aislado de la red, donde nada, ni un solo token, sale de la caja. Nunca se exige una clave de API: la demostración enruta las respuestas a un puente local cuando hay uno en ejecución y, si no, cae a un stub determinista, y el marcador de evaluación no llama nunca a un LLM. El cortafuegos es el producto; el modelo es el decorado.
Las etiquetas doradas del conjunto de 40 casos las deriva mecánicamente un oráculo de referencia independiente, una implementación separada escrita a partir de las definiciones de política, no del cortafuegos bajo prueba. El marcador es una función del grafo de identidad, no de resultados elegidos a mano, y cada cifra se calcula en tiempo de ejecución, nunca está codificada de forma fija. La sobrecarga de aplicación se mide en microsegundos, en proceso, solo para la lógica del cortafuegos; un viaje de ida y vuelta al IdP de producción añade latencia que esta demostración simula con un stub.
Gartner proyecta que el 40% de las aplicaciones empresariales incrustarán agentes de IA a finales de 2026, frente a menos del 5% en 2025. La misma puerta determinista authorize(user, doc) es la vía de extensibilidad documentada para ese mundo, no una funcionalidad entregada de esta demostración: un agente no puede recuperar lo que su usuario en cuyo nombre actúa no podría.
Una pregunta, hecha por una analista sintética, respondida en ambos lados de la pantalla partida. Cada imagen de abajo es una captura de la aplicación en ejecución; cada identidad, documento y cifra es dato de fixture sintético.
Lena Vogt, analista de Riesgo Crediticio EMEA con habilitación L2, pregunta: «¿Cuál es nuestra proyección de pérdida crediticia EMEA del T3 y la metodología que hay detrás?» La recuperación saca el paquete del consejo Solo Consejo del T3 junto con documentos que ella sí puede ver. El lado de ACL plana lo sirve: años de deuda de herencia de grupos anidados en el grafo de identidad la han convertido de forma transitiva en miembro de «Board», y una etiqueta solo de grupo no tiene concepto de habilitación. El memorando llega al modelo, la respuesta lee EUR 412 millones, y el banner dice LEAK.
En el lado RAGGUARD, se ejecuta la misma recuperación, pero el paquete del consejo se retiene antes del LLM con el código de razón BOARD_MEMBERSHIP_REQUIRED: el documento exige habilitación L4 y Lena tiene L2. El modelo responde correctamente a partir de la nota de metodología Internal y el memorando Confidential a los que su cadena de grupos anidados sí le da derecho, y declara qué se retuvo y por qué en lugar de farolear.
El modal de detalle de decisión muestra la entrada verbatim del modelo en ambos lados. A la izquierda, el paquete del consejo filtrado está dentro del prompt, marcado en rojo. A la derecha, simplemente está ausente: el modelo nunca ve documentos a los que el usuario no puede acceder. La vista por documento hace explícita la divergencia: la misma fila del paquete del consejo lee «Servido sin autorización» en un lado y «Acceso denegado en la recuperación» con su código de razón en el otro.
La nota de metodología Internal lleva una cadena de inyección de prompts incrustada que instruye a cualquier asistente de IA que la lea a ignorar sus permisos de recuperación y a devolver la cifra completa del Consejo. En el lado del cortafuegos no hay nada que exfiltrar: el paquete del consejo nunca entró en la ventana de contexto, porque la autorización ocurrió antes del LLM. Este es un caso etiquetado, mostrado como defensa en profundidad desde la aplicación en el momento de la recuperación, no un producto de guardarraíles aparte.
Priya Shah fue dada de baja hace nueve minutos en el reloj de la demostración, y el webhook del fixture ya se ha disparado. El cortafuegos devuelve ALL_ACCESS_REVOKED_TERMINATION en todo: 0 concedidos, 5 denegados. La instantánea de ACL plana, construida antes de la baja, sigue sirviéndole, porque la reindexación no se ha ejecutado. La demostración recorre el mismo caso límite para Marco Rossi, cuya concesión con vigencia limitada de Project-Atlas caducó ayer en el reloj de la demostración (ACCESS_WINDOW_EXPIRED), para Raj Patel, que está a la vez en un grupo que permite y en uno que deniega (POLICY_CONFLICT, retenido para revisión humana), y para Wei Chen, el miembro del consejo L4 al que el cortafuegos sirve correctamente, el control positivo que demuestra que no se limita a denegar todo.
Cada una de estas decisiones aterriza en el rastro de auditoría con evidencia de manipulación: un registro JSON encadenado por hash de quién preguntó qué, qué se sirvió, qué se retuvo y por qué, y qué modelo respondió, con un chip de verificación CHAIN INTACT y una exportación con un clic. Generado automáticamente, dentro de la VPC.
El conjunto dorado son 40 decisiones allow/deny etiquetadas (usuario, documento): 10 usuarios frente a 4 documentos sensibles, etiquetas derivadas mecánicamente por el oráculo independiente a partir de la semántica del grafo de identidad. El cortafuegos puntúa 40/40 con 0 divulgaciones no autorizadas y 0 denegaciones falsas. La línea base de ACL plana puntúa 29/40 con 10 divulgaciones no autorizadas, incluido el paquete del consejo servido a 7 usuarios no autorizados, la ventana Atlas caducada y la empleada dada de baja, más 1 denegación falsa. Cada cifra la calcula el arnés en tiempo de ejecución, nunca está codificada de forma fija, y el desglose por caso muestra cada etiqueta del oráculo junto a las decisiones de ambos sistemas. Estos son resultados del conjunto dorado, no garantías de mundo abierto.
La misma comparación que la demostración ejecuta en vivo, sobre el mismo grafo de identidad y los mismos documentos.
| Dimensión | Naive Flat-ACL RAG (la construcción típica de un piloto) | Sovereign RBAC Firewall (RAGGUARD) |
|---|---|---|
| Cuándo ocurre la autorización | En la ingesta, congelada en una etiqueta de cada fragmento | En el momento de la recuperación, por consulta, por documento |
| Grupos anidados y herencia entre OU | Resueltos una vez en la ingesta; la instantánea se queda obsoleta | Aplanados de forma recursiva contra el grafo de identidad vivo en cada consulta |
| ABAC: habilitación, dispositivo, concesiones con vigencia limitada, estado laboral | Inexpresable en una etiqueta plana | Evaluado por documento frente a la referencia de política estructurada |
| Baja hace nueve minutos | Sigue sirviéndose hasta que se ejecuta la reindexación | ALL_ACCESS_REVOKED_TERMINATION en todo |
| Políticas en conflicto sobre un documento | Sirve el documento | Denegar por defecto: NEEDS_REVIEW, derivado a un humano con el conflicto explicitado |
| Conjunto dorado de 40 casos | 29/40: 10 divulgaciones no autorizadas, 1 denegación falsa | 40/40: 0 divulgaciones no autorizadas, 0 denegaciones falsas |
| Rastro de auditoría | Ninguno | Registro encadenado por hash, con evidencia de manipulación, de cada entrega y cada retención, exportable como JSON |
Aplique la autorización en el momento de la recuperación, no en el de la ingesta. Un motor de políticas determinista fuera del LLM comprueba cada documento recuperado frente a las pertenencias a grupos y atributos vivos del usuario antes de que llegue al modelo, de modo que los documentos retenidos nunca entran en la ventana de contexto. En esta demostración esa puerta puntúa 40/40 en un conjunto dorado etiquetado de 40 casos, frente a 29/40 de la construcción de ACL plana que la mayoría de los pilotos entregan.
Porque la etiqueta es una instantánea y el permiso es una propiedad viva de su grafo de identidad. Una ACL del momento de la ingesta omite todo lo que cambia después de indexar, como una baja o una concesión de proyecto caducada, y no puede expresar en absoluto reglas de atributos como el nivel de habilitación o el dispositivo gestionado. En la demostración esos dos límites explican 10 divulgaciones no autorizadas y 1 denegación falsa en un banco de pruebas de 40 casos, a partir de una línea base que resuelve fielmente los grupos anidados en la ingesta.
No si el documento nunca llega al modelo. La demostración incluye un caso etiquetado en el que una nota incrustada en un documento instruye a cualquier asistente de IA a ignorar sus permisos de recuperación y a devolver la cifra Solo Consejo, y la inyección no tiene nada que exfiltrar porque la autorización ocurrió antes del LLM y el memorando nunca entró en la ventana de contexto. Ese es un ejemplo de defensa en profundidad de la aplicación en el momento de la recuperación, no un producto de guardarraíles independiente.
Denegar por defecto. Cuando un usuario tiene a la vez una pertenencia que permite y una que deniega sobre el mismo documento, o no se puede resolver una referencia de política, el cortafuegos devuelve NEEDS_REVIEW y deriva el caso a un humano con el conflicto explicitado, en lugar de adivinar. La demostración muestra exactamente eso: un gestor de riesgo crediticio que está a la vez en un grupo permitido y en un grupo denegado tiene el memorando en disputa retenido para revisión, no servido.
El cortafuegos es Python determinista que no necesita ningún modelo, y la ruta de respuesta es intercambiable con una sola variable de entorno: Anthropic, OpenAI, Gemini u Ollama. Establezca LLM_PROVIDER=ollama para un despliegue soberano aislado de la red y nada, ni un solo token, sale de la caja. La propia demostración se ejecuta sin conexión y sin clave de API, y el marcador de evaluación no llama nunca a un LLM.
Cada consulta añade un registro a una cadena hash SHA-256 con evidencia de manipulación: quién preguntó, el conjunto de permisos resuelto, qué se sirvió, qué se retuvo y por qué, y qué modelo respondió. Se exporta como JSON y se genera dentro de su VPC. Es el registro de evidencia de acceso a la recuperación que pide un expediente del Artículo 50 de la Ley de IA de la UE, no una certificación de cumplimiento.
Una demostración ejecutable que prueba el mecanismo. El proveedor de identidad es un fixture JSON sintético con forma de Azure-AD/SCIM, las bajas y las caducidades de concesiones son eventos del fixture, y el almacén vectorial se ejecuta en proceso detrás de una interfaz con forma de Qdrant. El motor de políticas, el arnés de evaluación y la exportación de auditoría encadenada por hash son reales y se ejecutan exactamente como se muestra; como el fixture refleja las interfaces de Azure AD Graph y SCIM, la vía de producción documentada hacia un IdP en vivo es un cambio de configuración, no una reescritura.
La investigación detrás de esta demostración: la arquitectura, el diseño de verificación y el plano empresarial.
Solución completa
Explora la solución de IA soberana y despliegue de LLM privados →La capa de permisos es la parte difícil. Nosotros la construimos.
Si su equipo está lidiando con cómo apuntar un modelo privado a un corpus gobernado por años de herencia de grupos anidados, o con lo que las obligaciones de transparencia de la Ley de IA de la UE significan para sus registros de recuperación, nos gustaría de verdad oír cómo lo están pensando. El problema es de toda la industria y las respuestas también lo serán.