Networking parity — the global VPC against regional VPCs and VNets, and the four rows that re-model an estimate

The family where a like-for-like count is most wrong. Counterpart names, then the four differences that matter: a Google Cloud VPC is global while an AWS VPC and an Azure VNet are regional, the load balancer taxonomy does not line up one-to-one, Cloud NAT is not an appliance, and managed WAF rules never port.

markdownguidev1CV2S-XTQWstage: designtrust: officialfamily: networkingservice: vpcinterface: anynetworking parityVPCAWS VPCazure virtual networkglobal networkregional subnettransit gatewayvirtual WANload balancer paritycloud NATNAT gatewayprivate linkprivatelinkprivate service connectWAF

Created 21 Oct 2026 · Modified 23 Oct 2026 · 1 version

Networking parity

1. The names

Google CloudAWSAzure
VPC network (global)VPC (regional)Virtual Network (regional)
subnet (regional)subnet (zonal)subnet (within the VNet's region)
firewall rulessecurity groups + network ACLsnetwork security groups, application security groups, Azure Firewall
Cloud RouterTransit Gateway, Direct Connect (per Google's table)VPN Gateway, Route Server
Cloud VPNAWS VPNVPN Gateway, Virtual WAN
Cloud InterconnectDirect ConnectExpressRoute
Cloud Load BalancingElastic Load Balancing (ALB/NLB/GWLB)Load Balancer, Application Gateway, Front Door, Traffic Manager
Cloud CDNCloudFrontAzure CDN / Front Door
Cloud DNSRoute 53Azure DNS, Private DNS, Traffic Manager
Cloud NATNAT GatewayNAT Gateway
Private Service ConnectPrivateLinkPrivate Link
Cloud ArmorAWS WAF + ShieldWAF on Application Gateway / Front Door / CDN
VPC Flow LogsVPC Flow Logsvirtual network flow logs
Network Intelligence CenterReachability Analyzer etc.Network Watcher

Note the Cloud Router row: Google's own table pairs it with Transit Gateway and Direct Connect, and Microsoft's with VPN Gateway. Both are partial — Cloud Router is a BGP control plane that appears in Interconnect, VPN and NAT designs. Do not read it as "the transit object"; Google Cloud mostly does not need one (§2).

2. The row that re-models the whole estimate

Google CloudAWSAzure
the network objectglobalregionalregional
the subnetregionalzonalregional
traffic between two regions in one networkinternal, by defaultneeds peering, Transit Gateway or Cloud WANneeds peering or Virtual WAN
a transit objectusually not neededTransit Gateway, commonlyVirtual WAN, commonly

So a per-region network inventory does not convert by arithmetic. Three practical rules:

  1. Moving to Google Cloud: N regional VPCs/VNets usually become one VPC network with N subnets.

The Transit Gateway or Virtual WAN, its attachments, its route tables and its hourly charges disappear. That is often the largest single structural saving in a cloud-to-cloud move, and it is routinely missed because nobody costs the absence of an object.

  1. Moving from Google Cloud: one network becomes N, plus a transit design that did not previously

exist. Budget the transit object, its attachments and its per-GB processing charge as new line items.

  1. Peering non-transitivity is shared between Google Cloud and AWS, so a peering-based source design ports

as-is. A Transit-Gateway- or Virtual-WAN-based design does not — there is no equivalent object to port onto, and the answer is either the global VPC itself (§2.1) or Network Connectivity Center.

The second-order effect: IP address planning changes shape. A Google Cloud subnet is regional, so there is no per-zone subnet carve-up. An estate with three subnets per region per AZ collapses to one per region, and the address plan should be redone rather than translated. Avoid auto mode on anything you will connect — its ranges all come from 10.128.0.0/9 and collide with every other auto-mode network.

3. Load balancing does not line up one-to-one

NeedGoogle CloudAWSAzure
global HTTP(S) front doorglobal external Application Load BalancerCloudFront + ALB, or Global AcceleratorFront Door
regional HTTP(S)regional external Application Load BalancerALBApplication Gateway
internal HTTP(S)regional internal, or cross-region internal ALBinternal ALBinternal Application Gateway
TCP proxy with SSL offloadglobal/regional external proxy Network Load BalancerNLB with TLS listenerLoad Balancer + Application Gateway
non-TCP protocols, source IP preservedpassthrough Network Load Balancer (TCP, UDP, ESP, AH, GRE, SCTP, ICMP)NLB (TCP/UDP)Load Balancer
DNS-based traffic steering—Route 53Traffic Manager

Three estimate-bearing facts:

  1. Google Cloud has a single global anycast HTTP(S) balancer, where a global AWS front door is usually

two products (CloudFront plus a regional ALB) and Azure's is Front Door plus a regional gateway. Moving in, that is one fewer component and one fewer certificate story. Moving out, it is one more.

  1. cross-region internal has no clean counterpart. An internal service reachable from several regions

behind one address is a Google Cloud primitive; on AWS and Azure it is a design.

  1. Only Google Cloud's passthrough family carries SCTP, ESP, AH and GRE. A workload using those has one

family on Google Cloud and may have no managed option on a target cloud — check before promising a like-for-like move. And the classic balancers being global in Premium Tier and regional in Standard Tier is a trap with no analogue elsewhere.

4. Cloud NAT is not an appliance, and that is a line item

Google CloudAWSAzure
what it is"a distributed, software-defined managed service" — no VM, no appliancea NAT Gateway resource, per AZa NAT Gateway resource
where configuredon a Cloud Router, per regionper subnet/AZper subnet
redundancyinherentyou deploy one per AZ for zone resilienceper zone
inboundnever: "established inbound response packets only"nevernever
extraPrivate NAT for private-to-private translation——

Moving to Google Cloud removes the NAT gateway resources, their per-zone duplication and their per-resource charge, leaving egress data as the dimension. Moving away adds all three back, plus a throughput ceiling. And Private NAT has no counterpart in either table read here — it is the answer to overlapping private ranges, which a merger-driven migration almost always has.

5. WAF rules: names port, rules do not

Cloud Armor pairs with AWS WAF + Shield and with Azure's WAF. The honest split:

  • custom rules port with effort — different expression languages, explicit intent;
  • preconfigured/managed rule sets do not port. Cloud Armor's are based on **OWASP ModSecurity CRS 4.22,

3.3 and 3.0**. Where the source platform's rules were also CRS-based, the CRS version is the common ground and the port is tractable. Where they were a vendor's proprietary managed rules, there is nothing to convert: budget a tuning cycle against real traffic, with a lead time, in every WAF migration.

  • attachment coverage differs. A Cloud Armor policy attaches only to the balancer types in

reference/networking/cloud-armor.md §2. Choosing a balancer and then discovering the policy will not attach is a front-door rework — check it during design.

6. Pricing dimension (never a price)

Google CloudAWSAzure
egress to internetper GB, by destination and by network service tierper GB by Regionper GB by zone
inter-regionper GBper GBper GB
load balancingforwarding rules and data processedper LCU/hour and per hourper hour plus capacity units
NATno appliance charge; data processed and addressesper gateway-hour plus data processedper gateway-hour plus data processed
transit between networksmostly not applicableTransit Gateway attachment-hours plus dataVirtual WAN hub plus data
private service accessendpoints, plus dataPrivateLink endpoint-hours plus dataPrivate Link endpoint-hours plus data

The two rows with no Google Cloud charge — a transit object and a NAT appliance — are the ones that move an estimate most, and they move it by not existing. Make them explicit lines with a zero rather than leaving them out, so the comparison is auditable.

7. What this guide cannot tell you

The egress bill. It is the largest and least predictable line in most cross-cloud migrations, it is charged by the source cloud during the move and by the target forever after, and no mapping table contains it. It is treated as a first-class line in guides/parity-and-migration-method.md.

Read this document as markdown — the same bytes an agent receives.