The ticket
Third app VPC is coming. Someone already requested peering to hub, to app, and to tomorrow’s VPC. Phase-1 to 203.0.113.60 is “up” on one tunnel. Priya on 10.20.30.80 still cannot reach 10.51.0.0/16. The missing object is a TGW route, not another peer.
Transit Gateway is a regional hub: VPC attachments, Site-to-Site VPN attachments, Direct Connect, peering. You do not mesh twenty VPCs with peering. TGW route tables (association + propagation, or static) decide which attachments can talk — that is the isolation policy. AWS Site-to-Site VPN creates two tunnels for the connection; design for both, not one green peer. A virtual private gateway (VGW) attaches VPN to one VPC (this lab’s dummy VGW public 203.0.113.60). Prefer VPN on the TGW when many VPCs must reach on-prem FortiGate 203.0.113.10 / 10.20.30.0/24.
Account 111122223333 · OUs Security / Workloads · hub VPC 10.50.0.0/16 · app VPC 10.51.0.0/16 · SG sg-web · NACL acl-app · bucket tc-lab-app-logs · role AppEC2Role · TGW tgw-lab · VGW public 203.0.113.60 · on-prem FortiGate WAN 203.0.113.10. Dummy account ID. Not yours.
Mental model
| Object | Job | This lab |
|---|---|---|
tgw-lab | Hub for many VPCs + VPN | Attachments: hub 10.50.0.0/16, app 10.51.0.0/16, VPN |
| TGW route table | Who can reach whom | Shared-services RT vs isolated-app RT |
| Site-to-Site VPN | Two tunnels to the customer gateway | CGW = FortiGate 203.0.113.10 |
| VGW 203.0.113.60 | VPN onto a single VPC | Fine for one VPC; do not scale it as a mesh |
One tunnel down is a maintenance event, not an outage — if you built both.
tgw-lab + vpn-onprem
How to choose
| Need | Use | Do not |
|---|---|---|
| 2–3 VPCs, never more, no on-prem | Peering can still be honest | Promise it stays at three |
| Many VPCs + on-prem | TGW hub + VPN attachment | Peer-mesh 20 VPCs |
| One VPC only + on-prem | VGW 203.0.113.60 is valid | Pretend VGW is a multi-VPC hub |
| Isolate prod from sandbox | Separate TGW route tables | One RT with every attachment propagated |
Runbook
Side A — attachments
Create
tgw-lab. Attach hub and app VPCs (subnets in each AZ you actually use). Associate each attachment to the intended TGW RT.Side B — VPN
Customer gateway
203.0.113.10. VPN on the TGW. Configure both tunnels on the FortiGate. On-prem LAN10.20.30.0/24must be in the TGW RT; AWS prefixes must be on the FortiGate.Side C — prove
Both tunnels up. Ping from
10.20.30.80to an app IP.describe-transit-gateway-route-tablesshows the prefix. One tunnel down — traffic still flows.
aws ec2 describe-transit-gateways --filters Name=tag:Name,Values=tgw-lab
aws ec2 describe-transit-gateway-attachments --filters Name=transit-gateway-id,Values=tgw-labxxxxxxxxx
# vpc-hub, vpc-app, vpn-onprem
aws ec2 describe-vpn-connections --query 'VpnConnections[].{State:State,Tunnels:VgwTelemetry}'
# two tunnels · both UP
aws ec2 search-transit-gateway-routes --transit-gateway-route-table-id tgw-rtb-lab \
--filters Name=route-search.exact-match,Values=10.20.30.0/24
# Type: static/propagated Attachment: vpn-onpremFour failures
1 · One tunnel “is fine”
AWS gives you two. Patch day on the FortiGate will prove why.
2 · Attachments exist, TGW RT does not have the prefix
Blackhole. Association ≠ a route. Search the TGW RT.
3 · VPC route table still has no 10.20.30.0/24 → tgw-lab
TGW can be perfect. The VPC RT never sent the packet to the attachment.
4 · Peer-mesh plus TGW
Two control planes, asymmetric paths, duplicate CIDRs. Pick the hub.
How to prove it
1) Both VPN tunnels are up. 2) TGW RT has 10.20.30.0/24 and the VPC CIDRs. 3) Each VPC RT points those prefixes at tgw-lab. 4) You did not add another peering “just in case.”
Traps
| Symptom | Look at |
|---|---|
| IKE up, no ICMP | Phase-2 / TGW RT / VPC RT / SG / NACL |
| Works to hub, not to app | Separate TGW RT isolation — often intentional |
| Only tunnel-1 up | FortiGate second peer, PSK, or replay window — not “AWS is down” |
Knowledge check
Judgment items. One best answer. Reasons send you back to the matching section.
AWS security class series: Shared + IAM · Org / OU · SG vs NACL · Role not key · KMS + Secrets · VPC endpoint · Trail + GuardDuty · TGW hub · S3 public · Interview
Sources
- Amazon VPC Transit Gateway — What is a transit gateway.
- AWS Site-to-Site VPN — What is AWS Site-to-Site VPN.
Related: AWS session factory · Migration series.