NAT, Firewall, Security Group #
Jaringan cloud punya beberapa lapisan mekanisme yang mengontrol aliran trafik — masing-masing bekerja di level yang berbeda dan melayani tujuan yang berbeda. NAT Gateway memungkinkan resource private mengakses internet tanpa terekspos ke internet. Security Group bertindak sebagai firewall di level instance. Network ACL (NACL) bertindak sebagai firewall di level subnet. Memahami cara kerja dan perbedaan ketiganya adalah kunci untuk mengonfigurasi jaringan yang aman dan fungsional.
NAT Gateway — Akses Internet Satu Arah #
Resource di private subnet tidak punya IP publik dan tidak bisa diakses dari internet. Tapi sering kali mereka perlu bisa mengakses internet — untuk download package, update, atau memanggil API eksternal. NAT Gateway memecahkan ini dengan prinsip satu arah: resource private bisa inisiasi koneksi ke internet, tapi internet tidak bisa inisiasi koneksi ke resource private.
Cara Kerja NAT Gateway:
[App Server] (private subnet, IP: 10.0.10.5)
│
│ Request ke 8.8.8.8 (Google DNS)
│ Source: 10.0.10.5
▼
[NAT Gateway] (public subnet, IP publik: 54.123.45.1)
│
│ NAT mengganti source IP: 10.0.10.5 → 54.123.45.1
│ Menyimpan mapping: (10.0.10.5, port X) → (54.123.45.1, port Y)
▼
Internet (8.8.8.8)
│
│ Response kembali ke 54.123.45.1
▼
[NAT Gateway]
│
│ Lookup mapping: trafik untuk port Y → kirim ke 10.0.10.5
▼
[App Server]
Dari perspektif internet: hanya melihat IP NAT Gateway, tidak tahu
ada App Server di belakangnya
Internet tidak bisa inisiasi koneksi ke NAT Gateway untuk
menjangkau App Server — NAT hanya meneruskan koneksi yang
dimulai dari dalam
Karakteristik NAT Gateway:
✓ Managed service — provider yang kelola, sangat available
✓ Auto-scaling — menangani banyak koneksi bersamaan
✓ Per-AZ — satu NAT Gateway per AZ untuk resiliensi
✗ Biaya per jam + biaya per GB data yang melewatinya
✗ Satu NAT Gateway untuk semua resource di AZ — single point
jika NAT-nya bermasalah (tapi managed service, jarang terjadi)
Security Group — Firewall di Level Instance #
Security Group adalah firewall virtual yang dikonfigurasi di level instance (VM, container, database, dsb). Ia mengontrol trafik apa yang diizinkan masuk (inbound) dan keluar (outbound) dari sebuah resource.
Karakteristik Security Group:
Stateful:
→ Jika kamu izinkan trafik masuk (inbound), response-nya
otomatis diizinkan keluar, tanpa perlu aturan outbound eksplisit
→ Begitu pula sebaliknya
→ Ini memudahkan konfigurasi — kamu tidak perlu menambahkan
aturan dua arah untuk setiap koneksi
Allow-only:
→ Security Group hanya bisa IZINKAN trafik
→ Tidak ada aturan "deny" eksplisit
→ Semua trafik yang tidak diizinkan otomatis di-drop
Bisa referensikan Security Group lain:
→ Izinkan trafik dari "semua resource yang punya SG ini"
→ Lebih fleksibel dan dinamis dari menggunakan IP address
Contoh Konfigurasi Security Group #
Security Group: sg-web-server (untuk application server)
─────────────────────────────────────────────────────────
INBOUND RULES:
Type Protocol Port Source
HTTP TCP 8080 sg-load-balancer ← hanya dari LB
SSH TCP 22 10.100.0.0/16 ← hanya dari corporate VPN
OUTBOUND RULES:
Type Protocol Port Destination
PostgreSQL TCP 5432 sg-database ← hanya ke database
HTTPS TCP 443 0.0.0.0/0 ← untuk API eksternal
DNS UDP 53 0.0.0.0/0 ← untuk DNS resolution
Security Group: sg-database (untuk database)
─────────────────────────────────────────────────────────
INBOUND RULES:
Type Protocol Port Source
PostgreSQL TCP 5432 sg-web-server ← hanya dari app server
OUTBOUND RULES:
(minimal, database tidak perlu banyak outbound)
Referensi Security Group sebagai Source #
// ANTI-PATTERN: Gunakan IP address untuk referensi instance lain
Inbound: TCP port 8080 dari 10.0.1.45/32
Masalah:
✗ IP bisa berubah jika instance di-restart atau di-replace
✗ Jika ada 10 load balancer, harus tambah 10 aturan
✗ Auto-scaling menambah instance baru = IP baru = aturan baru
// BENAR: Gunakan Security Group sebagai source
Inbound: TCP port 8080 dari sg-load-balancer
Keuntungan:
✓ Berlaku untuk semua instance yang punya sg-load-balancer
✓ Instance baru dari auto-scaling otomatis diizinkan
✓ Tidak perlu update aturan ketika IP berubah
Network ACL — Firewall di Level Subnet #
Network ACL (NACL) beroperasi di level subnet — semua trafik yang masuk atau keluar subnet melewati NACL. Berbeda dengan Security Group, NACL bersifat stateless dan mendukung aturan deny.
Perbedaan Security Group vs Network ACL:
Properti Security Group Network ACL
─────────────────────────────────────────────────────────
Level Instance Subnet
State Stateful Stateless
Aturan deny Tidak ada Ada
Evaluasi aturan Semua aturan Urut berdasarkan
dievaluasi nomor, berhenti di
yang pertama match
Default Tolak semua inbound, Izinkan semua
izinkan semua outbound (default NACL)
Stateless NACL — Perlu Aturan Dua Arah #
Karena NACL stateless, kamu perlu aturan eksplisit untuk kedua arah:
Contoh: App server (private subnet) mengakses database
NACL Private Subnet (OUTBOUND):
Rule Protocol Port Destination Action
100 TCP 5432 10.0.20.0/24 ALLOW ← izinkan ke DB subnet
NACL Data Subnet (INBOUND):
Rule Protocol Port Source Action
100 TCP 5432 10.0.10.0/24 ALLOW ← izinkan dari app subnet
NACL Data Subnet (OUTBOUND):
Rule Protocol Port Destination Action
100 TCP 1024-65535 10.0.10.0/24 ALLOW ← izinkan response
(ephemeral ports)
NACL Private Subnet (INBOUND):
Rule Protocol Port Source Action
100 TCP 1024-65535 10.0.20.0/24 ALLOW ← terima response DB
Ephemeral ports (1024–65535) adalah range port yang digunakan client untuk koneksi outbound. Saat App Server connect ke database port 5432, sistem operasi memilih port acak di range ini untuk sisi client. Response dari database dikirim ke port ini. Di NACL stateless, kamu harus izinkan ephemeral port range ini secara eksplisit untuk response bisa kembali.
Kapan Gunakan Security Group vs NACL #
Gunakan Security Group untuk:
✓ Kontrol akses per-instance yang granular
✓ Referensi dinamis antar komponen (SG-to-SG rules)
✓ Semua kasus umum — ini adalah tool utama firewall di cloud
Gunakan NACL sebagai lapisan tambahan untuk:
✓ Blokir range IP tertentu di level subnet
(misalnya: blokir IP yang diketahui melakukan scanning)
✓ Guardrail tambahan untuk subnet yang sangat sensitif
✓ Aturan deny eksplisit yang tidak bisa dilakukan Security Group
Umumnya:
NACL = penjaga gerbang subnet (coarse-grained)
Security Group = penjaga pintu instance (fine-grained)
Keduanya bekerja bersama, bukan pilihan salah satu
Ringkasan #
- NAT Gateway memungkinkan akses internet satu arah dari private subnet — resource private bisa inisiasi koneksi keluar, tapi internet tidak bisa inisiasi ke mereka. Satu NAT per AZ untuk resiliensi.
- Security Group adalah stateful, allow-only, di level instance — izinkan trafik masuk, response-nya otomatis diizinkan keluar. Gunakan SG reference (bukan IP) untuk source yang dinamis.
- NACL adalah stateless, support deny, di level subnet — karena stateless, butuh aturan eksplisit untuk kedua arah termasuk ephemeral ports untuk response.
- Security Group adalah tool utama, NACL sebagai lapisan tambahan — NACL berguna untuk blokir IP secara broad di level subnet; Security Group untuk kontrol per-instance yang granular.
- Referensikan Security Group sebagai source, bukan IP address — IP berubah seiring auto-scaling; SG reference tetap valid untuk semua instance dalam grup.
- Prinsip least privilege untuk semua aturan — hanya izinkan port dan source yang benar-benar dibutuhkan; tolak semua yang lain secara default.
← Sebelumnya: Public vs Private Network Berikutnya: Load Balancing →