A camada de permissão que a maioria das implantações de RAG empresarial não tem
Uma analista júnior faz uma pergunta de rotina, e uma ACL obsoleta do momento da ingestão entrega ao modelo um memorando Board-Only. O Firewall RBAC Soberano autoriza cada documento recuperado no momento da consulta, contra o conjunto ao vivo de grupos aninhados e atributos do usuário, e descarta os documentos retidos antes que o modelo veja um token. Código determinístico, fora de qualquer LLM. Agentes aconselham, o código decide.
40/40
Decisões corretas no conjunto dourado de autorização
0 divulgações não autorizadas, 0 negativas falsas, calculadas pelo harness de avaliação
29/40
O baseline fiel de ACL plana nos mesmos 40 casos
10 divulgações não autorizadas, 1 negativa falsa
$670K
Custo adicional de uma violação de shadow AI em relação a um incidente tradicional
IBM Cost of a Data Breach, 2025
Esta é uma demonstração executável, não uma implantação. Toda identidade e todo documento são um fixture sintético de banco europeu; o provedor de identidade é um fixture JSON no formato Azure-AD/SCIM, e o vector store roda in-process atrás de uma interface no formato Qdrant.
Comprar um LLM privado não o torna seguro para apontar ao corpus das joias da coroa.
A construção padrão de piloto marca cada chunk de documento com uma ACL plana na ingestão. Esse desenho desaba sob a identidade empresarial real: grupos aninhados do Active Directory, herança cruzada de OU, níveis de clearance, concessões de projeto com prazo, e desligamentos que acontecem depois que o índice foi construído. O resultado é a falha clássica que esta demonstração encena de ponta a ponta: uma analista júnior faz uma pergunta normal, e o pipeline de RAG entrega ao modelo um memorando Board-Only, porque um snapshot obsoleto do momento da ingestão disse que ela podia vê-lo.
A causa raiz é estrutural. A permissão de documento é uma propriedade viva de um grafo de identidade, então qualquer snapshot dela já está errado. Um modelo melhor não corrige isso: um modelo perfeito a quem se entrega um documento do conselho ainda o vaza. O valor está em governar o que chega ao modelo, não na qualidade do modelo.
O que está em jogo é mensurado. Violações de shadow AI custam $670K a mais do que incidentes tradicionais, e 65% das violações relacionadas a IA comprometeram PII de clientes (IBM Cost of a Data Breach, 2025). Violações de shadow AI levam 247 dias para serem detectadas contra uma média de 241 dias, e 1 em cada 5 organizações sofreu uma violação ligada a shadow AI (IBM, 2025). No lado regulatório, as obrigações de transparência do Artigo 50 da Lei de IA da UE tornam-se exigíveis em 2 de agosto de 2026, e o teto combinado de penalidades do GDPR mais a Lei de IA chega a EUR 55M ou 11% do faturamento anual global.
Nossa própria página de solução chama a aplicação de permissões no momento da recuperação de "o motivo pelo qual a maioria dos pilotos de RAG empresarial falha na revisão de segurança" e "o problema não resolvido mais difícil no RAG empresarial." A análise de produto do whitepaper por trás disso sinalizou o RAG com consciência de RBAC no mercado como descrito mas não demonstrado, sem implementação funcional. Esta demonstração é essa implementação funcional.
Um motor de políticas determinístico decide o que o modelo vê. Não o modelo, e não um prompt.
Toda consulta executa o mesmo pipeline:
consulta + identidade do usuário → recuperação → firewall RBAC (determinístico, fora de qualquer LLM) → apenas documentos permitidos → LLM de resposta → registro de auditoria encadeado por hash
Para cada documento candidato, o firewall resolve as permissões efetivas do usuário no momento da consulta: achata recursivamente grupos aninhados AD/OU (o fixture aninha 3 níveis de profundidade) e avalia atributos ABAC contra a referência de política estruturada do documento: nível de clearance L1 a L4, dispositivo gerenciado, departamento, concessões de projeto com prazo e expiração, e status de emprego.
Cada documento recebe ALLOW, WITHHELD com um código de motivo verificável por máquina (BOARD_MEMBERSHIP_REQUIRED, ACCESS_WINDOW_EXPIRED, ALL_ACCESS_REVOKED_TERMINATION, POLICY_CONFLICT), ou NEEDS_REVIEW. Documentos retidos são descartados antes da janela de contexto, então o modelo nunca vê documentos aos quais o usuário não tem acesso. Em qualquer conflito ou referência não resolvida, ele nega por padrão e encaminha para revisão humana em vez de adivinhar.
Toda consulta acrescenta um registro a uma cadeia de hash SHA-256 append-only com verificação de adulteração: usuário, conjunto de permissões resolvido, documentos recuperados, servidos e retidos com códigos de motivo, conflitos de NEEDS_REVIEW, modelo e provedor, e o par prompt/resposta. Exportável como JSON, gerado dentro da VPC. O registro de evidência de acesso à recuperação que um dossiê do Artigo 50 da Lei de IA da UE pede.
O lado de comparação da demonstração é um RAG ingênuo de ACL plana fiel, a construção que a maioria dos pilotos realmente entrega. Ele de fato resolve grupos aninhados no momento da ingestão. Suas falhas são seus dois limites honestos e inerentes: o snapshot envelhece, e uma tag plana não consegue expressar clearance, dispositivo, janela de tempo ou desligamento. No conjunto dourado de 40 casos da demonstração, esses dois limites produzem 10 divulgações não autorizadas e 1 negativa falsa, sendo a negativa falsa um admitido pós-ingestão cujo direito o snapshot congelado não viu.
O caminho de resposta, construído sobre Pydantic AI, recebe apenas chunks permitidos pós-firewall, declara o que foi retido e por quê em vez de blefar, e tem zero autoridade sobre permissões. É intercambiável de provedor por uma variável de ambiente: Anthropic (modelo padrão claude-opus-4-8), OpenAI, Gemini, ou Ollama para implantação soberana air-gapped, em que nada, nem um token, sai da caixa. Nenhuma chave de API é jamais exigida: a demonstração roteia respostas para uma ponte local quando uma está em execução e recai para um stub determinístico caso contrário, e o placar de avaliação nunca chama um LLM. O firewall é o produto; o modelo é cenário.
Os rótulos dourados do conjunto de 40 casos são derivados mecanicamente por um oráculo de referência independente, uma implementação separada escrita a partir das definições de política e não do firewall sob teste. O placar é uma função do grafo de identidade, não de resultados escolhidos a dedo, e cada número é calculado em tempo de execução, nunca fixado no código. A sobrecarga de enforcement mede-se em microssegundos, in-process, só para a lógica do firewall; um round-trip de IdP de produção adiciona latência que esta demonstração simula com stub.
A Gartner projeta que 40% das aplicações empresariais incorporarão agentes de IA até o fim de 2026, saindo de menos de 5% em 2025. O mesmo portão determinístico authorize(user, doc) é o caminho de extensibilidade documentado para esse mundo, não um recurso entregue desta demonstração: um agente não pode recuperar o que o usuário em cujo nome atua não poderia.
Uma pergunta, feita por uma analista sintética, respondida dos dois lados da tela dividida. Cada imagem abaixo é um screenshot do aplicativo em execução; cada identidade, documento e número é dado de fixture sintético.
Lena Vogt, uma analista de risco de crédito EMEA com clearance L2, pergunta: "Qual é a nossa projeção de perda de crédito EMEA no T3 e a metodologia por trás dela?" A recuperação traz à superfície o board pack Board-Only do T3 junto com documentos que ela pode ver. O lado de ACL plana o serve: anos de dívida de herança de grupos aninhados no grafo de identidade a tornaram transitivamente membro de "Board", e uma tag só de grupo não tem conceito de clearance. O memorando chega ao modelo, a resposta lê em voz alta EUR 412 milhões, e o banner diz LEAK.
No lado RAGGUARD, a mesma recuperação é executada, mas o board pack é retido antes do LLM com o código de motivo BOARD_MEMBERSHIP_REQUIRED: o documento exige clearance L4 e Lena tem L2. O modelo responde corretamente a partir da nota de metodologia Internal e do memorando Confidential aos quais a cadeia de grupos aninhados dela de fato lhe dá direito, e declara o que foi retido e por quê em vez de blefar.
O modal de detalhe da decisão mostra a entrada verbatim do modelo dos dois lados. À esquerda, o board pack vazado fica dentro do prompt, sinalizado em vermelho. À direita, ele simplesmente está ausente: o modelo nunca vê documentos aos quais o usuário não tem acesso. A visão por documento torna a divergência explícita, a mesma linha do board pack lendo "Served without authorization" de um lado e "Access denied at retrieval" com seu código de motivo do outro.
A nota de metodologia Internal carrega uma string de prompt-injection embutida instruindo qualquer assistente de IA que a leia a ignorar suas permissões de recuperação e emitir a cifra completa do Board. No lado do firewall ela não tem nada a exfiltrar: o board pack nunca entrou na janela de contexto, porque a autorização aconteceu antes do LLM. Este é um caso rotulado, mostrado como defesa em profundidade da aplicação no momento da recuperação, não um produto separado de guardrails.
Priya Shah foi desligada há nove minutos no relógio da demonstração, e o webhook do fixture disparou. O firewall retorna ALL_ACCESS_REVOKED_TERMINATION em tudo: 0 concedidos, 5 negados. O snapshot de ACL plana, construído antes do desligamento, ainda a atende, porque a reindexação não rodou. A demonstração percorre a mesma aresta para Marco Rossi, cuja concessão com prazo do Project-Atlas expirou ontem no relógio da demonstração (ACCESS_WINDOW_EXPIRED), para Raj Patel, que está ao mesmo tempo em um grupo que permite e em um grupo que nega (POLICY_CONFLICT, retido para revisão humana), e para Wei Chen, o membro do conselho L4 a quem o firewall corretamente atende, o controle positivo que prova que ele não está simplesmente negando tudo.
Cada uma dessas decisões cai no rastro de auditoria à prova de adulteração: um registro JSON encadeado por hash de quem perguntou o quê, o que foi servido, o que foi retido e por quê, e qual modelo respondeu, com um chip de verificação CHAIN INTACT e uma exportação em um clique. Gerado automaticamente, dentro da VPC.
O conjunto dourado são 40 decisões rotuladas allow/deny de (usuário, documento): 10 usuários contra 4 documentos sensíveis, rótulos derivados mecanicamente pelo oráculo independente a partir da semântica do grafo de identidade. O firewall marca 40/40 com 0 divulgações não autorizadas e 0 negativas falsas. O baseline de ACL plana marca 29/40 com 10 divulgações não autorizadas, incluindo o board pack servido a 7 usuários não autorizados, a janela Atlas expirada e o funcionário desligado, mais 1 negativa falsa. Cada número é calculado pelo harness em tempo de execução, nunca fixado no código, e o detalhamento por caso mostra cada rótulo do oráculo ao lado das decisões dos dois sistemas. Estes são resultados do conjunto dourado, não garantias de mundo aberto.
A mesma comparação que a demonstração executa ao vivo, no mesmo grafo de identidade e nos mesmos documentos.
| Dimensão | Naive Flat-ACL RAG (a construção típica de piloto) | Firewall RBAC Soberano (RAGGUARD) |
|---|---|---|
| Quando a autorização acontece | Na ingestão, congelada em uma tag em cada chunk | No momento da recuperação, por consulta, por documento |
| Grupos aninhados e herança cruzada de OU | Resolvidos uma vez na ingestão; o snapshot envelhece | Achatados recursivamente contra o grafo de identidade ao vivo em cada consulta |
| ABAC: clearance, dispositivo, concessões com prazo, status de emprego | Inexprimível em uma tag plana | Avaliado por documento contra a referência de política estruturada |
| Desligamento há nove minutos | Ainda servido até a reindexação rodar | ALL_ACCESS_REVOKED_TERMINATION em tudo |
| Políticas conflitantes em um documento | Serve o documento | Deny-by-default: NEEDS_REVIEW, encaminhado a um humano com o conflito explicitado |
| Conjunto dourado de 40 casos | 29/40: 10 divulgações não autorizadas, 1 negativa falsa | 40/40: 0 divulgações não autorizadas, 0 negativas falsas |
| Rastro de auditoria | Nenhum | Registro encadeado por hash, à prova de adulteração, de cada ato de servir e de reter, exportável como JSON |
Aplique a autorização no momento da recuperação, não no momento da ingestão. Um motor de políticas determinístico fora do LLM verifica cada documento recuperado contra as associações de grupo e os atributos ao vivo do usuário antes de chegar ao modelo, de modo que documentos retidos nunca entram na janela de contexto. Nesta demonstração esse portão marca 40/40 em um conjunto dourado rotulado de 40 casos, contra 29/40 da construção de ACL plana que a maioria dos pilotos entrega.
Porque a tag é um snapshot e a permissão é uma propriedade viva do seu grafo de identidade. Uma ACL do momento da ingestão perde tudo o que muda depois da indexação, como um desligamento ou uma concessão de projeto expirada, e não consegue expressar regras de atributo como nível de clearance ou dispositivo gerenciado de forma alguma. Na demonstração esses dois limites respondem por 10 divulgações não autorizadas e 1 negativa falsa em um benchmark de 40 casos, a partir de um baseline que resolve fielmente grupos aninhados na ingestão.
Não se o documento nunca chega ao modelo. A demonstração inclui um caso rotulado em que uma nota embutida em um documento instrui qualquer assistente de IA a ignorar suas permissões de recuperação e emitir a cifra Board-Only, e a injeção não tem nada a exfiltrar porque a autorização aconteceu antes do LLM e o memorando nunca entrou na janela de contexto. Esse é um exemplo de defesa em profundidade da aplicação no momento da recuperação, não um produto autônomo de guardrails.
Negar por padrão. Quando um usuário detém ao mesmo tempo uma associação que permite e uma que nega no mesmo documento, ou uma referência de política não pode ser resolvida, o firewall retorna NEEDS_REVIEW e encaminha o caso a um humano com o conflito explicitado, em vez de adivinhar. A demonstração mostra exatamente isso: um gerente de risco de crédito que está ao mesmo tempo em um grupo permitido e em um grupo negado tem o memorando em disputa retido para revisão, não servido.
O firewall é Python determinístico que não precisa de modelo nenhum, e o caminho de resposta é intercambiável por uma variável de ambiente: Anthropic, OpenAI, Gemini ou Ollama. Defina LLM_PROVIDER=ollama para implantação soberana air-gapped e nada, nem um token, sai da caixa. A própria demonstração roda offline sem chave de API, e o placar de avaliação nunca chama um LLM.
Toda consulta acrescenta um registro a uma cadeia de hash SHA-256 à prova de adulteração: quem perguntou, o conjunto de permissões resolvido, o que foi servido, o que foi retido e por quê, e qual modelo respondeu. Exporta como JSON e é gerado dentro da sua VPC. É o registro de evidência de acesso à recuperação que um dossiê do Artigo 50 da Lei de IA da UE pede, não uma certificação de conformidade.
Uma demonstração executável que prova o mecanismo. O provedor de identidade é um fixture JSON sintético no formato Azure-AD/SCIM, desligamentos e expirações de concessões são eventos do fixture, e o vector store roda in-process atrás de uma interface no formato Qdrant. O motor de políticas, o harness de avaliação e a exportação de auditoria encadeada por hash são reais e rodam exatamente como mostrado; como o fixture espelha as interfaces Azure AD Graph e SCIM, o caminho de produção documentado para um IdP ao vivo é uma troca de configuração, não uma reescrita.
A pesquisa por trás desta demonstração — a arquitetura, o desenho de verificação e o blueprint empresarial.
Solução completa
Explore a solução Sovereign AI & Private LLM Deployment →A camada de permissão é a parte difícil. Nós a construímos.
Se a sua equipe está lidando com como apontar um modelo privado a um corpus governado por anos de herança de grupos aninhados, ou com o que as obrigações de transparência da Lei de IA da UE significam para os seus logs de recuperação, gostaríamos genuinamente de ouvir como vocês estão pensando nisso. O problema é de toda a indústria e as respostas também serão.