Skip to main content

SaaS architecture pattern

Multi-Tenant SaaS on AWS — Pool, Silo, and Bridge

The isolation model you pick determines your cost ceiling, your security posture, and how easily you can sell to enterprise. Here is how we choose between pool, silo, and bridge in real engagements.

Last updated: April 30, 2026 Author: FactualMinds AWS Architects Reviewed by: Palaniappan P · AWS Solutions Architect — Professional

Problem

Most SaaS teams adopt a 'pool' multi-tenant architecture by default and only realize at Series B that some enterprise customers contractually require silo (single-tenant) isolation, while finance cannot answer 'what does Customer X cost us per month?'. Retrofitting tenant isolation and per-tenant cost attribution under deal pressure is expensive.

Solution

Pick the isolation model up-front based on your customer mix, and instrument tenant attribution from day one. Use AWS-native primitives — IAM tag conditions, Cognito user pools, EKS namespaces with IRSA, AWS Split Cost Allocation Data, and Bedrock per-tenant inference profiles — to make the isolation model load-bearing without inventing your own multi-tenancy framework.

AWS services in this pattern

ServiceRole
Amazon Cognito User PoolsTenant identity provider; Cognito groups represent tenants; custom claims carry tenant_id into JWTs
API Gateway / Application Load BalancerEdge entry point; tenant_id from JWT routes to the appropriate compute and authorizes downstream calls
Amazon ECS Fargate or EKS Auto ModeApplication compute; ECS tasks tagged by tenant_id for cost attribution; EKS uses namespace-per-tenant for silo
Amazon Aurora (Serverless v2 or Provisioned)Pooled database with row-level security via tenant_id column; silo tenants get dedicated cluster
Amazon DynamoDBPooled item-collection-per-tenant pattern using tenant_id as partition key prefix
Amazon S3Per-tenant prefix in shared bucket (pool) or per-tenant bucket (silo); IAM tag-based policies enforce isolation
AWS KMSPer-tenant customer-managed key for silo tier; shared key with grants for pool tier
AWS Split Cost Allocation DataPer-tenant cost attribution for ECS, EKS, Lambda, and shared services
Amazon Bedrock with Inference ProfilesAI feature isolation — separate per-tenant inference profiles for spend caps and audit
AWS WAF + Shield AdvancedPer-tenant rate limiting, geo-match, and DDoS protection at the edge

Architecture components

Pool tier

Shared compute, shared database with row-level security, shared KMS key. Cheapest, scales fastest, most multi-tenant noise risk.

Silo tier

Dedicated VPC, dedicated database cluster, dedicated KMS key. Most expensive, needed for regulated or enterprise contracts.

Bridge tier

Shared compute, but dedicated database and KMS key. Middle ground — cheaper than silo, more isolated than pool.

Tenant context

JWT claim from Cognito carries tenant_id through every request; downstream services use it for routing and authorization.

Cost attribution

Mandatory tenant_id tag on every resource via SCP; Split Cost Allocation Data exposes per-tenant unit cost in CUR 2.0.

Noisy-neighbor controls

WAF rate-based rules per tenant, ECS task quotas per tenant, RCU/WCU caps on DynamoDB per tenant via reserved capacity.

Why this pattern

Multi-tenancy is the single architectural decision that determines whether your SaaS scales economically or collapses under per-customer cost. The pool/silo/bridge framework, originated by AWS SaaS Factory, is genuinely the right shape — but the AWS service landscape has changed enough since 2019 that the old recommendations need updating.

This pattern reflects how we deploy multi-tenant SaaS in 2026: Cognito for identity, Aurora Serverless v2 (or DSQL where horizontal scale is needed) for pooled data, EKS Auto Mode or ECS Fargate for compute, and Split Cost Allocation Data for the per-tenant cost picture finance asks for at every board meeting.

Choosing the tier

SignalPoolBridgeSilo
ACV under $5K
ACV $5K–$25K
ACV over $25K
Enterprise data isolation contractpartially
Data residency or sovereignty requirement
Noisy-neighbor risk between tenants
One tenant 10x larger than others
Need fastest possible onboarding

What “tenant context everywhere” looks like

Every layer of the stack reads tenant_id from the JWT and uses it as a filter:

The discipline is the architecture. There is no AWS service that automatically enforces tenant isolation in pool — you build it once and audit it forever.

Where this pattern shows up in our consulting

We deploy this pattern most often in AWS Architecture Review engagements at Series A through Series C SaaS companies, when the founders realize that an enterprise contract is gated on isolation guarantees they did not design for. The cost optimization story usually rides along — once tenant attribution is in place, cost optimization recommendations become tenant-specific instead of org-wide averages.

Trade-offs

Pro

Pool tier is 5–10x cheaper per tenant than silo at scale, with much faster onboarding (no provisioning).

Con

Pool tier requires disciplined engineering — every query, cache key, and S3 path must include tenant_id. One missed filter is a data-leak incident.

Pro

Silo tier passes enterprise procurement and compliance reviews instantly — single-tenant isolation is what auditors expect.

Con

Silo tier infrastructure cost grows linearly with customers; per-tenant CI/CD and operations overhead is significant.

Pro

Bridge tier is the realistic answer for most SaaS — pooled compute gives the cost benefit, dedicated database satisfies "we need our data isolated" enterprise asks.

Con

Bridge tier is more complex to operate than pure pool — you maintain N database clusters at provision-time + a connection-routing layer.

Cost notes

Pool tier typically lands at 30–60% of silo cost at the same revenue. The break-even point depends on your average ACV: if you sell at $50K+ ACV, the silo cost is usually a rounding error and worth offering on the high tier. Below $10K ACV, silo is rarely defensible — sell pool to everyone and offer bridge for a 2x price uplift. Set the explicit per-tenant cost ceiling for your pool tier (e.g., $200/month) and route any tenant exceeding it to bridge.

Consulting engagements that deliver this pattern

Deep dives

Frequently asked questions

When should we move from pool to silo?

When customer ACV crosses ~$25K, when a deal explicitly requires single-tenant isolation, or when your pool tier hits a noisy-neighbor incident that costs more to remediate than the silo infrastructure for that customer would have cost in a year. Most SaaS we work with end up running all three tiers concurrently with explicit pricing tied to the tier.

Can we mix pool databases with silo compute, or vice versa?

Yes — that's the bridge model. Pooled ECS or EKS compute talking to dedicated Aurora clusters per tenant gives most of the isolation enterprise asks for at half the cost of full silo. The connection-routing layer (a Lambda authorizer or middleware that picks the cluster based on tenant_id) is the only new component.

How do we handle per-tenant cost when our compute is pooled?

AWS Split Cost Allocation Data attributes EKS, ECS, and Lambda costs to tenants based on tags or namespaces. For shared databases, the pattern is to record per-tenant query cost (RCU/WCU for DynamoDB, query duration for Aurora) at the application layer and expose it via CUR 2.0 cost categories. Once that pipeline is wired up, Cost Optimization Hub recommendations automatically respect tenant boundaries.

What about the database — pooled or silo?

For most B2B SaaS, pooled Aurora with row-level security is the correct default. Switch to silo Aurora clusters only when (a) a customer contractually requires it, (b) data residency rules force it, or (c) one tenant has an order-of-magnitude bigger workload than others. Silo databases at low ACV are a finance trap.

How does this pattern interact with our compliance posture (HIPAA, SOC 2)?

For HIPAA, the BAA covers the pool — you do not need silo to be HIPAA-compliant on AWS, but every shared component must be HIPAA-eligible and your tenant_id-based access controls must be airtight. SOC 2 Type 2 cares more about the controls themselves (least-privilege IAM, encryption, audit logs) than about isolation tier. For both, a documented control map at each tier is more important than the tier choice.

Want this pattern deployed end-to-end?

Our team builds these patterns in production for SaaS, healthcare, fintech, and enterprise customers. Tell us your constraints and we'll scope the engagement.