Distributed Systems & Enterprise ResiliencePlaybook3 min readUpdated September 2026

Designing VPC Peering So One Breach Doesn't Spread

Peering two VPCs is a routing decision, not a security decision, even though it often gets treated as both. Once you peer, every subnet in one VPC can potentially reach every subnet in the other, unless you've deliberately restricted it with security groups and network ACLs on top of the peering connection itself.

This matters because a lot of teams draw their network diagram, connect the boxes, and call it done, without ever asking what should happen if one specific service in one specific VPC gets compromised.

Vendors Covered in this Article

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

Does VPC peering isolate networks by default?

A VPC peering connection routes traffic between two networks; it doesn't restrict which resources within those networks can talk to each other. That restriction is a separate layer, built with security groups scoped to specific services and network ACLs scoped to specific subnets, and it has to be designed on purpose.

Teams that skip this step usually don't notice, because normal traffic flows exactly as expected. The gap only shows up during an incident, when something that should have been contained instead has a clear path to everything else.

Draw the Blast Radius Before the Network Diagram

Before connecting anything, ask: if this specific service were compromised, what should it be able to reach, and what should it never be able to reach? A public-facing API service should reach its own database. It has no legitimate reason to reach your internal admin tooling, your CI/CD credentials store, or another team's production database.

Once you've answered that for your highest-risk services, the network design follows from the answer, rather than the answer being an afterthought bolted onto whatever topology was easiest to set up.

A Worked Example: Splitting a Shared VPC by Trust Level

Take a common starting point: one VPC holding public-facing services, internal tools, and a database, all able to reach each other freely. Split it into three tiers, public-facing, internal, and data, each in its own subnet with security groups that only allow the specific, named connections each tier actually needs.

The public tier can reach the data tier on its specific database port. It cannot reach the internal tier at all. If a public-facing service is compromised, the attacker's next move is blocked at the network layer, not just hoped against.

The internal tier gets its own, tighter rule: it can reach the data tier, and it can reach the public tier's services on the specific ports those services expose, but nothing reaches it from outside except through a bastion or a VPN, so internal tools never end up sitting one misconfigured rule away from the open internet.

The split follows these steps:

  1. Place public-facing services, internal tools, and the database into three tiers, each in its own subnet.
  2. Write security groups for each tier that allow only the specific, named connections that tier actually needs.
  3. Let the public tier reach the data tier only for the specific data access it requires.
  4. Add network ACLs at the subnet level as a coarse backstop that blocks whole classes of traffic.
  5. Test from a public-tier instance that internal-tier resources are actually unreachable, rather than trusting the diagram.

Security Groups and Network ACLs Do Different Jobs

Security groups are stateful and attached to specific resources, which makes them good for expressing "this service can talk to that service." Network ACLs are stateless and attached to subnets, which makes them a good coarse backstop, a rule that blocks a whole class of traffic regardless of which specific resource is misconfigured.

Use both. A security group misconfiguration is a mistake anyone can make; a network ACL at the subnet boundary is what keeps that single mistake from becoming a wide-open path.

The two also fail differently, which is the real reason to use both. A security group that's too permissive usually still requires the attacker to know a resource exists and target it directly. A network ACL gap tends to be broader and easier to stumble into by accident, which is exactly the kind of mistake a coarse, subnet-level rule is meant to catch.

How do you test that network isolation actually works?

The only real test is to try the connection you designed against. From a test instance in your public tier, attempt to reach a resource in your internal tier that shouldn't be reachable, and confirm it's actually blocked, not just assumed blocked because the diagram says so.

Federal guidance treats a critical vulnerability on an internet-accessible system as urgent enough to need remediation within 15 days, twice the window given to the same flaw on an internal-only system; good isolation is what keeps more of your services out of that faster, harder tier in the first place1.

Executive Capability Standard

What Good Looks Like

Good network isolation means you can name what a compromised service should and shouldn't be able to reach, that boundary is enforced by security groups and network ACLs rather than assumed from a diagram, and it's been tested with an actual blocked connection attempt.

Building The Capability (5-Stage Skill Ladder)

1. Learn:Read your cloud provider's documentation on the difference between security groups and network ACLs, since confusing the two is the most common reason isolation designs have gaps.
2. Do Manually:Draw the blast radius for your two or three highest-risk services, then manually configure security groups to allow only those specific, named connections.
3. Delegate:Give a specific engineer ownership of a quarterly review that tests whether isolation boundaries still hold as new services get added to existing VPCs.
4. Automate:Set up automated alerts for any new security group rule that opens broad access between tiers, so a change like that gets reviewed instead of shipping quietly.
5. Buy:Bring in a cloud security platform or outside review once you have enough VPCs and services that no one person can track the full topology from memory.

How to Get Started

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

Frequently Asked Questions

Does VPC peering automatically isolate our networks from each other?

No. Peering only routes traffic between two VPCs; it doesn't restrict which resources can reach each other once connected. You still need security groups and network ACLs layered on top to actually isolate services by trust level, and skipping that step is one of the most common gaps in cloud network design.

What's the difference between security groups and network ACLs?

Security groups are stateful and attached to specific resources, so they're good for allowing exactly the connections a service needs. Network ACLs are stateless and attached to subnets, acting as a coarser backstop. Using both means one misconfigured security group doesn't automatically open a wide path.

How do we know if our network isolation actually works?

Test it directly. From a resource in one tier, attempt the connection to another tier that should be blocked, and confirm the attempt actually fails. A diagram that shows isolation isn't proof; a blocked connection attempt is.

What should we isolate first if we're starting from a flat network?

Start with your highest-risk boundary: separating public-facing services from your internal admin tooling and data stores. That single split removes the most likely path an attacker would take after compromising something exposed to the internet, before you tackle finer-grained segmentation elsewhere.

Sources

Where we quote a benchmark, we show its source. Other figures in this guide are estimates or general guidance, so check them against your own numbers.

  1. Security patch remediation SLAs (CISA federal mandates, used as industry norm). CISA Binding Operational Directives 19-02 and 22-01 (CISA briefing hosted at NIST CSRC), 2022.

Related Guides