ЁЯЪк рдзрдбрд╛ 10 тАФ Security groups: рджреНрд╡рд╛рд░рдкрд╛рд▓рд╛рдЪреА рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреА рдпрд╛рджреА
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 10 ┬╖ рдорд╛рдЧреЗ: lesson-09-connecting ┬╖ рдкреБрдвреЗ: lesson-11-ebs-snapshots-ami
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ09, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд: рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдХрд╛рдЪреА firewall тАФ security groups тАФ рдЖрдгрд┐ рддреЗ рдкрдЯрдХрди рд╕рдордЬрд╛рд╡рдгрд╛рд░реЗ рддреАрди рдирд┐рдпрдо. рдЦрд░реА file:
- ec2/ec2.tf тАФ рдЯрд┐рдкрд╛ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛
aws_security_groupblock
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдХрд╛рд▓рд╛ рдПрдХ рджреНрд╡рд╛рд░рдкрд╛рд▓ ЁЯзН рдорд┐рд│рддреЛ, рдЬреЛ рдХреЛрдгрддреАрд╣реА рдареЛрдард╛рд╡рдгреА рдмрд╛рдХрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрдгреНрдпрд╛рдЖрдзреА рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреА рдпрд╛рджреА рддрдкрд╛рд╕рддреЛ. рдЖрдкрд▓реА рдпрд╛рджреА (ec2.tf рдордзреВрди) рдЕрд╢реА рдЖрд╣реЗ:
тЬЕ рджрд╛рд░ 22 (SSH) тАФ рдлрдХреНрдд рдорд╛рдЭреНрдпрд╛ рдШрд░реВрди рдЖрд▓реЗрд▓реЗ рдкрд╛рд╣реБрдгреЗ (
1.2.3.4/32) тЬЕ рджрд╛рд░ 80 (web) тАФ рдХреБрдареВрдирд╣реА рдЖрд▓реЗрд▓реЗ рдкрд╛рд╣реБрдгреЗ (0.0.0.0/0) тЭМ рдЗрддрд░ рдХреЛрдгрддреЗрд╣реА рджрд╛рд░ тАФ рдпрд╛рджреАрдд рдирд╛рд╣реА = рд╢рд╛рдВрддрддрд╛.
рдпрд╛ рджреНрд╡рд╛рд░рдкрд╛рд▓рд╛рдЪреНрдпрд╛ рддреАрди рд╕рд╡рдпреА:
- рдореБрд│рд╛рдд рдЙрддреНрддрд░ рд╢рд╛рдВрддрддрд╛ рдЕрд╕рддреЗ. ЁЯдл Inbound рдпрд╛рджреАрдд рдиреЛрдВрдж рдирд╛рд╣реА = рдмрд╛рдХрд╛рд▓рд╛ рдареЛрдард╛рд╡рдгреА рдРрдХреВрд╣реА рдпреЗрдд рдирд╛рд╣реА. рддреБрдореНрд╣реА рджрд╛рд░реЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдЙрдШрдбрддрд╛; рдЬреЗ рджрд╛рд░ рдХрдзреА рдЙрдШрдбрд▓реЗрдЪ рдирд╛рд╣реА рддреЗ рдмрдВрдж рдХрд░рд╛рдпрд▓рд╛ рддреБрдореНрд╣реА рд╡рд┐рд╕рд░реВ рд╢рдХрдд рдирд╛рд╣реА.
- рддреНрдпрд╛рд▓рд╛ рд╕рдВрд╡рд╛рдж рд▓рдХреНрд╖рд╛рдд рд░рд╛рд╣рддрд╛рдд (stateful). рддреНрдпрд╛рдиреЗ рдПрдЦрд╛рджреА request рдЖрдд рдпреЗрдК рджрд┐рд▓реА, рддрд░ рддрд┐рдЪреЗ рдЙрддреНрддрд░ рддреЛ рдЖрдкреЛрдЖрдк рдмрд╛рд╣реЗрд░ рдЬрд╛рдК рджреЗрддреЛ тАФ рдЙрд▓рдЯреНрдпрд╛ рдирд┐рдпрдорд╛рдВрдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.
- рддреЛ рдЗрддрд░ рджреНрд╡рд╛рд░рдкрд╛рд▓рд╛рдВрдирд╛ рдУрд│рдЦреВ рд╢рдХрддреЛ. рдПрдЦрд╛рджрд╛ рдирд┐рдпрдо рдореНрд╣рдгреВ рд╢рдХрддреЛ "
app-sgbadge рдШрд╛рддрд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрд╛рдХрдбреВрдирд╣реА 5432 allow рдХрд░рд╛" тАФ groups groups рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛рдд. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ "рдлрдХреНрдд app рдмрд╛рдХрдЪ database рдмрд╛рдХрд╛рдВрд╢реА рдмреЛрд▓реВ рд╢рдХрддрд╛рдд" рд╣реЗ рдПрдХрд╣реА IP рдкрддреНрддрд╛ рди рд╡рд╛рдкрд░рддрд╛ рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рддреЗ. (k8s course рдордзрд▓реА ALB тЖТ node рдЬреЛрдбрдгреА рдиреЗрдордХреА рдЕрд╢реАрдЪ рдЪрд╛рд▓рддреЗ.)
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
you["ЁЯзСтАНЁЯТ╗ you<br/>your IP"]
net["ЁЯМН the internet"]
subgraph gate["ЁЯзН security group - the guest list"]
r1["тЬЕ 22 from 1.2.3.4/32"]
r2["тЬЕ 80 from 0.0.0.0/0"]
r3["тЭМ everything else: silence"]
end
desk["ЁЯЦея╕П the desk<br/>never hears denied knocks"]
you -->|"1 ssh тЬЕ"| gate
net -->|"2 port 80 тЬЕ ┬╖ port 22 тЭМ"| gate
gate --> desk
desk -.->|"3 replies auto-allowed<br/>(stateful)"| net
тЭУ рдХрд╛рдп
- Security group = stateful, instance-рдкрд╛рддрд│реАрд╡рд░рдЪрд╛, рдлрдХреНрдд allow рдХрд░рдгрд╛рд░рд╛. Instance рдЪреНрдпрд╛ network interface рд▓рд╛ рдЬреЛрдбрд▓реЗрд▓рд╛; рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛рдЪ рдмрджрд▓рддрд╛ рдпреЗрддреЛ (рдмрджрд▓ рд▓рдЧреЗрдЪ рд▓рд╛рдЧреВ рд╣реЛрддрд╛рдд тАФ reboot рдирд╛рд╣реА).
- CIDR notation:
1.2.3.4/32= рдиреЗрдордХрд╛ рдПрдХ рдкрддреНрддрд╛;0.0.0.0/0= рд╕рдЧрд│реЗ./24= 256 рдкрддреНрддреЗ./numberрд╕рд╛рдВрдЧрддреЗ рдХреА рд╕реБрд░реБрд╡рд╛рддреАрдЪреЗ рдХрд┐рддреА bits рдкрдХреНрдХреЗ рдЖрд╣реЗрдд. - NACLs (рджреБрд╕рд░реА firewall): subnet-рдкрд╛рддрд│реАрд╡рд░рдЪреА, stateless, Deny рдирд┐рдпрдо рдЕрд╕рд▓реЗрд▓реА тАФ рдмрд╛рдХрд╛рдЪреНрдпрд╛ рджреНрд╡рд╛рд░рдкрд╛рд▓рд╛рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рдЗрдорд╛рд░рддреАрдЪреЗ рдХреБрдВрдкрдг. Default NACL рд╕рдЧрд│реЗ рдЬрд╛рдК рджреЗрддреЗ; рдмрд╣реБрддреЗрдХ teams SGs рдиреЗ traffic рд▓рд╛ рдЖрдХрд╛рд░ рджреЗрддрд╛рдд рдЖрдгрд┐ NACLs рдирд╛ рд╣рд╛рдд рд▓рд╛рд╡рдд рдирд╛рд╣реАрдд.
- рдХреНрд▓рд╛рд╕рд┐рдХ рдкрд╛рдк:
22 from 0.0.0.0/0тАФ рд╕рдВрдкреВрд░реНрдг рдкреГрдереНрд╡реАрд╕рд╛рдареА SSH рдЙрдШрдбрд╛. Scanners рддреЛ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдд рд╢реЛрдзрддрд╛рдд. (рдЖрдкрд▓рд╛ tf рддреБрдореНрд╣рд╛рд▓рд╛ рдореБрджреНрджрд╛рдо рддреБрдордЪрд╛ IP рджреНрдпрд╛рдпрд▓рд╛ рд▓рд╛рд╡рддреЛ.)
ЁЯдФ рдХрд╛
SGs рд╣реА рддреБрдореНрд╣реА рдХрдзреАрд╣реА deploy рдХрд░рд╛рд▓ рддреА рд╕рд░реНрд╡рд╛рдд рд╕реНрд╡рд╕реНрдд рд╕реБрд░рдХреНрд╖рд╛ рдЖрд╣реЗ: default-deny рдЖрдгрд┐ рд╕реНрдкрд╖реНрдЯ рджрд╛рд░реЗ рдХреЛрдгрддреЗрд╣реА software рдЪрд╛рд▓рдгреНрдпрд╛рдЖрдзреАрдЪ рд╣рд▓реНрд▓реНрдпрд╛рдВрдЪреЗ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХрд╛рдвреВрди рдЯрд╛рдХрддрд╛рдд. рдЖрдгрд┐ group-references рд╣реЗрддреВ рд╡рд╛рдЪрдиреАрдп рдХрд░рддрд╛рдд тАФ "db app-sg рд▓рд╛ рд╕реНрд╡реАрдХрд╛рд░рддреЛ" рд╣реЗ firewall рдордзреНрдпреЗрдЪ architecture рдЪреЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХрд░рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~10 рдорд┐рдирд┐рдЯреЗ, ~1┬в)
cd ec2 && terraform apply -var my_ip=$(curl -s ifconfig.me)/32
IP=$(terraform output -raw public_ip)
curl -m 5 http://$IP # door 80: open to all тЖТ answers ЁЯОЙ
nc -zv -w 5 $IP 22 # door 22 from YOUR IP тЖТ open
nc -zv -w 5 $IP 3306 # random door тЖТ TIMEOUT, not "refused":
# the gatekeeper never even answered ЁЯдл
# see the live guest list:
aws ec2 describe-security-groups --filters Name=group-name,Values=school-desk-sg \
--query 'SecurityGroups[0].IpPermissions[].{port:FromPort,from:IpRanges[0].CidrIp}'
# feel "changes apply instantly": remove the port-80 ingress in ec2.tf,
# terraform apply, curl again тЖТ silence. put it back. ЁЯШИ
terraform destroy -var my_ip=$(curl -s ifconfig.me)/32 # ЁЯз╣
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
nc -zv PUBLIC_IP 80 connect рд╣реЛрддреЛ; рджреБрд╕рд▒реНрдпрд╛ IP рд╡рд░реВрди nc -zv PUBLIC_IP 22 time out рд╣реЛрддреЛ (рд╢рд╛рдВрддрддрд╛, рдирдХрд╛рд░ рдирд╛рд╣реА).
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдХрд╛рд╣реАрд╣реА рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛
terraform destroy
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- 'рдЪрд╛рд▓рд╛рд╡реЗ рдореНрд╣рдгреВрди' рдкреНрд░рддреНрдпреЗрдХ port рд╡рд░ 0.0.0.0/0 рд▓рд╛ allow рдХрд░рдгреЗ
- outbound рдирд┐рдпрдо рдЙрддреНрддрд░реЗ рдЕрдбрд╡рддреАрд▓ рдЕрд╢реА рдЕрдкреЗрдХреНрд╖рд╛ тАФ SGs stateful рдЖрд╣реЗрдд
- рдПрдХрдореЗрдХрд╛рдВрдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрдгрд╛рд░реЗ рджреЛрди SGs рдЖрдгрд┐ reception рдЪрд╛ рдХреЛрдгрддрд╛ рд╣реЗ рд╡рд┐рд╕рд░рдгреЗ
тПня╕П рдкреБрдвреЗ
рдмрд╛рдХ рдирд┐рдШреВрди рдЧреЗрд▓рд╛ рдХреА рдмрд╛рдХрд╛рдЪреНрдпрд╛ рд╕рд╛рдорд╛рдирд╛рдЪреЗ рдХрд╛рдп рд╣реЛрддреЗ? рдбреНрд░реЙрд╡рд░, photocopies, рдЖрдгрд┐ рдмрд╛рдХрд╛рдВрдЪреЗ templates: EBS, snapshots & AMIs.
git checkout lesson-11-ebs-snapshots-ami