/projects/airia-spm
← Todos os projetosSecure Posture Management
Um inventário de cada agente de IA que a empresa já está rodando.
Engenheiro de P&D — modelo de domínio, persistência e um provedor · Jul 2025 – Out 2025

Visão geral
Gestão de postura dentro da plataforma: um conjunto de conexões com provedores que são atualizadas em um agendamento, os agentes e componentes que elas descobrem e o feed de violações que diz qual deles fez algo que uma política proíbe.
O que eu fiz
Construí o modelo de domínio e a persistência sob esta funcionalidade, e adicionei um dos provedores de nuvem por onde ela descobre.
- As entidades — conexão, agente, componente, configurações — e seu contexto de banco.
- Uma camada de repositório sobre esse contexto, para que a lógica de consulta parasse de morar nos serviços.
- O provedor de serviço de modelos da Azure, ao lado dos que já eram suportados.
- Um identificador de execução no feed de violações, ligando uma violação à execução por trás dela.
Esta era uma funcionalidade grande, dividida entre vários times — os scanners de descoberta, a pontuação de risco e a interface eram trabalho de outras pessoas. O meu é a camada por onde elas leem e escrevem.
O problema
Uma empresa não adota IA num lugar só. Ela chega por uma ferramenta de automação de workflow que um time instalou, por um serviço de modelos em nuvem que outro time já paga, por um construtor de assistentes embutido num software licenciado e por assinaturas pessoais que ninguém aprovou. Governar isso começa por uma lista, e antes desta funcionalidade não havia lista — só as partes que cada time por acaso conhecia.
Arquitetura
Um tenant configura uma conexão por provedor, cada uma com sua configuração tipada em vez de um saco compartilhado de opções. Um job agendado atualiza essas conexões e grava o que encontrou como componentes e agentes, então o inventário tem uma idade em vez de ser o que a última pessoa clicou. O feed de violações fica por cima e, desde este trabalho, carrega o identificador de execução que liga uma violação à execução que a produziu.
- Provider connectionUma por plataforma em que a empresa roda IA, cada uma com uma configuração tipada própria.
- Scheduled refreshRelê cada conexão num temporizador, então o inventário envelhece em vez de ficar obsoleto em silêncio.
- Components and agentsO que foi descoberto, persistido por uma camada de repositório em vez de consultas ad-hoc.
- Violations feedO que quebrou uma política, cada linha rastreável até a execução que a causou.
O que faz
- Descoberta em várias plataformas de agentes, cada uma atrás de uma conexão tipada própria.
- Uma atualização agendada, para que o inventário tenha uma idade conhecida.
- Uma camada de repositório sobre o contexto de banco, mantendo a lógica de consulta fora dos serviços.
- Violações rastreáveis até a execução que as produziu.
Decisões de engenharia
Uma configuração tipada por provedor, não um blob de configurações
Cada provedor autentica de um jeito e expõe um formato diferente de coisa a descobrir. Um único objeto de configuração fracamente tipado faria cada consumidor adivinhar quais chaves valem para qual provedor, e somar um provedor viraria torcer para nada lá na frente se importar. Um conjunto fechado de configurações tipadas faz o compilador nomear o trabalho necessário para suportar uma plataforma nova.
Uma camada de repositório, acrescentada depois e de propósito
A primeira versão consultava o contexto de banco direto dos serviços, o que funciona até três times estarem escrevendo serviços sobre as mesmas entidades e cada um inventar sua própria ideia do que significa "os agentes deste tenant". Mover essas consultas para trás de repositórios deu à funcionalidade uma definição única de cada leitura, e deu aos testes unitários algo em que se apoiar que não é um banco.
Atualização agendada em vez de um webhook por provedor
Webhooks seriam mais frescos, e exigiriam que todo provedor os suportasse, que todo cliente os configurasse e que a plataforma fosse alcançável a partir de cada um — que é o mesmo problema de perímetro que o conector existe para evitar. Consultar num agendamento é menos elegante e funciona em todo lugar, e um inventário cuja idade se conhece é mais útil que um a que falta, em silêncio, o evento que se perdeu.
Uma violação que dá para rastrear até uma execução
Um feed dizendo que uma política foi quebrada é um alerta; um feed dizendo qual execução quebrou é uma investigação. Levar o identificador de execução até a linha da violação é uma mudança de uma coluna que tira o feed do lugar de algo que o time de segurança observa e o coloca no de algo sobre o que consegue agir.