VPC, Public Subnet, Route Table, IGW bu yazıda yeni bir VPC ve içerisine public subnetler oluşturmuştuk şimdi private subnet oluşturup private subnet ile birlikte NAT Gateway konusuna bakalım.


Varsayılanda bir ana route geliyor. Ben kendi route tablomu oluşturacağım.


Private Subnet A
- AZ: eu-west-3a
- CIDR: 10.10.3.0/24
• Private route table 0.0.0.0/0 → IGW içermez.
Eğer private subnet’teki makinelerin internete çıkması (update, docker pull vs.) gerekiyorsa:
- Private route table: 0.0.0.0/0 → NAT Gateway
Private subnet ne kazandırır?
- Public IP yok
- Internet Gateway yok
- İnternetten port taraması yapılamaz
Kısaca doğrudan internetten erişilmesini istemediğimiz cihazlarımızı private subnette konumlandırırız. Ama bu cihazlar internetten erişilemez olsa dahi internete çıkmaları gerekebilir. Uygulama güncellemelerini almaları gerebilir, docker pull işlemi yapmaları gerekebilir vb. İşte bu durumda NAT Gateway kullanırız. Şimdi NAT Gateway’e girmeden önce şu soruyu soralım.
Backend API’leri public subnet’te olması gerekir mi?
Hayır, backend API’lerin public subnet’te olması gerekmez.
Hatta best practice: private subnet’te olmalarıdır.
“Ama API dışarıdan çağrılmıyor mu?”
Evet, API’ye internet kullanıcıları istek atar ama kullanıcı API’ye değil, Load Balancer’a istek atar
Kullanıcı
|
[ Public ALB ] ← public subnet
|
[ Backend API ] ← private subnet
Backend:
- Doğrudan internete açık değildir
- Sadece ALB’den gelen trafiği kabul eder
Şimdi public ve private subnetlerimin her biri için birer EC2 oluşturacağım.



Public ec2 de şu kuralı yazdık.
Type: SSH
Protocol: TCP
Port: 22
Source: My IP (örneğin 78.xxx.xxx.xxx/32)
SSH (22) sadece benim ip adresim
- İnternetten herkes SSH yapamaz
- Sadece benim bilgisayarımın public IP’si bağlanabilir
Public EC2 internete açık, ama kontrollü açık
Private EC2 için SG’de şunu yaptım:
Type: SSH
Protocol: TCP
Port: 22
Source: 10.10.0.0/16
SSH sadece VPC içinden
Sadece şu kaynaklar bağlanabilir:
- Public EC2
• Aynı VPC içindeki başka EC2’ler
Neden bu kural doğru?
“Bu sunucuya sadece içeriden erişilsin.”
Yani adımlar şu şekilde olacak.
[Benim PC]
|
SSH (22)
|
[Public EC2]
|
SSH (22)
|
[Private EC2]

Public ec2 sunucuma bağlandım ve google.com’a pingim başarılı gitti. Çünkü bu subnet’in route tablosunda internet gateway var ve bu public subnetten internete çıkılabiliyor.
Şimdi buradan private subnetteki ec2’e erişeceğim. Bunun için önce bu ec2’me pem key dosyasını ekleyip bu key üzerinden private ec2’e ssh yapacağım.


Peki private subnetteki bu ec2 sunucusu internete çıksın istersek?
NAT Gateway
- Sadece outbound (internete çıkış)
- Private subnet için
Private subnet’in internete çıkabilmesi için NAT şarttır.

Public seçmek zorunlu çünkü:
- NAT Gateway’in internete çıkabilmesi için
- Internet Gateway (IGW) üzerinden trafik göndermesi gerekir.
AWS bizim adımıza
- Elastic IP alır
• NAT Gateway’e bağlar
Elastic IP’nin ne olduğunu ne nasıl alındığını da başka bir konuda anlatacağım. Kısaca açıklamak gerekirse de makiye atanmış değişmeyen sabit IP adresidir.

Private route table’ı düzenledim.
Route 1 (default – otomatik)
Destination: 10.10.0.0/16
Target: local
Status: Active
Anlamı:
- VPC içindeki tüm subnetler birbiriyle konuşabilir
- Public ↔ Private
• EC2 ↔ EC2
Destination: 0.0.0.0/0
Target: NAT Gateway (nat-1d965544d823a80c9)
Anlamı:
VPC dışına giden her trafik
(Google, apt update, docker pull vs.)
NAT Gateway üzerinden çıkacak

Ve artık internete çıkabiliyor private subnetteki ec2 sunucumuz.
private-subnet-a
|
private-route-table
|
NAT Gateway
|
Internet Gateway
|
Internet