For security teams
Corpus security overview
Corpus is a self-hosted AI knowledge base. The language model runs in Ollama on your server, and Corpus calls no cloud AI service. This page sums up how it protects the data; the full deployment guide comes with the product.
Print this page or save it as PDF from your browser.
- Data location
- Everything runs on your server, and the AI model is local. After installation no container reaches the internet: the only ways out are tunnels to the HashiCorp Vault, SSO provider and S3 storage you connect, each to that one address. Document files leave the server only if you keep them in S3, encrypted.
- Network
- Every service sits on an internal Docker network with no internet route. Only the HTTPS proxy is published. Model downloads, Vault, the SSO provider and the S3 storage each get a dedicated, narrow path. The first start downloads the AI models; later starts need no internet.
- Encryption at rest
- AES-256-GCM for document files, document text, search chunk text, chats and the error log. Backups are encrypted with the same key.
- Key
- Kept in backend/.env or in HashiCorp Vault, with an AppRole bound to the server. Corpus refuses to start with a key that does not match the data. Rotation re-encrypts everything, with one command.
- Access control
- Roles built from permissions, with no way to grant more than you hold, and the last administrator protected. Four document levels (standard, restricted, confidential, secret) are enforced in the document list, in search and in every answer.
- Sign-in
- Passwords hashed with bcrypt, sign-in throttling, 15-minute tokens rotated on refresh, sessions of 12 hours at most, cookies with CSRF protection. Single sign-on with OpenID Connect, PKCE and full ID token checks; roles follow the provider's groups.
- Audit
- Sign-ins and failures, changes to users, roles and documents, document reads, including the documents the assistant read to answer, and reads and deletions of other users' chats.
- Web
- HTTPS, HSTS, a strict Content-Security-Policy, and opened documents sandboxed.
- Containers
- The backend and the worker run as an unprivileged user with no Linux capabilities. Services sit on separate networks, and each gets only the secrets it needs.
- Privacy
- Logs never hold document text, chat content or secrets. Chats and errors are deleted after their retention periods (chats after 90 days without activity by default).
What the audit log shows

What Corpus does not encrypt
Document names, user emails, the audit log and search vectors are not encrypted by Corpus. Keep the server's data on an encrypted disk (LUKS); the deployment guide shows how.
Questions from your security team? Write to us or book a call with the author.