ЁЯПл The SchoolтА║ЁЯкк AWSтА║ЁЯкз рдзрдбрд╛ 21 тАФ Subnet networking: corridor рдлрд▓рдХ, рд╣реЙрд▓рд╡реЗрдЪреЗ рдирд┐рдпрдо, рдЦрд╛рдЬрдЧреА corridors
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯкз рдзрдбрд╛ 21 тАФ Subnet networking: corridor рдлрд▓рдХ, рд╣реЙрд▓рд╡реЗрдЪреЗ рдирд┐рдпрдо, рдЦрд╛рдЬрдЧреА corridors

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 25 рдкреИрдХреА рдзрдбрд╛ 21 тАФ рднрд╛рдЧ 4 рд╕реБрд░реВ! ┬╖ рдорд╛рдЧреАрд▓: lesson-20-the-bill ┬╖ рдкреБрдвреАрд▓: lesson-22-nat-gateway


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ21. рдзрдбрд╛ 13 рдиреЗ campus рдХрд╛рдврд▓рд╛; рд╣рд╛ рдзрдбрд╛ рд╣рд╛рддрд╛рдд torch рдШреЗрдКрди рддреНрдпрд╛рдЪреНрдпрд╛ corridors рдордзреВрди рдЪрд╛рд▓рддреЛ. рдЦрд░реА file:

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

Campus рд╡рд░ packet рдХреБрдареЗ рдЪрд╛рд▓реВ рд╢рдХрддреЛ рд╣реЗ рддреАрди рдЧреЛрд╖реНрдЯреА рдард░рд╡рддрд╛рдд:

  1. Corridor рдлрд▓рдХ ЁЯкз (route tables). рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧрд╛рд▓рд╛ рдиреЗрдордХрд╛ рдПрдХрдЪ рдлрд▓рдХ рдЕрд╕рддреЛ, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд▓рдХрд╛рдЪреА рдкрд╣рд┐рд▓реА рдУрд│ рд╕рд╛рд░рдЦреАрдЪ рдЕрд╕рддреЗ: "10.0.0.0/16 тЖТ local" (campus рд╡рд░ рдХреБрдареЗрд╣реА, рдлрдХреНрдд рдЪрд╛рд▓рдд рдЬрд╛). рддреНрдпрд╛рдирдВрддрд░ рдХрд╛рдп рдпреЗрддреЗ рддреЗ рд╡рд┐рднрд╛рдЧрд╛рдЪрд╛ рд╕реНрд╡рднрд╛рд╡ рдард░рд╡рддреЗ: "0.0.0.0/0 тЖТ gate" = public рд╡рд┐рднрд╛рдЧ; "0.0.0.0/0 тЖТ postbox" = рдмрд╛рд╣реЗрд░ рдЯрдкрд╛рд▓ рдкрд╛рдард╡реВ рд╢рдХрдгрд╛рд░рд╛ private рд╡рд┐рднрд╛рдЧ; рджреБрд╕рд░реА рдУрд│рдЪ рдирд╛рд╣реА = рдлрдХреНрдд campus рд╢реА рдмреЛрд▓рдгрд╛рд░рд╛ рдмрдВрджрд┐рд╕реНрдд рд╡рд┐рднрд╛рдЧ.
  2. рд╣реЙрд▓рд╡реЗрдЪреЗ рдирд┐рдпрдо ЁЯЪж (NACLs тАФ network ACLs). рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рджрд╛рд░рд╛рд╡рд░рдЪрд╛ рдирд┐рдпрдордлрд▓рдХ: рдХреНрд░рдорд╛рдВрдХрд┐рдд рдУрд│реА, рд╡рд░реВрди рдЦрд╛рд▓реА рддрдкрд╛рд╕рд▓реЗрд▓реНрдпрд╛, allow рдХрд┐рдВрд╡рд╛ deny, рдЖрдгрд┐ stateless тАФ рддреНрдпрд╛рдВрдирд╛ рд╕рдВрднрд╛рд╖рдгреЗ рдЖрдард╡рдд рдирд╛рд╣реАрдд. Port 443 рд╡рд░ request рдЖрдд рдШреЗрддрд▓реА рддрд░ рдЙрддреНрддрд░ "ephemeral" ports (1024тАУ65535) рд╡рд░реВрди рдмрд╛рд╣реЗрд░ рдЬрд╛рдК рджреЗрдгреЗрд╣реА рднрд╛рдЧ рдЖрд╣реЗ, рдирд╛рд╣реАрддрд░ рдЙрддреНрддрд░ рджрд╛рд░рд╛рддрдЪ рдЕрдбрддреЗ. Default рдлрд▓рдХ рдореНрд╣рдгрддреЛ рд╕рдЧрд│реЗ allow, рдЖрдгрд┐ 95% campuses рддреЛ рддрд╕рд╛рдЪ рдареЗрд╡рддрд╛рдд. рдмрд╛рдХрд╛рд╡рд░рдЪреНрдпрд╛ рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрд╢реА рддреБрд▓рдирд╛ рдХрд░рд╛ (security groups, рдзрдбрд╛ 10): stateful, рдлрдХреНрдд-allow, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдХрд╛рд╕рд╛рдареА. рдиреЗрд╣рдореА рдЖрдзреА SGs; NACLs рдлрдХреНрдд "рд╣реА IP range рдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд рдХрдзреАрдЪ рдпреЗрдгрд╛рд░ рдирд╛рд╣реА" рд╕рд╛рд░рдЦреНрдпрд╛ рдвреЛрдмрд│ рдЕрдбрдерд│реНрдпрд╛рдВрд╕рд╛рдареА.
  3. рдЦрд╛рдЬрдЧреА corridors ЁЯЪЗ (VPC endpoints). Locker room (S3) campus рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдЖрд╣реЗ тАФ рдореНрд╣рдгреВрди private рдмрд╛рдХрд╛рд▓рд╛ рдПрдХ file рдЖрдгрдгреНрдпрд╛рд╕рд╛рдареАрд╕реБрджреНрдзрд╛ рд╕рд╣рд╕рд╛ рдЯрдкрд╛рд▓рдкреЗрдЯреА (NAT, $$) рд▓рд╛рдЧрддреЗ. Gateway endpoint corridor рдлрд▓рдХрд╛рд╡рд░ рдПрдХ рдУрд│ рдЬреЛрдбрддреЛ: "S3 рдЪреЗ рдкрддреНрддреЗ тЖТ рдЦрд╛рдЬрдЧреА corridor" тАФ gate рдирд╛рд╣реА, рдЯрдкрд╛рд▓рдкреЗрдЯреА рдирд╛рд╣реА, рд╢реБрд▓реНрдХ рдирд╛рд╣реА. Interface endpoints (PrivateLink) рдореНрд╣рдгрдЬреЗ рдЗрддрд░ services (Secrets Manager, ECR, SSMтАж) рдкрд░реНрдпрдВрддрдЪреНрдпрд╛ рдЦрд╛рдЬрдЧреА рдлреЛрди рд▓рд╛рдЗрдиреНрд╕: рддреБрдордЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рддрд▓реЗ private IP рдЕрд╕рд▓реЗрд▓реЗ network card, рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ рдЦрд░реНрдЪ.

рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рджреЛрди campuses рдирд╛ рдмреЛрд▓рд╛рд╡реЗ рд▓рд╛рдЧрддреЗ: peering (рджреЛрди VPCs рдордзрд▓рд╛ рдкрд╛рджрдЪрд╛рд░реА рдкреВрд▓, transit рдирд╛рд╣реА) рдХрд┐рдВрд╡рд╛ Transit Gateway (рдЕрдиреЗрдХ campuses рд╕рд╛рдареА рдордзреНрдпрд╡рд░реНрддреА skywalk hub). рджреЛрдиреНрд╣реА рдореНрд╣рдгрдЬреЗ рдлрдХреНрдд corridor рдлрд▓рдХрд╛рдВрд╡рд░рдЪреНрдпрд╛ рдЖрдгрдЦреА рдУрд│реА.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    desk["ЁЯЦея╕П private desk 10.0.101.7"]
    rt["ЁЯкз corridor sign (route table)<br/>10.0.0.0/16 тЖТ local<br/>S3 prefix list тЖТ endpoint<br/>0.0.0.0/0 тЖТ NAT"]
    vpce["ЁЯЪЗ gateway endpoint<br/>private corridor, free"]
    s3["ЁЯЧДя╕П S3 locker room"]
    nacl["ЁЯЪж NACL at the wing door<br/>stateless ┬╖ numbered"]
    desk -->|"1 packet leaves"| nacl -->|"2 allowed"| rt
    rt -->|"3 S3? тЖТ corridor"| vpce --> s3

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

"рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрдд рдирд╛рд╣реА" tickets рдкреИрдХреА 90% corridor рдлрд▓рдХ рдЖрдгрд┐ рд╣реЙрд▓рд╡реЗрдЪреЗ рдирд┐рдпрдо рдЕрд╕рддрд╛рдд, рдЖрдгрд┐ "рдпрд╛ рдорд╣рд┐рдиреНрдпрд╛рдд NAT $200 рдХрд╛" рдкреИрдХреА 90% рдореНрд╣рдгрдЬреЗ рдЦрд╛рдЬрдЧреА corridor рдиреЗ рдЬрд╛рдпрд▓рд╛ рд╣рд╡рд╛ рд╣реЛрддрд╛ рдЕрд╕рд╛ traffic. рд╣рд╛ рдзрдбрд╛ рджреЛрдиреНрд╣реА рдЧреВрдврд╛рдВрдирд╛ рддреАрди рдУрд│реАрдВрдЪреНрдпрд╛ checklist рдордзреНрдпреЗ рдмрджрд▓рддреЛ: рдлрд▓рдХ тЖТ NACL тЖТ SG.

ЁЯФз рдХрд╕реЗ

# read a subnet's corridor sign and hallway rules:
aws ec2 describe-route-tables --filters Name=association.subnet-id,Values=$SUBNET \
  --query 'RouteTables[].Routes[].{dst:DestinationCidrBlock,via:GatewayId||NatGatewayId||VpcEndpointId}'
aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$SUBNET \
  --query 'NetworkAcls[].Entries[].{n:RuleNumber,act:RuleAction,egress:Egress,cidr:CidrBlock}'

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~10 рдорд┐рдирд┐рдЯреЗ, рдореЛрдлрдд)

cd vpc && terraform apply          # lesson 13's campus + endpoints.tf
# the private wing's sign now has an S3 line pointing at the endpoint тАФ read it:
aws ec2 describe-route-tables --filters Name=vpc-id,Values=$(terraform output -raw vpc_id) \
  --query 'RouteTables[].Routes[?VpcEndpointId!=null]'
terraform destroy

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

Private route table рдордзреНрдпреЗ S3 prefix list рд╕рд╛рдареА vpce-тАж рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рдгрд╛рд░рд╛ route рджрд┐рд╕рддреЛ; NAT рдмрдВрдж рдЕрд╕рддрд╛рдирд╛рд╣реА private рдмрд╛рдХрд╛рд╡рд░реВрди aws s3 ls рдЪрд╛рд▓рддреЗ.

ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛

рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реА рдирд╛рд╣реА тАФ рд╣рд╛ рдзрдбрд╛ рдореЛрдлрдд рдЖрд╣реЗ ЁЯОЙ

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

тПня╕П рдкреБрдвреЗ

S3 рд╕реЛрдбреВрди рдмрд╛рдХреА рд╕рдЧрд│реНрдпрд╛рд╕рд╛рдареА рдлрд▓рдХрд╛рд╡рд░ "0.0.0.0/0 тЖТ postbox" рд▓рд┐рд╣рд┐рд▓реЗ рд╣реЛрддреЗ. рдЖрддрд╛ рдЯрдкрд╛рд▓рдкреЗрдЯреАрдЪреНрдпрд╛ рдЖрдд тАФ рдЖрдгрд┐ рддрд┐рдЪреНрдпрд╛ bill рдордзреНрдпреЗ тАФ рдбреЛрдХрд╛рд╡рдгреНрдпрд╛рдЪреА рд╡реЗрд│. рдзрдбрд╛ 22: NAT gateway.

ЁЯкз Lesson 21 тАФ Subnet networking: corridor signs, hallway rules, private corridors

ЁЯУН You are here: Lesson 21 of 25 тАФ Part 4 begins! ┬╖ Previous: lesson-20-the-bill ┬╖ Next: lesson-22-nat-gateway


ЁЯУж What's in this branch

Lessons 01тАУ21. Lesson 13 drew the campus; this lesson walks its corridors with a torch. Real file:

ЁЯзТ Explain like I'm 5

Three things decide where a packet can walk on the campus:

  1. Corridor signs ЁЯкз (route tables). Every wing has exactly one sign, and every sign starts with the same first line: "10.0.0.0/16 тЖТ local" (anywhere on campus, just walk). What comes after decides the wing's personality: "0.0.0.0/0 тЖТ gate" = public wing; "0.0.0.0/0 тЖТ postbox" = private wing that can mail out; no second line = a sealed wing that only talks to the campus.
  2. Hallway rules ЁЯЪж (NACLs тАФ network ACLs). A rule board at the wing's door: numbered lines, checked top to bottom, allow or deny, and stateless тАФ they don't remember conversations. Let a request in on port 443 and you must ALSO let the reply out on the "ephemeral" ports (1024тАУ65535), or the answer is stopped at the door. The default board says allow-everything, and 95% of campuses leave it that way. Compare the guest list at the desk (security groups, lesson 10): stateful, allow-only, per desk. SGs first, always; NACLs for blunt blocks like "this IP range never enters the wing."
  3. Private corridors ЁЯЪЗ (VPC endpoints). The locker room (S3) is outside the campus тАФ so a private desk normally needs the postbox (NAT, $$) just to fetch a file. A gateway endpoint adds a line to the corridor sign: "S3's addresses тЖТ the private corridor" тАФ no gate, no postbox, no charge. Interface endpoints (PrivateLink) are private phone lines to other services (Secrets Manager, ECR, SSMтАж): a network card in your wing with a private IP, hourly cost.

And when two campuses must talk: peering (a footbridge between two VPCs, no transit) or a Transit Gateway (the central skywalk hub for many campuses). Both are just more lines on the corridor signs.

ЁЯЧ║я╕П Diagram

flowchart LR
    desk["ЁЯЦея╕П private desk 10.0.101.7"]
    rt["ЁЯкз corridor sign (route table)<br/>10.0.0.0/16 тЖТ local<br/>S3 prefix list тЖТ endpoint<br/>0.0.0.0/0 тЖТ NAT"]
    vpce["ЁЯЪЗ gateway endpoint<br/>private corridor, free"]
    s3["ЁЯЧДя╕П S3 locker room"]
    nacl["ЁЯЪж NACL at the wing door<br/>stateless ┬╖ numbered"]
    desk -->|"1 packet leaves"| nacl -->|"2 allowed"| rt
    rt -->|"3 S3? тЖТ corridor"| vpce --> s3

тЭУ What

ЁЯдФ Why

"Can't reach it" tickets are 90% corridor signs and hallway rules, and "why is NAT $200 this month" is 90% traffic that should have taken a private corridor. This lesson turns both from mysteries into a three-line checklist: sign тЖТ NACL тЖТ SG.

ЁЯФз How

# read a subnet's corridor sign and hallway rules:
aws ec2 describe-route-tables --filters Name=association.subnet-id,Values=$SUBNET \
  --query 'RouteTables[].Routes[].{dst:DestinationCidrBlock,via:GatewayId||NatGatewayId||VpcEndpointId}'
aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=$SUBNET \
  --query 'NetworkAcls[].Entries[].{n:RuleNumber,act:RuleAction,egress:Egress,cidr:CidrBlock}'

ЁЯзк Try it (~10 min, free)

cd vpc && terraform apply          # lesson 13's campus + endpoints.tf
# the private wing's sign now has an S3 line pointing at the endpoint тАФ read it:
aws ec2 describe-route-tables --filters Name=vpc-id,Values=$(terraform output -raw vpc_id) \
  --query 'RouteTables[].Routes[?VpcEndpointId!=null]'
terraform destroy

тЬЕ Verify тАФ what you should see

the private route table shows a route for the S3 prefix list pointing at vpce-тАж; aws s3 ls from a private desk works with NAT disabled.

ЁЯз╣ Clean up тАФ do not leave running

nothing to clean up тАФ this lesson is free ЁЯОЙ

тЪая╕П Common mistakes

тПня╕П Next

The sign said "0.0.0.0/0 тЖТ postbox" for everything that isn't S3. Time to look inside the postbox тАФ and its bill. Lesson 22: the NAT gateway.

тЖР Previousthe billNext тЖТnat gateway

This page is the lesson's README from the lesson-21-subnet-networking branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.