A camada de permissão que a maioria das implantações de RAG empresarial não tem

Seu LLM privado não está vazando. Sua camada de recuperação está.

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.

O piloto passa na demonstração. Depois falha na revisão de segurança.

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.

Como o Firewall RBAC Soberano funciona

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

1. Resolução de permissões ao vivo

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.

2. Um veredito determinístico

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.

3. O recibo

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 baseline que ele derrota não é um espantalho

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 LLM é cenário intercambiável

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.

O placar é independente

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.

Um único ponto de estrangulamento, pronto para agentes

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.

O vazamento de EUR 412 milhões, trabalhado de ponta a ponta

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.

A pergunta que vaza

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.

O vazamento em tela dividida: o lado Naive Flat-ACL lê em voz alta a projeção Board-Only de EUR 412 milhões para a analista L2 Lena Vogt com um banner vermelho de LEAK e um aviso de que 1 documento não autorizado foi servido, enquanto o lado RAGGUARD mostra 5 recuperados, 2 concedidos, 3 negados.
O momento do vazamento: um memorando Board-Only lido em voz alta para uma analista L2. O número é sintético; o modo de falha não é.

A mesma consulta, atrás do firewall

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 lado RAGGUARD da demonstração após a consulta de Lena: 5 recuperados, 2 concedidos, 3 negados, com uma nota de retenção listando os documentos negados e seus códigos de motivo, incluindo BOARD_MEMBERSHIP_REQUIRED no board pack.
Mesma pergunta, mesma recuperação: 5 recuperados, 2 concedidos, 3 negados, cada negação carregando um código de motivo.

O que o modelo realmente viu

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 entrada verbatim do modelo dos dois lados: o documento Board-Only sinalizado em vermelho dentro do prompt de ACL plana, e ausente do prompt do RAGGUARD, que está rotulado como fundamentado apenas em documentos permitidos.
As janelas de contexto, verbatim: o documento vazado presente à esquerda, ausente à direita.
A visão de decisão por documento: a linha do board pack lendo Served without authorization no lado de ACL plana e Access denied at retrieval com o código de motivo BOARD_MEMBERSHIP_REQUIRED no lado RAGGUARD.
O mesmo documento, dois vereditos: servido sem autorização versus negado na recuperação, com o código de motivo.

A injeção que não tinha nada para roubar

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.

A linha de prompt-injection embutida dentro da nota de metodologia Internal, destacada na visão de detalhe da decisão, instruindo qualquer assistente de IA a ignorar as permissões de recuperação e emitir a cifra de perda de crédito do Board.
A injeção, no documento que o modelo tinha permissão para ler. O documento que ela visa nunca chegou ao modelo.

O grafo de identidade se move. O snapshot, não.

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.

O caso do funcionário desligado: Priya Shah com um selo TERMINATED na faixa de identidade, o lado RAGGUARD mostrando 0 concedidos e 5 negados com o código de motivo ALL_ACCESS_REVOKED_TERMINATION, enquanto o lado de ACL plana ainda atende a partir do snapshot obsoleto.
Desligada há nove minutos: o firewall revoga tudo; o snapshot de ingestão ainda não percebeu.

O recibo, na tela

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 rastro de auditoria à prova de adulteração: um chip CHAIN INTACT, o registro JSON encadeado por hash de documentos servidos e retidos com códigos de motivo, e o botão Export Audit Record.
O registro de auditoria encadeado por hash: o artefato que um dossiê do Artigo 50 pede, não uma certificação.

O placar, com seu escopo exato

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.

O placar do benchmark de 40 casos: Naive Flat-ACL RAG em 29/40 com 10 divulgações não autorizadas e 1 negativa falsa, RAGGUARD em 40/40 com 0 divulgações não autorizadas e 0 negativas falsas.
O placar, calculado ao vivo pelo harness de avaliação contra os rótulos do oráculo.
Um detalhamento por caso do benchmark: o oráculo rotula o caso como deny, o baseline de ACL plana serviu o documento, e o RAGGUARD o reteve, com os chips de política explicando a decisão.
Detalhamento por caso: rótulo do oráculo, decisão de ACL plana, decisão do firewall e a política que a decidiu.

Naive Flat-ACL RAG versus o Firewall RBAC Soberano

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

O que esta demonstração não faz

  • ✓ Ela não se conecta a um Active Directory, Okta, SharePoint ou Confluence ao vivo. O provedor de identidade é um fixture JSON sintético no formato Azure-AD/SCIM, desligamentos e expirações são eventos do fixture, e o vector store é in-process atrás de uma interface no formato Qdrant. O conector de IdP ao vivo é a substituição de produção documentada, não o que roda hoje.
  • ✓ Ela não envolve nenhum banco real, clientes ou contas ao vivo. Lena Vogt, Marco Rossi, Priya Shah, Raj Patel, Wei Chen, cada documento e a cifra de EUR 412 milhões são sintéticos.
  • ✓ Ela não reivindica garantias de mundo aberto. 40/40 com 0 divulgações não autorizadas é o resultado calculado em um conjunto dourado rotulado fixo de 40 casos, não uma promessa de que nada jamais vaza em produção.
  • ✓ Ela não mede latência de produção. A sobrecarga de enforcement na escala de microssegundos é só a lógica do firewall, in-process; um round-trip de IdP ao vivo, que esta demonstração simula com stub, adiciona mais.
  • ✓ Ela não entrega um conjunto de guardrails, DLP ou uma plataforma multiagente. É uma capacidade feita de forma convincente: o firewall de permissões no momento da recuperação, com o caso de injeção como um exemplo rotulado de defesa em profundidade. O caminho de resposta é Pydantic AI, e o portão determinístico deliberadamente não agêntico é o desenho; a governança agêntica é o caminho de extensibilidade documentado.
  • ✓ Ela não certifica conformidade. A exportação de auditoria é o registro de evidência que um dossiê do Artigo 50 da Lei de IA da UE pede, não uma certificação, e não existem clientes, implantações ou estudos de caso para esta demonstração.

Perguntas que os compradores de fato fazem

Como impedimos que o nosso chatbot interno de IA mostre aos funcionários documentos que eles não deveriam ver?

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.

Já marcamos documentos com permissões quando os indexamos. Por que isso não é suficiente?

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.

Uma prompt injection pode enganar o modelo para vazar um documento restrito?

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.

O que acontece quando políticas de acesso conflitam ou o sistema não tem certeza?

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.

Algum dado sai da nossa VPC? Isso pode rodar totalmente air-gapped?

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.

O que mostramos a um auditor sobre quem acessou o quê pelo sistema de IA?

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.

Isto é uma integração ao vivo com Active Directory ou uma demonstração?

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.

Pesquisa técnica

A pesquisa por trás desta demonstração — a arquitetura, o desenho de verificação e o blueprint empresarial.

Avaliando a implantação de LLM privado em uma empresa regulada?

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.

Avaliação da camada de permissão

  • ✓ Mapear onde o seu pipeline de RAG autoriza hoje: momento da ingestão ou momento da recuperação
  • ✓ Modelar a herança de grupos aninhados e cruzada de OU como um grafo de política ao vivo
  • ✓ Definir as regras ABAC que uma tag plana não consegue expressar: clearance, dispositivo, concessões com prazo
  • ✓ Especificar o registro de acesso à recuperação que o seu dossiê do Artigo 50 pede

Construir o firewall no momento da recuperação

  • ✓ Um portão determinístico authorize(user, doc) fora de qualquer LLM
  • ✓ Resolução de IdP ao vivo atrás de interfaces no formato Azure AD Graph e SCIM
  • ✓ Encaminhamento deny-by-default de conflitos para revisão humana
  • ✓ Um rastro de auditoria encadeado por hash, exportável, gerado na sua VPC
Redes sociais

Também publicado em