Security Groups - wirtualny firewall Twojej instancji

Masz uruchomioną instancję EC2. Ale zanim ktokolwiek się z nią połączy, musisz otworzyć odpowiednie „drzwi". W AWS te drzwi kontrolują Security Groups (SG). To jeden z najważniejszych mechanizmów bezpieczeństwa w EC2 i jedno z najczęściej pytanych zagadnień na egzaminie.

💡 Analogia
Security Group to jak lista gości na imprezie. Na drzwiach stoi ochroniarz (firewall) z listą. Kto jest na liście - wchodzi. Kogo nie ma - nie wejdzie. W odróżnieniu od tradycyjnego firewalla, Security Group działa na poziomie instancji, nie na poziomie sieci.

Jak działają Security Groups?

Security Group to zestaw reguł, które kontrolują ruch sieciowy do instancji (inbound) i z instancji (outbound):

Reguły Inbound (przychodzące)
  • Kontrolują kto może się połączyć z instancją
  • Domyślnie: WSZYSTKO zablokowane
  • Musisz jawnie zezwolić na ruch
  • Przykład: „Pozwól na SSH (port 22) z mojego IP"
Reguły Outbound (wychodzące)
  • Kontrolują dokąd instancja może wysyłać ruch
  • Domyślnie: WSZYSTKO dozwolone
  • Rzadko ograniczane, ale można
  • Przykład: „Pozwól na HTTPS (port 443) do internetu"

Security Groups są STATEFUL

To kluczowa cecha i ulubione pytanie egzaminacyjne. Stateful oznacza, że jeśli reguła inbound pozwala na ruch przychodzący, odpowiedź automatycznie może wrócić do nadawcy - bez potrzeby osobnej reguły outbound.

Przykład: otwierasz port 80 (HTTP) w inbound. Klient wysyła request do Twojego serwera. Odpowiedź z serwera wraca automatycznie do klienta, mimo że nie masz reguły outbound na port 80.

⚠️ Uwaga egzaminacyjna
Security Groups = STATEFUL (ruch powrotny automatyczny). Network ACL (NACL) = STATELESS (musisz jawnie zezwolić na ruch w obie strony). To jedno z najczęstszych pytań na CLF-C02!

Anatomia reguły Security Group

Każda reguła składa się z:

  • Typ - protokół (SSH, HTTP, HTTPS, Custom TCP/UDP)
  • Protokół - TCP, UDP, ICMP
  • Port range - np. 22, 80, 443, 3000-4000
  • Source/Destination - skąd/dokąd dozwolony ruch

Source może być:

  • Konkretne IP: 203.0.113.10/32 (jedno IP)
  • Zakres IP: 10.0.0.0/16 (cała sieć)
  • 0.0.0.0/0: cały internet (ostrożnie!)
  • Inny Security Group: np. „pozwól na ruch z SG web-serwerów"
💡 Pro tip
Referencja do innego Security Group zamiast IP to potężna technika. Masz 10 web serwerów za load balancerem? Zamiast wpisywać 10 adresów IP w regule bazy danych, mówisz: „pozwól na port 3306 z Security Group sg-webservers". Gdy dodasz 11. serwer z tym samym SG, automatycznie ma dostęp.

Dobre praktyki Security Groups

✅ Security Groups - best practices
Nigdy nie otwieraj portu 22 (SSH) na 0.0.0.0/0 w produkcji
Stosuj zasadę least privilege - otwieraj tylko potrzebne porty
Używaj referencji do SG zamiast IP tam, gdzie to możliwe
Oddzielne SG dla różnych warstw (web, app, database)
Nazywaj SG czytelnie: „prod-web-sg", „staging-db-sg"
Regularnie audytuj otwarte porty

Key Pairs - klucze do SSH

Aby połączyć się z instancją Linux przez SSH, potrzebujesz Key Pair. AWS generuje parę kluczy:

  • Public key - zapisany na instancji EC2
  • Private key - pobierasz go RAZ przy tworzeniu. AWS go nie przechowuje!
⚠️ Ważne
Jeśli zgubisz private key, nie odzyskasz go z AWS. Jedynym ratunkiem jest utworzenie nowego Key Pair, ale musisz mieć inny sposób dostępu do instancji (np. EC2 Instance Connect, SSM Session Manager). Dlatego zawsze rób backup klucza prywatnego w bezpiecznym miejscu!

Elastic IP - stałe publiczne IP

Domyślnie instancja EC2 dostaje losowe publiczne IP, które zmienia się po każdym stop/start. Jeśli potrzebujesz stałego adresu (np. dla DNS), możesz przypisać Elastic IP:

  • Statyczny publiczny adres IPv4
  • Możesz przenosić między instancjami
  • Darmowy gdy przypisany do running instancji
  • Kosztuje gdy NIE jest przypisany (AWS nie lubi marnowania IPv4!)
🏢 Scenariusz: Architektura trzywarstwowa

Typowa aplikacja ma trzy warstwy, każda z osobnym Security Group:

  • SG-Web: inbound port 80/443 z 0.0.0.0/0 (internet)
  • SG-App: inbound port 8080 z SG-Web (tylko z web serwerów)
  • SG-DB: inbound port 3306 z SG-App (tylko z app serwerów)

Baza danych nie jest dostępna bezpośrednio z internetu. Nawet gdyby ktoś zhackował web serwer, nie dostanie się od razu do bazy danych, bo SG-DB pozwala tylko na ruch z SG-App.

AWS ma dwa poziomy firewalla:

  • Security Group - na poziomie instancji (ENI), stateful, tylko reguły ALLOW
  • Network ACL (NACL) - na poziomie subnetu, stateless, reguły ALLOW i DENY

Wyobraź sobie osiedle mieszkaniowe. NACL to brama wjazdowa na osiedle (kontroluje kto wjeżdża/wyjeżdża). Security Group to drzwi do konkretnego mieszkania. Oba działają niezależnie i ruch musi przejść przez oba.

Na egzaminie kluczowe różnice: SG = stateful + tylko Allow. NACL = stateless + Allow i Deny.

🧠 Podsumowanie
  • Security Group = wirtualny firewall na poziomie instancji
  • Inbound domyślnie zablokowane, outbound domyślnie otwarte
  • SG są STATEFUL (ruch powrotny automatyczny)
  • NACL są STATELESS (oba kierunki trzeba jawnie zezwolić)
  • Można referencjonować inny SG jako source (zamiast IP)
  • Key Pair = klucze SSH. Private key pobierasz RAZ!
  • Elastic IP = stały publiczny adres. Kosztuje gdy nieprzypisany
🧪 Sprawdź się

Security Group jest stateful. Co to oznacza w praktyce?

A Ruch powrotny jest automatycznie dozwolony
B Reguły są zapisywane na stałe i nie można ich zmienić
C Security Group zapamiętuje historię całego ruchu
Stateful oznacza, że jeśli reguła inbound pozwala na ruch przychodzący, odpowiedź (ruch powrotny) automatycznie wraca do nadawcy bez potrzeby osobnej reguły outbound.

Jakie reguły domyślnie ma NOWY Security Group?

A Wszystko otwarte w obie strony
B Inbound: wszystko zablokowane, Outbound: wszystko otwarte
C Inbound: port 22 otwarty, Outbound: wszystko zablokowane
Nowy Security Group domyślnie blokuje CAŁY ruch przychodzący (inbound) i pozwala na CAŁY ruch wychodzący (outbound). Musisz jawnie dodać reguły inbound dla portów, które chcesz otworzyć.

Elastic IP jest przypisany do instancji, ale instancja jest Stopped. Czy płacisz za Elastic IP?

A Nie, Elastic IP jest zawsze darmowy
B Nie, bo jest przypisany do instancji
C Tak, bo instancja nie jest w stanie Running
Elastic IP jest darmowy TYLKO gdy jest przypisany do RUNNING instancji. Jeśli instancja jest Stopped lub Elastic IP nie jest przypisany do żadnej instancji, ponosisz opłaty. AWS chce zachęcić do efektywnego wykorzystania adresów IPv4.