ЁЯкз рдзрдбрд╛ 21 тАФ Subnet networking: corridor рдлрд▓рдХ, рд╣реЙрд▓рд╡реЗрдЪреЗ рдирд┐рдпрдо, рдЦрд╛рдЬрдЧреА corridors
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 25 рдкреИрдХреА рдзрдбрд╛ 21 тАФ рднрд╛рдЧ 4 рд╕реБрд░реВ! ┬╖ рдорд╛рдЧреАрд▓: lesson-20-the-bill ┬╖ рдкреБрдвреАрд▓: lesson-22-nat-gateway
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ21. рдзрдбрд╛ 13 рдиреЗ campus рдХрд╛рдврд▓рд╛; рд╣рд╛ рдзрдбрд╛ рд╣рд╛рддрд╛рдд torch рдШреЗрдКрди рддреНрдпрд╛рдЪреНрдпрд╛ corridors рдордзреВрди рдЪрд╛рд▓рддреЛ. рдЦрд░реА file:
- vpc/endpoints.tf тАФ locker room (S3) рдкрд░реНрдпрдВрддрдЪрд╛ рдЦрд╛рдЬрдЧреА corridor, рдореЛрдлрдд
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
Campus рд╡рд░ packet рдХреБрдареЗ рдЪрд╛рд▓реВ рд╢рдХрддреЛ рд╣реЗ рддреАрди рдЧреЛрд╖реНрдЯреА рдард░рд╡рддрд╛рдд:
- 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 рд╢реА рдмреЛрд▓рдгрд╛рд░рд╛ рдмрдВрджрд┐рд╕реНрдд рд╡рд┐рднрд╛рдЧ.
- рд╣реЙрд▓рд╡реЗрдЪреЗ рдирд┐рдпрдо ЁЯЪж (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 рдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд рдХрдзреАрдЪ рдпреЗрдгрд╛рд░ рдирд╛рд╣реА" рд╕рд╛рд░рдЦреНрдпрд╛ рдвреЛрдмрд│ рдЕрдбрдерд│реНрдпрд╛рдВрд╕рд╛рдареА.
- рдЦрд╛рдЬрдЧреА 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
тЭУ рдХрд╛рдп
- рдкреНрд░рддреНрдпреЗрдХ subnet рд▓рд╛ рдПрдХ route table (рдПрдХ table рдЕрдиреЗрдХ subnets рдирд╛ рд╕реЗрд╡рд╛ рджреЗрдК
рд╢рдХрддреЗ). рд╕рд░реНрд╡рд╛рдд рдиреЗрдордХрд╛ prefix рдЬрд┐рдВрдХрддреЛ;
localрдХрд╛рдврддрд╛ рдпреЗрдд рдирд╛рд╣реА. - NACL vs SG: subnet vs instance ┬╖ stateless vs stateful ┬╖ allow+deny vs рдлрдХреНрдд-allow ┬╖ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдирд┐рдпрдо vs рдПрдХ рд╕рдВрдЪ. Default NACL = рд╕рдЧрд│реЗ allow; default SG = рд╕рдЧрд│реЗ inbound deny.
- Gateway endpoints: рдлрдХреНрдд S3 рдЖрдгрд┐ DynamoDB, рдореЛрдлрдд, route-table рд╡рд░ рдЖрдзрд╛рд░рд┐рдд. Interface endpoints: ~рдмрд╛рдХреА рд╕рдЧрд│реЗ, рддреБрдордЪреНрдпрд╛ subnet рдордзреНрдпреЗ ENI, private DNS, рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ + рдкреНрд░рддрд┐-GB. Private EKS nodes рд╡рд░реВрди ECR pulls рд╕рд╣рд╕рд╛ рддреАрди endpoints рд╡рд░реВрди рдЬрд╛рддрд╛рдд (ecr.api, ecr.dkr, s3 gateway).
- Peering transitive рдирд╛рд╣реА (AтЖФB рдЖрдгрд┐ BтЖФC тЙа AтЖФC); Transit Gateway рд╣реЗ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рддреЗ рд╕реЛрдбрд╡рдгрд╛рд░реЗ hub рдЖрд╣реЗ.
ЁЯдФ рдХрд╛
"рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрдд рдирд╛рд╣реА" 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 рдЪрд╛рд▓рддреЗ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛
рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реА рдирд╛рд╣реА тАФ рд╣рд╛ рдзрдбрд╛ рдореЛрдлрдд рдЖрд╣реЗ ЁЯОЙ
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- NACL 443 рдЖрдд рдпреЗрдК рджреЗрддреЛ рдкрдг ephemeral ports рдмрд╛рд╣реЗрд░ рдЬрд╛рдК рджреЗрдд рдирд╛рд╣реА тАФ stateless рдЪрд╛рд╡рддреЛ
- Peering AтЖФB, BтЖФC рдХрд░реВрди AтЖФC рдЪреА рдЕрдкреЗрдХреНрд╖рд╛ тАФ transitive рдирд╛рд╣реА
- Endpoint рдореЛрдлрдд рдиреЗрдИрд▓ рдЕрд╢рд╛ S3 traffic рд╕рд╛рдареА NAT рдЪреЗ рдкреИрд╕реЗ рднрд░рдгреЗ
тПня╕П рдкреБрдвреЗ
S3 рд╕реЛрдбреВрди рдмрд╛рдХреА рд╕рдЧрд│реНрдпрд╛рд╕рд╛рдареА рдлрд▓рдХрд╛рд╡рд░ "0.0.0.0/0 тЖТ postbox" рд▓рд┐рд╣рд┐рд▓реЗ рд╣реЛрддреЗ. рдЖрддрд╛ рдЯрдкрд╛рд▓рдкреЗрдЯреАрдЪреНрдпрд╛ рдЖрдд тАФ рдЖрдгрд┐ рддрд┐рдЪреНрдпрд╛ bill рдордзреНрдпреЗ тАФ рдбреЛрдХрд╛рд╡рдгреНрдпрд╛рдЪреА рд╡реЗрд│. рдзрдбрд╛ 22: NAT gateway.