Spis treści 13 sekcji
- Czym jest VPC i dlaczego to fundament Twojej chmury
- Bloki CIDR - ile adresów naprawdę potrzebujesz?
- Subnety publiczne vs prywatne
- Internet Gateway vs NAT Gateway
- Route Tables - GPS Twojego VPC
- Security Groups vs NACLs - dwie warstwy ochrony
- Praktyka - budujemy VPC krok po kroku
- VPC Peering i Transit Gateway - łączenie sieci
- Najczęstsze błędy - i jak ich unikać
- Koszty VPC - co jest darmowe, a co nie
- Konfiguracja Security Groups - przykład dla aplikacji webowej
- Najczęściej zadawane pytania (FAQ)
- Następny krok
- Amazon VPC to Twoja prywatna, izolowana sieć w chmurze AWS - fundament każdej architektury.
- Bloki CIDR definiują zakres adresów IP. Dla większości projektów /16 (65 536 adresów) to bezpieczny wybór.
- Subnety publiczne mają dostęp do Internetu przez Internet Gateway, prywatne - przez NAT Gateway.
- Security Groups działają na poziomie instancji (stateful), NACLs na poziomie subnetu (stateless).
- NAT Gateway kosztuje ok. 38 USD/miesiąc (eu-central-1) + transfer - planuj budżet świadomie.
Kiedy stawiasz pierwszą instancję EC2 albo bazę danych RDS, AWS automatycznie umieszcza ją w domyślnym VPC. Działa, więc nie zastanawiasz się nad siecią. Problem pojawia się, gdy aplikacja rośnie, dochodzą nowe środowiska i nagle okazuje się, że baza danych ma publiczny adres IP, a Security Groups są otwarte na cały świat. Z mojego doświadczenia w ClearScale widzę to regularnie - dlatego napisałem ten poradnik.
Jeśli dopiero zaczynasz przygodę z chmurą, przeczytaj najpierw Jak zacząć z AWS w 2026. Ten artykuł zakłada, że masz już konto AWS i podstawową orientację w konsoli.
Czym jest VPC i dlaczego to fundament Twojej chmury
Amazon Virtual Private Cloud (VPC) to logicznie wydzielona sekcja chmury AWS, w której uruchamiasz zasoby. Pomyśl o tym jak o własnym biurowcu. Ty decydujesz, ile pięter (subnetów) ma budynek, gdzie są drzwi wejściowe (Internet Gateway), kto może wejść (Security Groups) i jakie są trasy między pokojami (Route Tables).
Każdy VPC istnieje w jednym regionie AWS, ale rozciąga się na wszystkie Availability Zones w tym regionie. To daje Ci redundancję od pierwszego dnia.
Bloki CIDR - ile adresów naprawdę potrzebujesz?
CIDR (Classless Inter-Domain Routing) to sposób zapisu zakresu adresów IP. Zapis 10.0.0.0/16 oznacza: "wszystkie adresy od 10.0.0.0 do 10.0.255.255", czyli 65 536 adresów.
Zasada jest prosta - im mniejsza liczba po ukośniku, tym więcej adresów:
| CIDR | Liczba adresów | Zastosowanie |
|---|---|---|
| /16 | 65 536 | Cały VPC - standardowy wybór |
| /20 | 4 096 | Duży subnet |
| /24 | 256 | Typowy subnet |
| /28 | 16 | Minimalny subnet w AWS (najmniejszy dozwolony) |
Subnety publiczne vs prywatne
Subnet to fragment VPC przypisany do jednej Availability Zone. Dzielą się na dwa typy:
- Subnet publiczny - ma trasę do Internet Gateway. Zasoby mogą mieć publiczny adres IP i być dostępne z Internetu. Tu umieszczasz load balancery (Elastic Load Balancing) i bastion hosty.
- Subnet prywatny - nie ma bezpośredniego dostępu do Internetu. Zasoby mogą łączyć się z Internetem tylko przez NAT Gateway. Tu umieszczasz serwery aplikacyjne, bazy danych i funkcje Lambda w VPC.
Typowa architektura wygląda tak:
Użytkownik -> Internet Gateway -> [Subnet publiczny: ALB] -> [Subnet prywatny: EC2/ECS] -> [Subnet prywatny: RDS]EC2 (prywatny) -> NAT Gateway (publiczny) -> Internet Gateway -> Internet (np. aktualizacje, API)Ruch przychodzący trafia przez Internet Gateway do load balancera w subnecie publicznym. Load balancer przekazuje go do instancji w subnecie prywatnym. Baza danych siedzi w osobnym prywatnym subnecie i akceptuje połączenia wyłącznie z warstwy aplikacyjnej.
Internet Gateway vs NAT Gateway
Internet Gateway (IGW) to brama między Twoim VPC a publicznym Internetem. Jest darmowy, wysoko dostępny i zarządzany przez AWS. Podłączasz go do VPC i dodajesz trasę w Route Table subnetu publicznego.
NAT Gateway pozwala zasobom w prywatnych subnetach łączyć się z Internetem (np. pobierać aktualizacje), ale blokuje ruch przychodzący. Działa w subnecie publicznym i przekierowuje ruch z prywatnych subnetów.
Route Tables - GPS Twojego VPC
Route Table to zestaw reguł określających, dokąd trafia ruch sieciowy. Każdy subnet musi być powiązany z jedną Route Table.
Przykładowa Route Table dla subnetu publicznego:
| Destination | Target | Opis |
|---|---|---|
| 10.0.0.0/16 | local | Ruch wewnątrz VPC |
| 0.0.0.0/0 | igw-xxxxxxxx | Cały pozostały ruch idzie do Internet Gateway |
Route Table dla subnetu prywatnego:
| Destination | Target | Opis |
|---|---|---|
| 10.0.0.0/16 | local | Ruch wewnątrz VPC |
| 0.0.0.0/0 | nat-xxxxxxxx | Ruch na zewnątrz idzie przez NAT Gateway |
Security Groups vs NACLs - dwie warstwy ochrony
AWS daje Ci dwa mechanizmy firewalla. Różnią się zasadniczo:
| Cecha | Security Group | NACL |
|---|---|---|
| Poziom działania | Instancja (ENI) | Subnet |
| Typ | Stateful | Stateless |
| Reguły | Tylko ALLOW | ALLOW i DENY |
| Kolejność reguł | Wszystkie ewaluowane | Po numerach, pierwsza pasująca wygrywa |
| Domyślnie | Blokuje ruch przychodzący, przepuszcza wychodzący | Przepuszcza wszystko |
Stateful oznacza, że jeśli pozwolisz na ruch przychodzący na porcie 443, odpowiedź automatycznie przejdzie z powrotem. W NACLs (stateless) musisz jawnie zdefiniować reguły dla obu kierunków.
Praktyka - budujemy VPC krok po kroku
Zbudujemy VPC z dwiema warstwami: publiczną (dla load balancera) i prywatną (dla aplikacji). Architektura obejmie dwie Availability Zones dla wysokiej dostępności.
Krok 1 - Tworzenie VPC
- Otwórz konsolę AWS i przejdź do VPC Dashboard.
- Kliknij Create VPC.
- Wybierz VPC only (nie "VPC and more" - chcemy zrozumieć każdy element).
- Name tag:
cloudmaniak-vpc - IPv4 CIDR:
10.0.0.0/16 - Kliknij Create VPC.
aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=cloudmaniak-vpc}]'
# Włącz DNS hostnames (potrzebne dla publicznych DNS)
aws ec2 modify-vpc-attribute \
--vpc-id vpc-XXXXXXXX \
--enable-dns-hostnamesKrok 2 - Tworzenie subnetów
Tworzymy cztery subnety - po jednym publicznym i prywatnym w dwóch Availability Zones:
- W VPC Dashboard kliknij Subnets > Create subnet.
- Wybierz swój VPC (
cloudmaniak-vpc). - Utwórz kolejno cztery subnety:
public-subnet-1a- AZ: eu-central-1a, CIDR:10.0.1.0/24public-subnet-1b- AZ: eu-central-1b, CIDR:10.0.2.0/24private-subnet-1a- AZ: eu-central-1a, CIDR:10.0.10.0/24private-subnet-1b- AZ: eu-central-1b, CIDR:10.0.11.0/24
- Dla subnetów publicznych: zaznacz subnet > Actions > Edit subnet settings > włącz Auto-assign public IPv4 address.
# Subnety publiczne
aws ec2 create-subnet --vpc-id vpc-XXXXXXXX \
--cidr-block 10.0.1.0/24 --availability-zone eu-central-1a \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=public-subnet-1a}]'
aws ec2 create-subnet --vpc-id vpc-XXXXXXXX \
--cidr-block 10.0.2.0/24 --availability-zone eu-central-1b \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=public-subnet-1b}]'
# Subnety prywatne
aws ec2 create-subnet --vpc-id vpc-XXXXXXXX \
--cidr-block 10.0.10.0/24 --availability-zone eu-central-1a \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=private-subnet-1a}]'
aws ec2 create-subnet --vpc-id vpc-XXXXXXXX \
--cidr-block 10.0.11.0/24 --availability-zone eu-central-1b \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=private-subnet-1b}]'
# Włącz auto-assign publicznych IP dla subnetów publicznych
aws ec2 modify-subnet-attribute \
--subnet-id subnet-XXXXXXXX \
--map-public-ip-on-launchKrok 3 - Internet Gateway, NAT Gateway i Route Tables
- Internet Gateway: VPC Dashboard > Internet Gateways > Create > Name:
cloudmaniak-igw> Create. Następnie: Actions > Attach to VPC > wybierzcloudmaniak-vpc. - Elastic IP dla NAT: EC2 Dashboard > Elastic IPs > Allocate > Allocate.
- NAT Gateway: VPC Dashboard > NAT Gateways > Create > Subnet:
public-subnet-1a, Elastic IP: wybierz przydzielony adres > Create. - Route Table publiczna: Route Tables > Create > Name:
public-rt. Dodaj trasę: Destination0.0.0.0/0, Target:cloudmaniak-igw. Powiąż z oboma subnetami publicznymi (Subnet Associations). - Route Table prywatna: Route Tables > Create > Name:
private-rt. Dodaj trasę: Destination0.0.0.0/0, Target: NAT Gateway. Powiąż z oboma subnetami prywatnymi.
# Internet Gateway
aws ec2 create-internet-gateway \
--tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=cloudmaniak-igw}]'
aws ec2 attach-internet-gateway \
--internet-gateway-id igw-XXXXXXXX --vpc-id vpc-XXXXXXXX
# Elastic IP + NAT Gateway
aws ec2 allocate-address --domain vpc
aws ec2 create-nat-gateway \
--subnet-id subnet-PUBLIC-1A \
--allocation-id eipalloc-XXXXXXXX \
--tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=cloudmaniak-nat}]'
# Route Table publiczna
aws ec2 create-route-table --vpc-id vpc-XXXXXXXX \
--tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=public-rt}]'
aws ec2 create-route --route-table-id rtb-PUBLIC \
--destination-cidr-block 0.0.0.0/0 --gateway-id igw-XXXXXXXX
aws ec2 associate-route-table --route-table-id rtb-PUBLIC \
--subnet-id subnet-PUBLIC-1A
aws ec2 associate-route-table --route-table-id rtb-PUBLIC \
--subnet-id subnet-PUBLIC-1B
# Route Table prywatna
aws ec2 create-route-table --vpc-id vpc-XXXXXXXX \
--tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=private-rt}]'
aws ec2 create-route --route-table-id rtb-PRIVATE \
--destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-XXXXXXXX
aws ec2 associate-route-table --route-table-id rtb-PRIVATE \
--subnet-id subnet-PRIVATE-1A
aws ec2 associate-route-table --route-table-id rtb-PRIVATE \
--subnet-id subnet-PRIVATE-1BVPC Peering i Transit Gateway - łączenie sieci
Gdy Twoja infrastruktura rośnie, pojawia się potrzeba łączenia VPC ze sobą:
- VPC Peering - bezpośrednie, prywatne połączenie między dwoma VPC. Proste, bez dodatkowych kosztów (płacisz tylko za transfer). Idealne gdy łączysz 2-3 VPC. Ograniczenie: nie działa tranzytywnie (jeśli A jest połączone z B i B z C, to A nie widzi C automatycznie).
- Transit Gateway - centralny hub sieciowy. Łączysz do niego wiele VPC, sieci VPN i połączenia Direct Connect. Kosztuje ok. 0,05 USD/h, ale drastycznie upraszcza zarządzanie gdy masz 4+ sieci.
Z mojego doświadczenia, większość firm przechodzi na Transit Gateway gdy liczba VPC przekracza trzy. Wcześniej VPC Peering jest prostszym i tańszym rozwiązaniem. Więcej o projektowaniu architektury znajdziesz w artykule o architekturze aplikacji webowej w AWS.
Najczęstsze błędy - i jak ich unikać
- Baza danych w publicznym subnecie - to najpopularniejszy błąd. RDS i inne bazy danych zawsze powinny być w prywatnych subnetach. Jedyny sposób dostępu to przez warstwę aplikacyjną lub bastion host.
- Security Groups otwarte na 0.0.0.0/0 - szczególnie porty SSH (22) i RDP (3389). Zawsze ograniczaj źródło do konkretnych adresów IP lub Security Groups.
- Brak planowania CIDR - gdy dwa VPC mają ten sam zakres adresów, nie możesz ich połączyć przez peering. Planuj zakresy z wyprzedzeniem, nawet jeśli dziś masz jeden VPC.
- Jeden NAT Gateway dla wszystkich AZ - jeśli AZ z NAT Gateway ulegnie awarii, zasoby w prywatnych subnetach w innych AZ stracą dostęp do Internetu. W produkcji twórz NAT Gateway w każdej AZ.
- Ignorowanie VPC Flow Logs - bez logów nie wiesz, co się dzieje w Twojej sieci. Włącz Flow Logs i wysyłaj je do S3 lub CloudWatch Logs.
Koszty VPC - co jest darmowe, a co nie
| Komponent | Koszt |
|---|---|
| VPC, subnety, Route Tables, Security Groups, NACLs | Bezpłatne |
| Internet Gateway | Bezpłatny (płacisz za transfer) |
| NAT Gateway | ~0,052 USD/h + 0,052 USD/GB (eu-central-1) |
| Publiczny adres IPv4 (w tym Elastic IP - przypisany lub nie) | 0,005 USD/h (~3,60 USD/miesiąc za adres) |
| VPC Peering | Bezpłatny (płacisz za transfer cross-AZ/region) |
| Transit Gateway | ~0,05 USD/h + 0,02 USD/GB |
| VPC Flow Logs | Koszt zapisu do S3/CloudWatch |
Konfiguracja Security Groups - przykład dla aplikacji webowej
Na koniec skonfigurujmy Security Groups dla typowej trójwarstwowej architektury, którą omówiliśmy w artykule o EC2:
- SG dla ALB - ruch przychodzący: TCP 443 (HTTPS) z 0.0.0.0/0
- SG dla EC2/ECS - ruch przychodzący: TCP 8080 z SG ALB (referencja po ID Security Group)
- SG dla RDS - ruch przychodzący: TCP 5432 (PostgreSQL) z SG EC2/ECS
Kluczowa technika to referencja między Security Groups zamiast adresów IP. Gdy dodajesz nową instancję EC2 do SG aplikacji, automatycznie uzyskuje ona dostęp do bazy danych. Zero ręcznych zmian.
Najczęściej zadawane pytania (FAQ)
Czy mogę zmienić blok CIDR istniejącego VPC?
Nie możesz zmienić głównego bloku CIDR, ale możesz dodać dodatkowe (secondary CIDR blocks) do istniejącego VPC. Domyślny limit to 5 bloków CIDR na VPC (przez Service Quotas można go zwiększyć do 50). To przydatne, gdy zabraknie Ci adresów IP.
Ile VPC mogę mieć w jednym regionie?
Domyślny limit to 5 VPC na region, ale możesz poprosić AWS o zwiększenie tego limitu przez Service Quotas. W praktyce firmy rzadko potrzebują więcej niż 3-4 VPC na region (produkcja, staging, dev, shared services).
Czy NAT Gateway jest potrzebny, jeśli moje instancje nie potrzebują dostępu do Internetu?
Nie. Jeśli Twoje instancje w prywatnych subnetach komunikują się tylko z innymi usługami AWS, użyj VPC Endpoints zamiast NAT Gateway. Gateway Endpoints dla S3 i DynamoDB są bezpłatne. Interface Endpoints dla innych usług kosztują mniej niż NAT Gateway.
Jaka jest różnica między Security Group a NACL w praktyce?
Security Groups to Twój główny firewall - definiujesz reguły na poziomie instancji i są stateful (odpowiedzi automatycznie przechodzą). NACLs działają na poziomie subnetu i są stateless (musisz jawnie zdefiniować reguły dla obu kierunków). Większość zespołów używa głównie Security Groups, a NACLs traktuje jako dodatkową warstwę obrony.
Czy ruch między subnetami w tym samym VPC jest darmowy?
Ruch w tej samej Availability Zone jest darmowy. Ruch między różnymi AZ w tym samym VPC kosztuje 0,01 USD/GB w każdym kierunku. To niewiele, ale przy dużym ruchu się sumuje. Dlatego warto umieszczać komunikujące się ze sobą zasoby w tej samej AZ, gdy to możliwe.
Następny krok
Masz działający VPC z publicznymi i prywatnymi subnetami. Czas go wykorzystać. Polecam następujące kroki:
- Uruchom instancję EC2 w prywatnym subnecie i sprawdź, czy łączy się z Internetem przez NAT Gateway.
- Skonfiguruj Application Load Balancer w subnetach publicznych i przekieruj ruch do instancji prywatnej.
- Włącz VPC Flow Logs i przeanalizuj ruch sieciowy po kilku godzinach.
- Zapoznaj się z Route 53 i podepnij domenę do load balancera.
Sieć to fundament, na którym budujesz wszystko inne. Zainwestowany dziś czas w zrozumienie VPC zaprocentuje przy każdym kolejnym projekcie w AWS.
