Back to blog

Engineering

Why we chose multi-tenant isolation over single-tenant for security

Sofia Alvarez · Mar 4, 2026 · 11 min read
Multi-tenant isolation

The intuition

Every enterprise security review asks the same question: "Do you offer single-tenant deployment?" The intuition is obvious — a dedicated database, dedicated servers, no risk of cross-tenant data leak. More isolation equals more safety.

We push back.

For agent workloads, multi-tenant with proper isolation is actually more secure. Not less. And we'll walk you through the threat model.

Why single-tenant feels right (and is, for traditional SaaS)

The intuition makes sense if your threat model is SQL injection, container escape, or a bug in the application layer that leaks data. Dedicated VMs, dedicated databases, dedicated networks — if something goes wrong, the blast radius is one customer.

"Traditional SaaS threats live in the infrastructure and application code. Single-tenant reduces blast radius. This logic is sound for a CRUD app."

But agent workloads have a fundamentally different threat model. The primary risk is not the infrastructure. It's the model itself.

The agent threat model is different

Consider what can go wrong with an autonomous agent:

None of these are solved by single-tenant infrastructure. A dedicated database doesn't protect you from a compromised model. A dedicated VM doesn't prevent prompt injection.

What single-tenant does do: it makes your deployment a more attractive target. Fewer eyes on the code. Less frequent patches. A security event is quieter. An attacker who compromises one customer's instance has fewer witnesses.

"Single-tenant is a smaller, less-monitored surface. Multi-tenant means the same hardened code path, the same observability stack, the same patch cycle benefits everyone."

In multi-tenant, every customer uses the exact same code path. When we patch a vulnerability, we patch it once and deploy it once. When we run security audits, we audit once and that covers everyone. When we monitor for abuse, we see the patterns immediately because they're in one system.

How we do isolation in multi-tenant

The trick is proving that isolation is real. Here's what we implement:

1. Kernel namespaces per agent run

Every agent execution runs in its own network namespace, PID namespace, and mount namespace. No two agents can see each other's processes or network connections.

2. Network policies (deny-all default)

We use Kubernetes NetworkPolicy with an explicit deny-all default. Agents can only reach approved integrations.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: agent-isolation
spec:
  podSelector:
    matchLabels:
      tenant: "TENANT_ID"
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: "orchestrator"
  egress:
  - to:
    - podSelector:
        matchLabels:
          type: "approved-integration"
    ports:
    - protocol: TCP
      port: 443

3. Per-tenant encryption keys

Every tenant's data is encrypted with a unique key held in a hardware security module. Even if someone gets disk access, they can't decrypt another tenant's data.

4. Row-level security on every table

The database itself enforces isolation at the row level. A query from tenant A cannot return rows from tenant B, even if a bug bypasses the application layer.

CREATE POLICY tenant_isolation_policy ON agent_executions
    AS SELECT
    USING (tenant_id = current_user_tenant());

CREATE POLICY tenant_isolation_policy ON secrets
    AS SELECT
    USING (tenant_id = current_user_tenant());

CREATE POLICY tenant_isolation_policy ON integrations
    AS SELECT
    USING (tenant_id = current_user_tenant());

Operational benefits (which compound security)

Multi-tenant also makes incident response faster:

The cost trade-off is real

Single-tenant is operationally cheaper at small scale. One customer, one database, one VM. Done.

Multi-tenant is 10x the ops cost — you need strict isolation, careful resource scheduling, more observability, incident response tooling, and security audits that cover shared infrastructure.

The question is: what do you trade that cost for? For us, it's not additional safety. The safety comes from the isolation mechanisms, not from having separate infrastructure. The cost buys you operational visibility and incident response speed — which, paradoxically, makes you more secure than single-tenant.

When single-tenant actually makes sense

We're not ideological about this. We offer single-tenant for customers who need it:

In those cases, we deploy single-tenant. But we charge honestly for it — we pass the 10x ops cost to the customer. And we're honest about what single-tenant buys you: isolation of the compute layer, not of the threat model. The agent itself still has the same risks.

The security conversation is changing

Enterprise security is moving away from "isolation through separation" and toward "isolation through control." Multi-tenant with strong isolation mechanisms is becoming the standard for AI workloads. Single-tenant infrastructure gives you a false sense of safety — and often introduces new risks through operational complexity and version fragmentation.

The next time a prospect asks "do you offer single-tenant?" — the real question they're asking is "are you secure?" Our answer is: yes, and multi-tenant is how we prove it.

Security

Want our full security package?

SOC 2 report, threat model, architecture overview — request the bundle.

Request package

Keep reading

Why we built a sandboxed runtime
Engineering

Why we built a sandboxed runtime for AI agents

Prompts are not a security boundary. Here's the architecture we landed on after our first six months in production.

Sofia Alvarez · Apr 8, 2026 · 8 min
Deterministic guardrails
Engineering

Engineering deterministic guardrails on probabilistic systems

A look at the policy engine that sits between the model and the world — written in Rust, powered by CEL.

Marcus Hale · Mar 11, 2026 · 9 min
Evals are infrastructure
Engineering

Treating evals as production infrastructure

How we run 12,000 eval cases on every PR — and what we do with the cases that flake.

Sofia Alvarez · Feb 9, 2026 · 7 min