Private Subnet, NAT Gateway

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir