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:
- Place public-facing services, internal tools, and the database into three tiers, each in its own subnet.
- Write security groups for each tier that allow only the specific, named connections that tier actually needs.
- Let the public tier reach the data tier only for the specific data access it requires.
- Add network ACLs at the subnet level as a coarse backstop that blocks whole classes of traffic.
- 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.
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)
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.
A cloud workload security platform like CrowdStrike can flag when a workload in one segment is talking to something it shouldn't, which becomes useful once you have more VPCs than one person can track from memory.
A compliance automation tool like Vanta can pull evidence that your network segmentation controls are actually configured the way you documented, which saves manual work once you're preparing for an audit.
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.
- 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
Where VPC Peering Breaks Down and How to Isolate Blast Radius Instead
Why VPC peering alone doesn't isolate anything, and a more reliable way to contain blast radius between services and environments.
What a Misconfigured VPC Peering Connection Actually Breaks
A walkthrough of a real VPC peering misconfiguration, what it exposed, and the four checks that would have caught it before it shipped.
The VPC Peering Mistake That Opens Your Whole Network
How VPC peering misconfigurations quietly expose more of your network than intended, and four concrete checks that catch the mistake before an audit does.
A Practical Checklist for VPC Peering and Network Isolation
The specific network isolation mistakes that quietly undermine a zero-trust architecture, and a checklist for catching them in your VPC peering setup.
VPC Peering Looks Like Isolation Until You Check the Routes
VPC peering can silently become transitive, undoing the isolation you thought you had. Here is how to audit what can actually reach what in your network.
Four Network Isolation Checks Most VPC Peering Setups Skip
Four specific checks for VPC peering and network isolation setups, plus the pitfalls that let a segmentation boundary look correct while quietly failing.