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 →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact