INC-1088 Lab 02: The Hardened Subnet That Broke Everything
Reporting service cannot reach the database after a NACL hardening change
Cloud networking, at packet level
Reading about VPC routing does not build intuition. Debugging a broken one does. Every lab hands you a Terraform file that deploys a genuinely broken environment and an incident ticket — no hints, no answer key until you ask for it.
Trace a real failure — the outage behind Lab 01:
Run the trace to see where the packet dies.
INC-1043
A batch job in a private subnet cannot reach a third-party API. The route table looks correct, the security groups are wide open, and the NAT Gateway reports Available. Find out why every outbound connection still hangs.
Reported symptom
Outbound API calls from the private subnet time out after deploying the new VPC
Reported by Payments Platform
Reporting service cannot reach the database after a NACL hardening change
Newly onboarded spoke VPC cannot reach shared services; the existing spoke works
Application cannot reach the vendor API through its new PrivateLink endpoint
Address planning, subnet tiering, route table scoping, and the boundary rules that decide whether a packet ever leaves the VPC.
What a target actually sees as the source address, how health checks decide which zones receive traffic, and the defaults that silently change both.
NAT Gateway placement, per-AZ data processing charges, gateway versus interface endpoints, and where egress spend actually accrues.
Centralized inspection topologies, appliance mode, route table associations, and propagation across attachments.
Direct Connect, Site-to-Site VPN, and the BGP attributes that control which path your traffic actually takes on the way back.
A security group rule on the managed prefix list admits every CloudFront origin-facing server on earth, including the ones serving someone else's distribution pointed at your origin. AWS's own guidance puts a secret header first and the prefix list as an optional extra, the list costs 55 of your 60 rules, and VPC origins replace both with a service-managed security group that is scoped to your distributions and nothing else.
Private IPv4, IPv6 and an Elastic IP all survive a stop and start. The auto-assigned public IPv4 does not: it is released on stop and a new one is assigned on start, and the old one can never be recovered. Associate an Elastic IP later and the public address is released then too. Every address costs the same $0.005 an hour, so the one that changes is the one with no reason to exist.
Amazon Linux package repositories and ECR image layers are S3 objects in buckets AWS owns. Lock a gateway endpoint policy down to your own buckets and both stop working, with an access-denied that names a bucket you have never heard of. The policy language has three more traps, and the default policy is the only one that cannot hit them.
Flip an NLB to dualstack and IPv6 clients connect, but every one of them reaches an IPv4 target as the load balancer's own address, because translated traffic is never source-preserved. The fix is a listener rule that routes by address family to an IPv6 target group, and it brings four requirements the checkbox never mentioned, one of which makes a UDP service fail to build at all.