La capa de permisos que falta en la mayoría de los despliegues RAG empresariales

Su LLM privado no está filtrando. Lo está haciendo su capa de recuperación.

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.

El piloto supera la demostración. Luego falla la revisión de seguridad.

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.

Cómo funciona el Sovereign RBAC Firewall

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

1. Resolución de permisos en vivo

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.

2. Un veredicto determinista

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.

3. El recibo

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.

La línea base a la que supera no es un hombre de paja

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ó.

El LLM es un decorado intercambiable

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.

El marcador es independiente

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.

Un solo punto de estrangulamiento, listo para agentes

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.

La filtración de EUR 412 millones, trabajada de extremo a extremo

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.

La pregunta que filtra

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.

La filtración en pantalla partida: el lado Naive Flat-ACL lee la proyección Solo Consejo de EUR 412 millones a la analista L2 Lena Vogt con un banner rojo LEAK y una advertencia de que se sirvió 1 documento no autorizado, mientras que el lado RAGGUARD muestra 5 recuperados, 2 concedidos, 3 denegados.
El momento de la filtración: un memorando Solo Consejo leído a una analista L2. La cifra es sintética; el modo de fallo no lo es.

La misma consulta, detrás del cortafuegos

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 lado RAGGUARD de la demostración tras la consulta de Lena: 5 recuperados, 2 concedidos, 3 denegados, con una nota de retención que lista los documentos denegados y sus códigos de razón, incluido BOARD_MEMBERSHIP_REQUIRED en el paquete del consejo.
Misma pregunta, misma recuperación: 5 recuperados, 2 concedidos, 3 denegados, cada denegación con un código de razón.

Lo que el modelo vio realmente

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 entrada verbatim del modelo en ambos lados: el documento Solo Consejo marcado en rojo dentro del prompt de ACL plana, y ausente del prompt de RAGGUARD, etiquetado como fundamentado solo en documentos permitidos.
Las ventanas de contexto, verbatim: el documento filtrado presente a la izquierda, ausente a la derecha.
La vista de decisión por documento: la fila del paquete del consejo lee Servido sin autorización en el lado de ACL plana y Acceso denegado en la recuperación con el código de razón BOARD_MEMBERSHIP_REQUIRED en el lado RAGGUARD.
El mismo documento, dos veredictos: servido sin autorización frente a denegado en la recuperación, con el código de razón.

La inyección que no tenía nada que robar

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.

La línea de inyección de prompts incrustada dentro de la nota de metodología Internal, resaltada en la vista de detalle de decisión, que instruye a cualquier asistente de IA a ignorar los permisos de recuperación y a devolver la cifra de pérdida crediticia del Consejo.
La inyección, en el documento que el modelo tenía permitido leer. El documento al que apunta nunca llegó al modelo.

El grafo de identidad se mueve. La instantánea, no.

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.

El caso de la empleada dada de baja: Priya Shah con una insignia TERMINATED en la franja de identidad, el lado RAGGUARD mostrando 0 concedidos y 5 denegados con el código de razón ALL_ACCESS_REVOKED_TERMINATION, mientras que el lado de ACL plana sigue sirviendo desde su instantánea obsoleta.
Dada de baja hace nueve minutos: el cortafuegos revoca todo; la instantánea de ingesta no se ha enterado.

El recibo, en pantalla

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 rastro de auditoría con evidencia de manipulación: un chip CHAIN INTACT, el registro JSON encadenado por hash de documentos servidos y retenidos con códigos de razón, y el botón Export Audit Record.
El registro de auditoría encadenado por hash: el artefacto que pide un expediente del Artículo 50, no una certificación.

El marcador, con su alcance exacto

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.

El marcador de referencia de 40 casos: Naive Flat-ACL RAG en 29/40 con 10 divulgaciones no autorizadas y 1 denegación falsa, RAGGUARD en 40/40 con 0 divulgaciones no autorizadas y 0 denegaciones falsas.
El marcador, calculado en vivo por el arnés de evaluación frente a las etiquetas del oráculo.
Un desglose de referencia por caso: el oráculo etiqueta el caso como deny, la línea base de ACL plana sirvió el documento, y RAGGUARD lo retuvo, con los chips de política que explican la decisión.
Desglose por caso: etiqueta del oráculo, decisión de ACL plana, decisión del cortafuegos y la política que lo decidió.

Naive Flat-ACL RAG frente al Sovereign RBAC Firewall

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

Lo que esta demostración no hace

  • ✓ No se conecta a un Active Directory, Okta, SharePoint o Confluence en vivo. El proveedor de identidad es un fixture JSON sintético con forma de Azure-AD/SCIM, las bajas y caducidades son eventos del fixture, y el almacén vectorial está en proceso detrás de una interfaz con forma de Qdrant. El conector IdP en vivo es el recambio de producción documentado, no lo que se ejecuta hoy.
  • ✓ No involucra ningún banco, clientes ni cuentas reales en vivo. Lena Vogt, Marco Rossi, Priya Shah, Raj Patel, Wei Chen, cada documento y la cifra de EUR 412 millones son sintéticos.
  • ✓ No reclama garantías de mundo abierto. 40/40 con 0 divulgaciones no autorizadas es el resultado calculado sobre un conjunto dorado etiquetado y fijo de 40 casos, no una promesa de que nunca se filtre nada en producción.
  • ✓ No mide la latencia de producción. La sobrecarga de aplicación a escala de microsegundos es solo la lógica del cortafuegos, en proceso; un viaje de ida y vuelta al IdP en vivo, que esta demostración simula con un stub, añade más.
  • ✓ No entrega una suite de guardarraíles, DLP ni una plataforma multiagente. Es una sola capacidad hecha de forma convincente: el cortafuegos de permisos en el momento de la recuperación, con el caso de inyección como un ejemplo etiquetado de defensa en profundidad. La ruta de respuesta es Pydantic AI, y la puerta determinista deliberadamente no agéntica es el diseño; la gobernanza agéntica es la vía de extensibilidad documentada.
  • ✓ No certifica el cumplimiento. La exportación de auditoría es el registro de evidencia que pide un expediente del Artículo 50 de la Ley de IA de la UE, no una certificación, y no existen clientes, despliegues ni casos de estudio para esta demostración.

Preguntas que los compradores realmente hacen

¿Cómo evitamos que nuestro chatbot interno de IA muestre a los empleados documentos que no deberían ver?

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.

Ya etiquetamos los documentos con permisos cuando los indexamos. ¿Por qué no basta eso?

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.

¿Puede una inyección de prompts engañar al modelo para que filtre un documento restringido?

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.

¿Qué ocurre cuando las políticas de acceso entran en conflicto o el sistema no tiene certeza?

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.

¿Sale algún dato de nuestra VPC? ¿Puede ejecutarse esto totalmente aislado de la red?

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.

¿Qué mostramos a un auditor sobre quién accedió a qué a través del sistema de IA?

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.

¿Es esto una integración en vivo con Active Directory o una demostración?

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.

Investigación técnica

La investigación detrás de esta demostración: la arquitectura, el diseño de verificación y el plano empresarial.

¿Evalúa el despliegue de un LLM privado en una empresa regulada?

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.

Evaluación de la capa de permisos

  • ✓ Mapear dónde autoriza hoy su pipeline RAG: momento de la ingesta o momento de la recuperación
  • ✓ Modelar su herencia de grupos anidados y entre OU como un grafo de políticas vivo
  • ✓ Definir las reglas ABAC que una etiqueta plana no puede expresar: habilitación, dispositivo, concesiones con vigencia limitada
  • ✓ Especificar el registro de acceso a la recuperación que pide su expediente del Artículo 50

Construir el cortafuegos en el momento de la recuperación

  • ✓ Una puerta determinista authorize(user, doc) fuera de cualquier LLM
  • ✓ Resolución IdP en vivo detrás de interfaces con forma de Azure AD Graph y SCIM
  • ✓ Enrutamiento de conflictos denegar-por-defecto a revisión humana
  • ✓ Un rastro de auditoría encadenado por hash, exportable, generado en su VPC
Redes sociales

También publicado en