Modul 11 — Cloud platformy
54. AWS síťování: VPC, Security Groups, Load Balancery
Jak si v AWS postavit izolovanou síť pro vlastní zdroje — VPC, podsítě, Security Groups a rozložení zátěže přes Load Balancer.
Úvod a kontext
Minulá lekce ukázala, jak spustit EC2 instanci a řídit oprávnění přes
IAM. Instance ale nežije ve vzduchoprázdnu — potřebuje síť, ve které
běží, pravidla, kdo se k ní smí připojit, a často i mechanismus, jak
rozložit provoz mezi víc instancí. Tato lekce navazuje na obecné
základy TCP/IP a firewallů z Modulu 2 a ukazuje jejich konkrétní podobu
v AWS.
Teorie
VPC — Virtual Private Cloud
VPC je logicky izolovaná virtuální síť v rámci AWS účtu — vlastní
adresní rozsah (CIDR blok, např. 10.0.0.0/16), kterou si sami
navrhnete a rozdělíte na podsítě. Každý AWS účet má výchozí VPC, ale
produkční nasazení si typicky vytváří vlastní, přesně navrženou.
Podsítě, veřejné a privátní
VPC se dělí na subnety v konkrétních dostupnostních zónách (AZ).
Zásadní rozlišení:
- Veřejná podsíť — má trasu do Internet Gateway, takže
instance v ní mohou mít veřejnou IP a komunikovat přímo s
internetem (typicky load balancery, bastion hosty). - Privátní podsíť — nemá přímou trasu do internetu; odchozí provoz
(např. stažení balíčku) jde přes NAT Gateway umístěnou ve
veřejné podsíti, příchozí provoz zvenčí není možný vůbec. Sem patří
aplikační servery a databáze — nemají důvod být přímo dostupné
z internetu.
Typický vzor: load balancer ve veřejné podsíti přijímá provoz
z internetu a přeposílá ho aplikačním serverům v privátní podsíti.
Security Groups vs. Network ACLs
- Security Group (SG) — stavový (stateful) firewall na úrovni
síťového rozhraní instance. "Stavový" znamená, že pokud povolíte
příchozí spojení, odpovídající odchozí provoz je automaticky
povolen bez zvláštního pravidla. SG obsahuje jen pravidla typu
"povolit" (allow) — cokoliv jinde je implicitně zakázáno. - Network ACL (NACL) — bezstavový (stateless) firewall na úrovni
celé podsítě, kde se musí explicitně povolit odchozí i příchozí
provoz zvlášť, a lze i explicitně zakazovat (deny). NACL se používá
méně často — pro jemné pravidlo na úrovni jednotlivé instance
postačí SG.
Load Balancer
Elastic Load Balancer (ELB) rozkládá příchozí provoz mezi víc
cílových instancí a průběžně kontroluje jejich zdraví (health checks)
— nezdravé instance vyřadí z rotace. AWS nabízí několik typů:
- Application Load Balancer (ALB) — pracuje na úrovni HTTP/HTTPS
(vrstva 7), umí směrovat podle URL cesty nebo hlavičky, ukončovat
TLS. - Network Load Balancer (NLB) — pracuje na úrovni TCP/UDP (vrstva
4), extrémně nízká latence a vysoká propustnost, vhodný pro
neHTTP protokoly.
Praktický příklad
Založení minimální VPC se dvěma podsítěmi a security group pro webový
server přes AWS CLI:
# vytvoření VPC
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query 'Vpc.VpcId' --output text
# → vpc-0123456789abcdef0
# veřejná podsíť pro load balancer
aws ec2 create-subnet \
--vpc-id vpc-0123456789abcdef0 \
--cidr-block 10.0.1.0/24 \
--availability-zone eu-central-1a
# privátní podsíť pro aplikační servery
aws ec2 create-subnet \
--vpc-id vpc-0123456789abcdef0 \
--cidr-block 10.0.2.0/24 \
--availability-zone eu-central-1a
# security group povolující HTTP/HTTPS zvenčí a SSH jen z konkrétní IP
aws ec2 create-security-group \
--group-name web-sg \
--description "Webovy server" \
--vpc-id vpc-0123456789abcdef0
aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--protocol tcp --port 443 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--protocol tcp --port 22 --cidr 203.0.113.10/32
Vytvoření Application Load Balanceru nad dvěma instancemi v privátní
podsíti:
aws elbv2 create-load-balancer \
--name aplikace-lb \
--subnets subnet-verejna1 subnet-verejna2 \
--security-groups sg-lb
aws elbv2 create-target-group \
--name aplikace-tg \
--protocol HTTP --port 8080 \
--vpc-id vpc-0123456789abcdef0 \
--health-check-path /health
aws elbv2 register-targets \
--target-group-arn arn:aws:elasticloadbalancing:...:targetgroup/aplikace-tg/... \
--targets Id=i-0aaa111 Id=i-0bbb222
Load balancer díky --health-check-path /health pravidelně dotazuje
tento endpoint na obou instancích a instance, které neodpoví
očekávaným stavovým kódem, dočasně vyřadí z rozkládání provozu.
Shrnutí
VPC vymezuje vlastní izolovanou síť s adresním rozsahem, kterou dělíme
na veřejné podsítě (s trasou do internetu přes Internet Gateway) a
privátní podsítě (odchozí provoz jen přes NAT Gateway). Security
Groups jsou stavový firewall na úrovni instance a jsou primárním
nástrojem řízení přístupu; Network ACL slouží pro hrubší pravidla na
úrovni podsítě. Load Balancer (ALB pro HTTP, NLB pro TCP/UDP) rozkládá
provoz mezi zdravé instance na základě health checků.
Kontrolní otázky
- Proč mají aplikační servery a databáze typicky ležet v privátní, ne
veřejné podsíti? - Vysvětlete rozdíl mezi stavovým Security Group a bezstavovým
Network ACL. - Kdy zvolíte Application Load Balancer a kdy Network Load Balancer?
- Mini cvičení: navrhněte (slovně nebo jako diagram) rozložení VPC se
dvěma dostupnostními zónami pro webovou aplikaci s databází tak, aby
výpadek jedné zóny neshodil celou aplikaci.
Lekce na sebe nejsou zamčené — libovolnou lekci můžete otevřít i označit jako hotovou v jakémkoliv pořadí.