Skip to main content
Respostas às perguntas que um questionário de segurança costuma fazer, verdadeiras em 30/09/2026. Cada resposta aponta para a evidência: um arquivo nos repositórios da Niadra (niadra-back, niadra-infra, niadra-frontend), uma página desta documentação ou um recurso da nuvem. Quando a resposta honesta é “ainda não”, ela diz isso e diz o que existe no lugar. Se o seu questionário tem um formato próprio, a Niadra o responde a partir destas mesmas respostas; peça pelo formulário do Enterprise.

Organização e certificações

A Niadra tem certificação ISO 27001, SOC 2 ou PCI DSS? Não. As certificações são da nuvem em que a Niadra roda (AWS: EC2, RDS, S3, KMS, Secrets Manager, SNS, CloudWatch Logs, ECR, SES, em us-east-2), não da Niadra. Uma certificação própria não está contratada. Houve teste de invasão por empresa independente? Ainda não. O que existe: os testes automáticos de isolamento que rodam em todo pull request do servidor (segurança por linha do PostgreSQL, um banco por espaço, a chave de uma empresa que não abre o dado de outra: niadra-back/tests/unit/test_keys.py::test_one_companys_key_never_opens_anothers_data), o modelo de ameaças e o canal de divulgação responsável em niadra.com/.well-known/security.txt (RFC 9116). No plano Regulado, o teste de invasão por empresa independente entra no contrato, com o relatório disponível sob acordo de confidencialidade. Quem é o responsável pela segurança? O fundador, que opera a plataforma e responde aos incidentes. Não há time de segurança separado nem plantão em turnos; o plano de resposta a incidentes diz como isso funciona na prática. Quem tem acesso à produção? Uma pessoa, o fundador, pela conta da AWS, sem porta SSH: a máquina é alcançada pelo Systems Manager, com a sessão registrada no CloudTrail da conta. Nenhuma credencial da AWS existe fora dessa conta; o GitHub não tem nenhuma (niadra-infra/README.md, “Continuous integration and deploy”).

Controle de acesso

Como os agentes e sistemas se autenticam? Com uma chave de fonte por agente, fornecedor ou canal, com escopos (track, act, context, search, identify, admin, analytics e os das funcionalidades de agente) e uma classe de audiência. Rota sem o escopo responde 403 scope_missing e deixa um comprovante denied. A chave é guardada só como hash: um HMAC com pepper para a busca e um scrypt lento para a conferência (niadra-back/src/niadra/domain/edge/keys.py). Veja Espaços e chaves. Há revogação imediata e rotação de chaves? Sim. Revogar uma chave corta o acesso em segundos; um período de graça opcional deixa a chave antiga responder enquanto o agente troca para a nova (niadra-back/src/niadra/app/control.py, expire_key). Chaves são criadas e revogadas pelo Console ou pela API de controle. Como as pessoas entram no Console? Com senha (hash scrypt, cerca de 50 ms e 16 MiB por conferência) e segundo fator TOTP, obrigatório por padrão em todo tenant (niadra-back/src/niadra/domain/control/credentials.py; app/control.py, mfa_required), ou por SSO com o provedor de identidade da sua empresa, por OIDC ou SAML 2.0, com os papéis vindos dos grupos do provedor (niadra-back/src/niadra/app/sso.py). A sessão é um JWT EdDSA de curta duração. Há papéis e privilégio mínimo? Sim. Papéis admin, security, integration, review, analysis e vendor, combináveis (niadra-back/src/niadra/domain/control/records.py). Apagar, exportar, criar retenção legal e mudar a política exigem security; toda ação de pessoa deixa comprovante admin. Veja Acesso ao Console. O que um agente pode ler? O que a política do espaço libera, item a item, por categoria, sensibilidade, finalidade, audiência e nível de verificação do cliente na conversa. A política nega por padrão: categoria não declarada não chega a ninguém, e categoria sensível só chega por uma liberação com finalidade. Veja Acesso negado por padrão.

Criptografia

Os dados são cifrados em repouso? Sim, em duas camadas. A nuvem cifra o disco do banco (StorageEncrypted: true em niadra-infra/aws/cluster.yaml) e os buckets. A aplicação cifra o conteúdo de conversas, eventos, fatos e contexto com AES-256-GCM sob a chave de dados do espaço, com espaço, tabela, coluna e linha como dado autenticado: uma linha de uma empresa não decifra sob a chave de outra (niadra-back/src/niadra/adapters/outbound/keys/kms.py; teste tests/unit/test_keys.py). Onde ficam as chaves? A chave-mestra fica no AWS KMS (alias/niadra-cell), em HSMs com validação FIPS 140-3, e nunca sai de lá; o KMS rotaciona o material todo ano. As chaves de dados de cada espaço saem do GenerateDataKey e são guardadas embrulhadas, no banco da célula, fora do banco do espaço. A política da chave separa quem usa (o papel da máquina: Encrypt, Decrypt, GenerateDataKey, DescribeKey) de quem administra (a conta); mudar isso exige mudar a política, o que o CloudTrail registra (niadra-infra/aws/cluster.yaml, CellKey). No plano Regulado, a célula dedicada tem a própria chave-mestra, e sob contrato a chave que embrulha as chaves de dados pode ser a da sua conta na nuvem. Os dados são cifrados em trânsito? Sim. TLS 1.3 no mínimo na borda, em todo host (niadra-infra/k8s/charts/niadra/templates/ingress.yaml, TLSOption), e TLS 1.3 obrigatório entre o pooler de conexões e o banco (ssl_min_protocol_version: TLSv1.3 em aws/cluster.yaml). Entre os pods dentro da mesma máquina o tráfego não é cifrado; é um risco residual declarado no modelo de ameaças. Dado pessoal chega aos modelos de IA? O texto vai mascarado: e-mail, telefone, cartão, IBAN, endereço, códigos postais, documentos de vários países e contas bancárias são trocados por marcadores dentro da célula antes da chamada (niadra-back/src/niadra/domain/extract/redaction.py), e cada pedido leva data_collection: deny e zdr: true (niadra-back/src/niadra/adapters/outbound/llm/openrouter.py). Veja Subprocessadores.

Registro e monitoramento

Que registros existem e por quanto tempo? Três tipos. (1) Comprovantes: toda leitura de agente, inclusive a recusada, toda ação de pessoa, todo apagamento e toda mudança de configuração deixam um comprovante encadeado por SHA-256, com a raiz diária selada em armazenamento de escrita única por cinco anos; a retenção dos comprovantes no banco é configurável, no mínimo 30 dias (Comprovantes). (2) Logs dos processos: 30 dias no CloudWatch Logs, sem conteúdo de cliente, provado por um teste canário (niadra-back/tests/unit/flow/test_log_canary.py). (3) Chamadas à conta da AWS, inclusive ao KMS e ao Systems Manager: CloudTrail da conta. Os registros podem ir para o meu SIEM? Sim. Um endpoint com formato ocsf ou hec recebe os comprovantes em segundos, em lotes de até 200, assinados, com retentativas por 24 horas e fila de erros; só ids e hashes. Veja Comprovantes. Há monitoramento e alertas? Sim. Prometheus e Grafana no cluster; 21 regras de alerta em niadra-infra/k8s/charts/niadra/files/alerts.yaml (latência do contexto acima de 100 ms no p95, confirmação da ingestão acima de 80 ms, erros do servidor, outbox e fila parados, comprovantes perdidos, cache e armazenamento de estado falhando, banco de espaço falhando, comprovante de apagamento pendente, cópia de segurança que falhou ou envelheceu, entre outras). As de severidade page e ticket vão a um tópico SNS com assinatura de e-mail confirmada e se repetem a cada 4 horas enquanto duram.

Cópias de segurança e recuperação

Como são as cópias de segurança? Toda noite, às 02:30 UTC, um pg_dump do banco da célula e de cada banco de espaço vai para o bucket da célula, cifrado, com 35 dias de retenção (niadra-infra/k8s/charts/niadra/templates/ops.yaml). O RDS guarda a cópia automática da instância por um dia, o que o plano da conta permite hoje; a instância tem proteção contra exclusão. A restauração é testada? Sim, toda semana: no domingo o mesmo job restaura cada cópia mais recente num banco temporário e conta as linhas. Um alerta dispara quando a cópia falha ou envelhece (BackupJobFailed, BackupStale). Restaurar um espaço só, sem tocar os outros, e conferir uma cópia à mão são runbooks no niadra-back/README.md. Qual o RPO e o RTO? RPO: até um dia para a cópia automática da instância e até 24 horas para as cópias noturnas por banco. RTO: não medido. A reconstrução é pelo template (niadra-infra/scripts/stack.sh) e uma implantação; ver o plano de resposta a incidentes.

Resposta a incidentes

Existe um plano de resposta a incidentes? Sim: Resposta a incidentes, com papéis, severidades, o que detecta, os passos, a notificação ao cliente e a revisão depois do incidente. O fundador é o responsável e o plantão. Em quanto tempo o meu time é avisado? No prazo do contrato. Sem prazo no contrato, em até 24 horas depois de a Niadra confirmar um incidente que toque dados da sua empresa, com atualizações a cada 24 horas até o encerramento e um relatório escrito ao fim.

Gestão de vulnerabilidades

Há varredura de vulnerabilidades em dependências e imagens? Nas dependências, sim; nas imagens, ainda não. Desde 30/09/2026, cada repositório com dependências roda uma auditoria contra o arquivo de versões travadas antes de cada merge e no CI (.github/workflows/ci.yml):
  • servidor, especificações e SDK de Python: pip-audit sobre todas as versões do uv.lock, inclusive as de desenvolvimento e as dos extras de integração; qualquer vulnerabilidade conhecida barra o merge, seja qual for a gravidade (scripts/audit.py);
  • SDK de TypeScript e site: pnpm audit --prod e npm audit --omit=dev, que barram vulnerabilidade alta ou crítica nas dependências que vão para produção. O SDK de TypeScript não tem dependência de produção;
  • a documentação não entra: ela não publica código próprio, quem a serve é a Mintlify.
Uma vulnerabilidade sem versão corrigida só passa numa lista de exceções com motivo e data de validade de no máximo 30 dias; vencida a data, o merge volta a ser barrado. Na primeira rodada, a do servidor (PyJWT) e as do SDK de Python com correção (LiteLLM, oauthlib) foram corrigidas atualizando a versão; ficaram como exceção até 30/10/2026 as que não têm correção publicada ou que um framework de integração trava (ChromaDB, DiskCache, NLTK e Werkzeug), todas em extras usados só nos testes do SDK. Os pacotes do sistema das imagens de contêiner não são varridos, e as dependências de desenvolvimento dos repositórios de TypeScript não barram o merge. O restante: versões travadas (uv.lock, pnpm-lock.yaml, package-lock.json), testes em todo pull request (lint, tipos, fronteiras de módulo, testes de unidade e de integração contra PostgreSQL, PgBouncer, RabbitMQ e Redis reais), imagens construídas na máquina a partir do commit publicado, e o canal de divulgação responsável. Como reportar uma vulnerabilidade? Pelo canal em niadra.com/.well-known/security.txt: o formulário do Enterprise com o interesse “Segurança”, em português ou inglês. Não há programa de recompensa. Como as correções chegam à produção? Por pull request em main com o CI verde; uma pessoa move a branch release e a máquina implanta, com verificação de ponta a ponta depois e volta automática quando ela falha (niadra-infra/scripts/cd.sh, on-ops.sh). Uma correção de segurança segue o mesmo caminho, no mesmo dia em que fica pronta.

Desenvolvimento seguro

Como é o ciclo de desenvolvimento? Toda mudança entra por pull request, e o CI (niadra-back/.github/workflows/ci.yml) exige: as migrações iguais aos modelos (alembic check nas três histórias), ruff (lint e formato), mypy, import-linter (as camadas do código não se invertem) e a suíte de testes de unidade e de integração, com mais de três mil testes. O front exige tipos, testes e build com os links internos conferidos; a infraestrutura exige shellcheck, o chart renderizado nos dois modos, as rotas de alerta testadas com amtool, o orçamento de memória e cfn-lint. Há separação entre ambientes? Sim. A célula local roda com PostgreSQL, Valkey, RabbitMQ, armazenamento compatível com S3 e um provedor de IA simulado, só com dados sintéticos; a produção tem um tenant sintético para a verificação de ponta a ponta. Por projeto do cliente, os ambientes sandbox e produção são espaços separados, com chaves e dados isolados. Segredos ficam em repositório? Não. Nascem uma vez no Secrets Manager (niadra-infra/scripts/bootstrap-secrets.sh) e chegam a cada processo só pelo Secret dele; a máquina usa o papel da instância, nunca chaves de acesso. Há revisão de código? Toda mudança passa por pull request, com o CI como revisor automático. Como a Niadra tem uma pessoa desenvolvendo hoje, a revisão por uma segunda pessoa não existe; é dito aqui para não parecer o contrário.

Retenção e apagamento

Por quanto tempo os dados ficam? Por classe de dado, configurável por espaço: eventos pela janela quente (90 dias por padrão, de 30 a 90) e depois no arquivo frio pelo prazo que o espaço definir (cinco anos por padrão); fatos, episódios, comprovantes e sessões pelo retention_days de cada um. A tabela completa, armazenamento a armazenamento, está em Onde cada cópia mora. Como um titular é apagado? Por POST /v1/forget, por perfil, identificador ou conversa: a cascata percorre a linhagem inteira (eventos, fatos, episódios, objetos, ações, padrões, vínculos, vetores, contexto compilado, arquivos, cache, registros de turno) e termina num comprovante de apagamento e num webhook erasure.completed. Um registro lacrado fora do banco faz uma restauração de cópia reexecutar o apagamento. Veja Apagar. E ao fim do contrato? Apagar um espaço derruba o banco dele, apaga objetos, cópias noturnas, segredos e chaves de cache, e destrói as chaves de dados por último; o comprovante registra as versões destruídas e diz quando expira a última cópia automática da instância, a partir da qual a destruição por chave vale para toda cópia. A exportação (sob demanda ou contínua, em Parquet) sai antes, para o seu bucket.

Continuidade de negócio

Qual a arquitetura de disponibilidade? Uma máquina k3s e um RDS sem Multi-AZ, numa zona de us-east-2. A perda da máquina ou da zona derruba a API e o Console até a reconstrução. O caminho para três máquinas em três zonas e um banco Multi-AZ está descrito no niadra-infra/README.md e não está implantado. Não há SLA de disponibilidade publicado fora do contrato. O que acontece quando o provedor de IA fica fora? A ingestão confirma antes de qualquer modelo, a leitura do contexto não chama modelo, a extração espera e tenta de novo, e cada decisão vale pelo rótulo conservador. Nada é perdido; a memória nova atrasa. Há dependência de uma pessoa? Sim. A operação é do fundador; o template da nuvem, o chart, os scripts e os runbooks estão nos repositórios para que outra pessoa com acesso à conta reconstrua e opere a plataforma.

Uso dos dados

Os dados são usados para outro fim, vendidos ou usados para treinar modelos? Não, não e não. Veja Uso de dados, com a conferência de cada afirmação no código. Onde os dados ficam? Em us-east-2, na região da AWS que o contrato nomeia. Só sai da região o texto mascarado que vai aos modelos de IA, listado em Subprocessadores.

Próximos passos

Modelo de ameaças

controle por componente e riscos residuais.

Resposta a incidentes

o plano, como ele roda hoje.

Subprocessadores

a lista que vai no contrato.

Política de versões da API

o que muda, o que não muda e com que aviso.