Virtual Network (VPC / VNet) #

Sebelum kita dapat men-deploy server virtual, database managed, kluster Kubernetes, atau layanan komputasi apa pun di cloud, ada satu fondasi absolut yang harus dibangun terlebih dahulu: jaringan virtual. Virtual Private Cloud (VPC) di AWS dan Google Cloud, atau Virtual Network (VNet) di Azure, adalah jaringan virtual yang terisolasi secara logis di dalam infrastruktur fisik milik cloud provider. Jaringan inilah yang menjadi tempat tinggal bagi seluruh resource komputasi kita untuk saling berkomunikasi secara aman. Tanpa pemahaman arsitektur VPC yang matang, kesalahan konfigurasi jaringan dapat berujung pada bencana keamanan — seperti tereksposnya database privat ke internet publik secara tidak sengaja, atau terputusnya komunikasi antar-komponen aplikasi yang vital.

Apa itu VPC? #

Secara sederhana, VPC adalah versi virtual dari jaringan lokal tradisional (on-premise data center network) yang sering kita temukan di gedung perkantoran. Perbedaannya, VPC berjalan di atas infrastruktur jaringan terdistribusi berskala masif yang dikelola sepenuhnya oleh cloud provider secara as-a-service.

Analogi:
  VPC seperti gedung perkantoran pribadi kita di sebuah kota besar (cloud provider)
  
  Kota (Cloud Provider):
    → Merupakan infrastruktur fisik jalan raya dan kelistrikan yang dikelola provider.
    → Banyak tenant lain juga membangun gedung mereka di kota yang sama.
  
  Gedung perkantoran kita (VPC):
    → Ruang fisik yang sepenuhnya terisolasi dan hanya dapat diakses oleh kita.
    → Kita menentukan layout sekat ruangan internal (Subnet).
    → Kita mengatur resepsionis dan kunci keamanan pintu (Route Table & Firewall).
    → Gedung tetangga tidak bisa mengintip atau masuk ke ruangan kita tanpa izin tertulis.

Di dalam lingkungan cloud multi-tenant, di mana ribuan pelanggan menggunakan perangkat keras fisik server yang sama, isolasi logis ini dijamin di tingkat jaringan menggunakan teknologi Software-Defined Networking (SDN). Jaringan SDN memisahkan paket data antar-pelanggan menggunakan enkripsi pembungkus (encapsulation) khusus di level protokol virtual, sehingga tidak ada risiko kebocoran data antar-penyewa cloud.


Komponen-Komponen Utama VPC #

VPC bukanlah satu kesatuan komponen tunggal yang berdiri sendiri, melainkan hasil orkestrasi dari beberapa komponen jaringan virtual yang saling terintegrasi:

1. CIDR Block (Classless Inter-Domain Routing) #

CIDR block adalah metode pengalamatan IP yang menentukan rentang alamat IP yang tersedia untuk VPC kita. Saat pertama kali membuat VPC, kita wajib mendefinisikan CIDR block ini.

Contoh CIDR Block VPC: 10.0.0.0/16
  Angka /16 (Subnet Mask) menentukan jumlah IP address yang tersedia:
  → Rentang IP: 10.0.0.0 sampai 10.0.255.255
  → Total kapasitas: 65.536 alamat IP unik

Dalam memilih rentang IP address untuk VPC, kita wajib menggunakan rentang alamat IP privat yang didefinisikan oleh standar global RFC 1918:

  • 10.0.0.0/8 (10.0.0.0 – 10.255.255.255) — Pilihan paling populer untuk korporasi besar karena ukurannya yang masif.
  • 172.16.0.0/12 (172.16.0.0 – 172.31.255.255) — Sering digunakan untuk lingkungan testing atau staging.
  • 192.168.0.0/16 (192.168.0.0 – 192.168.255.255) — Rentang standar yang biasa digunakan pada router rumahan.

Aturan Emas Memilih CIDR: Hindari menggunakan rentang IP address yang tumpang tindih (overlapping) dengan jaringan internal kantor kita (on-premise data center) atau VPC lain yang berpotensi dihubungkan di masa mendatang. Jika terjadi tumpang tindih, routing antar-jaringan akan bentrok dan tidak dapat dikoneksikan.

2. Subnet #

Subnet adalah pembagian atau segmentasi dari rentang IP address utama VPC menjadi blok-blok jaringan yang lebih kecil. Tujuan utama subnetting adalah mengelompokkan resource berdasarkan Availability Zone (AZ) dan tingkat keamanan aksesnya.

Setiap subnet wajib diletakkan di dalam satu Availability Zone yang spesifik guna menjamin toleransi bencana (High Availability).

flowchart TD
    subgraph VPC["VPC Utama: 10.0.0.0/16"]
        subgraph AZ1["Availability Zone 1 (AZ-1a)"]
            Pub1["Public Subnet 1<br>10.0.1.0/24<br>(Frontend / ALB)"]
            Priv1["Private Subnet 1<br>10.0.10.0/24<br>(App Server / DB)"]
        end
        subgraph AZ2["Availability Zone 2 (AZ-1b)"]
            Pub2["Public Subnet 2<br>10.0.2.0/24<br>(Frontend / ALB)"]
            Priv2["Private Subnet 2<br>10.0.11.0/24<br>(App Server / DB)"]
        end
    end

Di cloud, terdapat pembatasan alokasi IP di setiap subnet. Sebagai contoh, di AWS VPC, terdapat 5 IP address yang dicadangkan di setiap subnet untuk kebutuhan internal infrastruktur cloud, yaitu:

  • 10.0.1.0: Alamat jaringan (Network Address).
  • 10.0.1.1: Router internal VPC (VPC Router).
  • 10.0.1.2: Server DNS internal (VPC DNS/Route 53 Resolver).
  • 10.0.1.3: Kebutuhan masa depan (Reserved for future use).
  • 10.0.1.255: Alamat siaran (Network Broadcast Address).

3. Internet Gateway (IGW) #

Internet Gateway adalah komponen perangkat lunak yang bertindak sebagai pintu gerbang penghubung dua arah antara VPC kita dengan internet publik.

flowchart LR
    VM["Instance VM (Public IP)"] <--> Routing["Route Table"]
    Routing <--> IGW["Internet Gateway (IGW)"]
    IGW <--> Internet["Internet Publik"]

Agar sebuah VM dapat diakses secara langsung dari internet (menjadi bagian dari Public Subnet), instans tersebut harus memenuhi kriteria berikut:

  1. Memiliki alamat IP publik (Public IP atau Elastic IP).
  2. Subnet tempat VM berada terhubung ke Route Table yang memiliki rute default 0.0.0.0/0 yang mengarah ke Internet Gateway.

4. Route Table #

Route table berisi sekumpulan aturan (routing rules) yang menentukan ke arah mana paket data dari subnet akan dikirimkan berdasarkan alamat IP tujuan (Destination).

Secara default, setiap VPC memiliki Route Table utama yang memastikan seluruh subnet di dalam VPC tersebut dapat saling berkomunikasi secara lokal secara otomatis.

Contoh Aturan Rute Public Subnet:
  Destination       Target
  ──────────────────────────────────
  10.0.0.0/16       local           ← Seluruh trafik internal VPC diputar lokal
  0.0.0.0/0         igw-xxxxxxxx    ← Seluruh trafik luar diarahkan ke Internet Gateway

Contoh Aturan Rute Private Subnet:
  Destination       Target
  ──────────────────────────────────
  10.0.0.0/16       local           ← Seluruh trafik internal VPC diputar lokal
  0.0.0.0/0         nat-xxxxxxxx    ← Trafik luar dialihkan ke NAT Gateway (outbound-only)

Seiring berkembangnya skala organisasi kita di cloud, kita akan memiliki puluhan hingga ratusan VPC yang tersebar di berbagai akun atau region. Untuk menghubungkan VPC-VPC terisolasi tersebut, cloud menyediakan tiga opsi interkoneksi:

1. VPC Peering #

VPC Peering adalah koneksi titik-ke-titik (point-to-point) langsung antara dua VPC yang memungkinkan resource di dalamnya saling berkomunikasi menggunakan IP privat tanpa melewati internet publik.

  • Kelebihan: Latensi sangat rendah dan tidak memiliki bandwidth bottleneck karena tidak ada hop perangkat keras tambahan di tengahnya.
  • Kekurangan: Tidak mendukung routing transitif (non-transitive routing). Jika VPC A terhubung ke VPC B, dan VPC B terhubung ke VPC C, VPC A tidak bisa berkomunikasi dengan VPC C. Jika kita memiliki 5 VPC yang perlu saling terhubung, kita harus membuat 10 koneksi peering terpisah, yang sangat sulit dikelola (full-mesh complexity).

2. Transit Gateway (TGW) #

Transit Gateway bertindak sebagai router cloud terpusat (cloud hub) yang menghubungkan ribuan VPC serta jaringan on-premise kita secara terpusat menggunakan arsitektur hub-and-spoke.

flowchart LR
    VPCA["VPC A"] --> TGW["Transit Gateway (Hub)"]
    VPCB["VPC B"] --> TGW
    VPCC["VPC C"] --> TGW
    OnPrem["On-Premise (VPN / DX)"] --> TGW
  • Kelebihan: Sangat mudah dikelola karena setiap VPC hanya perlu membuat satu koneksi ke Transit Gateway. Mendukung perutean transitif secara penuh.
  • Kekurangan: Memiliki biaya sewa per jam per koneksi (attachment fee) serta biaya pemrosesan data per GB (data processing charge).

VPC Endpoint memungkinkan kita menghubungkan VPC secara privat ke layanan PaaS (seperti AWS S3, DynamoDB) atau aplikasi pihak ketiga (SaaS) tanpa menggunakan Internet Gateway, NAT Gateway, atau VPN.

  • Gateway Endpoint: Rute khusus yang ditambahkan ke route table untuk mengakses S3 atau DynamoDB secara gratis.
  • Interface Endpoint: Memasang kartu jaringan virtual (Elastic Network Interface/ENI) dengan IP privat dari subnet kita untuk mengakses layanan cloud secara privat dan aman.

Lapisan Keamanan Jaringan VPC: Security Group vs NACL #

Untuk menjaga keamanan resource di dalam VPC, kita harus mengimplementasikan lapisan firewall virtual ganda yang bekerja di tingkat berbeda: Security Groups dan Network Access Control Lists (NACL).

flowchart TD
    Trafik["Trafik Internet"] --> NACL["1. Network ACL (Subnet Boundary - Stateless)"]
    NACL --> SG["2. Security Group (Instance Boundary - Stateful)"]
    SG --> VM["Virtual Machine Instance"]

1. Security Groups (Firewall Tingkat Instans) #

Security Group bertindak sebagai firewall virtual yang mengontrol lalu lintas data masuk (inbound) dan keluar (outbound) untuk instans Virtual Machine kita (beroperasi di tingkat kartu jaringan virtual/ENI).

  • Stateful: Jika kita mengizinkan trafik masuk pada port 80 (HTTP), trafik keluar yang menjadi jawaban balik dari request tersebut akan diizinkan secara otomatis tanpa perlu dikonfigurasi manual.
  • Aturan: Hanya mendukung aturan “Allow” (Mengizinkan). Secara default, seluruh trafik masuk akan diblokir kecuali diizinkan secara eksplisit.

2. Network ACL (Firewall Tingkat Subnet) #

NACL adalah lapisan keamanan tambahan yang bertindak sebagai firewall untuk mengontrol lalu lintas masuk dan keluar di tingkat subnet secara keseluruhan.

  • Stateless: Aturan masuk (inbound) dan aturan keluar (outbound) dievaluasi secara terpisah. Jika kita mengizinkan trafik masuk di port 80, kita wajib membuat aturan keluar untuk mengizinkan port ephemeral respon balik agar komunikasi tidak putus.
  • Aturan: Mendukung aturan “Allow” (Mengizinkan) dan “Deny” (Memblokir). NACL dievaluasi secara berurutan berdasarkan nomor aturan terendah (misal: Aturan nomor 100 dievaluasi sebelum nomor 200).
Karakteristik Security Group Network ACL (NACL)
Tingkat Operasi Tingkat Instans (Virtual Machine / ENI). Tingkat Subnet (Mengatur seluruh VM di subnet).
Sifat Keadaan Stateful (Respon balik otomatis diizinkan). Stateless (Respon balik wajib diatur eksplisit).
Tipe Aturan Hanya aturan “Allow”. Mendukung aturan “Allow” dan “Deny”.
Evaluasi Aturan Seluruh aturan dievaluasi bersamaan. Dievaluasi berurutan berdasarkan nomor aturan.

Contoh Kode: Deploy VPC Multi-AZ Aman dengan Terraform #

Berikut adalah contoh konfigurasi Terraform deklaratif untuk mendeploy arsitektur VPC standar industri (2 Public Subnet, 2 Private Subnet, Route Tables, dan Internet Gateway) untuk menjamin ketahanan Multi-AZ:

# ✓ BENAR: Gunakan Terraform untuk mendeklarasikan VPC Multi-AZ dengan pemisahan subnet yang ketat

# 1. Deklarasi VPC Utama
resource "aws_vpc" "main" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_hostnames = true
  enable_dns_support   = true

  tags = {
    Name        = "production-vpc"
    Environment = "production"
  }
}

# 2. Internet Gateway untuk Akses Internet Publik
resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "production-igw"
  }
}

# 3. Public Subnet di Availability Zone 1
resource "aws_subnet" "public_az1" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-southeast-1a"
  map_public_ip_on_launch = true # Mengaktifkan IP publik otomatis untuk resource publik

  tags = {
    Name = "public-subnet-az1"
  }
}

# 4. Public Subnet di Availability Zone 2
resource "aws_subnet" "public_az2" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.2.0/24"
  availability_zone = "ap-southeast-1b"
  map_public_ip_on_launch = true

  tags = {
    Name = "public-subnet-az2"
  }
}

# 5. Private Subnet di Availability Zone 1 (Tempat Database / Backend)
resource "aws_subnet" "private_az1" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.10.0/24"
  availability_zone = "ap-southeast-1a"
  map_public_ip_on_launch = false # Menjamin resource tidak mendapatkan IP publik

  tags = {
    Name = "private-subnet-az1"
  }
}

# 6. Private Subnet di Availability Zone 2
resource "aws_subnet" "private_az2" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.11.0/24"
  availability_zone = "ap-southeast-1b"
  map_public_ip_on_launch = false

  tags = {
    Name = "private-subnet-az2"
  }
}

# 7. Route Table Khusus Public Subnet
resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.main.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id # Mengarahkan trafik internet ke IGW
  }

  tags = {
    Name = "public-route-table"
  }
}

# 8. Asosiasi Route Table ke Public Subnets
resource "aws_route_table_association" "public_association_az1" {
  subnet_id      = aws_subnet.public_az1.id
  route_table_id = aws_route_table.public_rt.id
}

resource "aws_route_table_association" "public_association_az2" {
  subnet_id      = aws_subnet.public_az2.id
  route_table_id = aws_route_table.public_rt.id
}

Ringkasan #

  • VPC adalah jaringan virtual yang terisolasi secara logis tempat seluruh resource cloud kita berjalan dan saling berkomunikasi secara aman.
  • CIDR block mendefinisikan ruang IP address VPC — gunakan rentang IP privat standar RFC 1918 (misal: 10.0.0.0/16) yang tidak bertabrakan dengan jaringan lain.
  • Subnet membagi VPC menjadi segmen per AZ — gunakan public subnet untuk gateway/ALB, dan private subnet untuk server aplikasi dan database.
  • Internet Gateway adalah penghubung internet — tanpanya, tidak ada lalu lintas data yang bisa masuk atau keluar VPC ke jaringan internet publik.
  • Route table mengatur lalu lintas jaringan — memetakan ke mana paket data dikirim berdasarkan alamat IP tujuan.
  • Transit Gateway adalah hub terpusat untuk mengoneksikan ratusan VPC secara efisien, menggantikan kompleksitas mesh dari banyak koneksi VPC Peering.
  • VPC Endpoint (PrivateLink) mengamankan koneksi PaaS secara privat melalui IP internal tanpa harus melewati jalur internet publik.
  • Gunakan kombinasi Security Group dan NACL secara berlapis untuk mengamankan data di tingkat instans virtual machine dan tingkat subnet sekaligus.

← Sebelumnya: Twelve-Factor App   Berikutnya: Subnet, CIDR, Routing →

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