Anonymized enterprise case study
A multi-tenant Google Cloud platform with tenant isolation.
A security software company needed one cloud platform for many customers, with each customer’s apps and data kept apart. Eunimo built it on Google Cloud, with rules for who can reach each part and for how the team releases changes.
The product served many customers from one platform, and every customer brought sensitive data. Tenant separation living in application code was a standing risk: one mistake could cross a boundary that should never be crossed. The platform had to make isolation, scale, and safe delivery properties of the system rather than disciplines the team had to remember.
Public traffic enters through Cloud Load Balancing with Cloud Armor at the edge, then reaches a GKE cluster where each tenant runs in its own namespace under network policy. Stateful services stay private. Identity, secrets, image promotion, and monitoring form the control plane around it.
Shared platform. Separate customer boundaries.
Google Kubernetes Engine (GKE) runs the application services. Each tenant has a namespace, a named group of workloads, with network rules and scoped identities restricting access. A namespace alone is not a security boundary.
Conceptual access boundaries, not separate physical clusters or databases. Both tenants use shared platform infrastructure.
Shared controls: release pipeline, identity, monitoring, and private data services. Application authorization must still enforce customer access.
- Tenant A: Customer A request: Shared protected entry → Tenant A workloads: Namespace and network policy → Permitted data access: Scoped service identity
- Tenant B: Customer B request: Shared protected entry → Tenant B workloads: Namespace and network policy → Permitted data access: Scoped service identity
- Protected entry: Requests pass through shared traffic filtering before reaching application services. Cloud Load Balancing, Cloud Armor
- Customer workloads: Tenant-specific namespaces and network policies restrict communication between workloads. GKE, Namespaces, Network policy
- Data access: Service identities limit access to privately reachable databases and caches. Workload identity, Cloud SQL, Memorystore
- Releases: Build and image promotion controls make changes reviewable. Cloud Build, Artifact Registry
- Shared operations: Monitoring and capacity management remain responsibilities of the shared platform. Cloud Monitoring, Logging, Autoscaling
- What separates one customer from another? Customers share infrastructure, so a mistake in access rules can affect more than one customer. Combine namespaces with network policies, scoped service identities, and application authorization. Test denied cross-tenant network and identity access. This checks specific boundaries; it is not a guarantee against every failure or misconfiguration.
- What happens when one tenant gets busy? A shared cluster can put customers in competition for capacity. Use autoscaling and monitoring to follow demand while keeping services behind the same access boundaries. Review resource contention and capacity limits as tenant load changes. Autoscaling alone does not guarantee that another tenant will be unaffected.
- How are application changes released? A platform-wide release couples unrelated customer workloads. Build images through Cloud Build and promote them through Artifact Registry into controlled service rollouts. Review and release changes at service scope, while checking shared dependencies and tenant access rules.
Why isolation had to move into the platform.
Separation was treated as a platform property, not an application concern. Namespaces, network policy, and scoped identity enforce boundaries below the code, to restrict cross-tenant access. Shared infrastructure still needs capacity controls and failure testing.
- Tenant isolation: Make separation a property of the platform. Isolation moved out of application logic and into the infrastructure: per-tenant namespaces, network policy, and scoped identity, enforced at more than one layer so a single misconfiguration is not the only thing separating two customers.
- Controlled delivery: Release one capability at a time. Independent microservices, image promotion, and progressive rollout let the team release one capability at a time instead of turning every deploy into a platform-wide event.
- Operable scale: Scale where demand actually appears. Autoscaled node pools, request-aware ingress, and managed data services let the platform grow with customer load while keeping data services private and bounded.
- Serve many customers from one platform with provable tenant isolation.
- Keep all runtime and data services private behind bounded network controls.
- Promote container images through a controlled path instead of building in production.
- Give security and platform teams one observability and policy surface across tenants.
Tenant isolation, scale, and control on Google Cloud primitives.
Public traffic enters through Cloud Load Balancing with Cloud Armor at the edge, then reaches a GKE cluster where each tenant runs in its own namespace under network policy. Stateful services stay private. Identity, secrets, image promotion, and monitoring form the control plane around it.
- Tenant isolation: Per-tenant namespaces, Kubernetes network policy, and scoped workload identity.
- Private runtime: GKE services and managed data services stay off the public internet.
- Controlled delivery: Artifact Registry, Cloud Build, IAM, and Secret Manager govern every change.
- Isolation: Separation is enforced at the platform layer, not assumed in code. Per-tenant namespaces with Kubernetes network policy restrict east to west traffic. Workload identity scopes every service to least-privilege access on Google Cloud. Private networking keeps databases and caches off the public internet entirely.
- Scale: Capacity follows real demand without exposing internals. Cloud Load Balancing and Cloud Armor shape and filter traffic before it reaches services. Autoscaled GKE node pools absorb load while keeping the runtime boundary intact. Managed Cloud SQL and Memorystore carry state behind private access paths.
- Control: Delivery and security are part of the platform, not bolted on. Artifact Registry and Cloud Build promote signed images through a controlled pipeline. Secret Manager and IAM keep credentials and access explicit and reviewable. Cloud Monitoring and Logging give one operating surface across every tenant.
Built to be operated, verified, and extended.
The delivery model is part of the platform, not wrapped around it later. Infrastructure as code, deny-by-default isolation tests, controlled image promotion, and clear runbooks let the team run and grow the platform without losing the boundaries that protect tenants.
- Architecture review first: We mapped the tenant model, trust boundaries, and failure modes before touching infrastructure, so the isolation design was agreed and testable up front.
- Infrastructure as code: The platform was provisioned through reviewable, repeatable code, so every environment matched and every change was auditable.
- Isolation you can verify: Network policy and identity scoping were validated with deny-by-default tests, so separation was demonstrated rather than asserted.
Isolation, delivery, and scale became properties of the platform.
The result was more than a migration. The team gained a platform where tenant separation is enforced below the code, releases are scoped to one service at a time, and growth happens without exposing internal services.
- Isolation you can show a buyer: Tenant separation is enforced in the infrastructure and demonstrated with deny-by-default tests, so the platform produces the evidence enterprise security teams ask for before they sign.
- Ship without a change freeze: Independent services and controlled promotion let the team release one capability at a time, reducing the need for platform-wide release coordination.
- Add customers without re-architecting: New tenants onboard through a repeatable isolation template, so growth is a configuration step rather than a project, and data services stay private as load rises.
- One audit-ready control surface: Identity, secrets, and monitoring sit behind one governed view, so security reviews, audits, and incident response draw from a single source instead of per-tenant guesswork.
Isolation you can prove. Delivery without estate-wide risk. A platform built to serve enterprise customers safely.
The trade-off stayed explicit: multi-tenancy adds complexity, so the platform had to earn it back. Here, isolation enforced in the infrastructure, private data services, and controlled delivery made serving many customers from one platform safe to operate.