AWS VPC Yapılandırması: Alt Ağlar ve Güvenlik Grupları ile Güvenli ve Ölçeklenebilir Ağ Mimarileri
Bulut altyapılarında ağ izolasyonu, güvenlik ve erişim kontrolü kritik öneme sahiptir. AWS Virtual Private Cloud (VPC), tamamen izole edilmiş bir ağ ortamı sunarak bu gereksinimleri karşılar. VPC içinde, kaynakların konumlandırılması ve iletişim kuralları alt ağlar (subnets) ve güvenlik grupları (security groups) aracılığıyla belirlenir.
AWS VPC Temelleri ve Ağ Alanı Planlaması
Bir VPC, AWS bulutunda tanımladığınız sanal bir ağdır. Kendi IP adresi aralığınızı (CIDR bloğu) seçer ve bu aralık, VPC içindeki tüm kaynakların kullanacağı adres alanını belirler. Örneğin, bir '10.0.0.0/16' CIDR bloğu, VPC'niz için 65.536 IP adresi tahsis eder. Bu büyük adres bloğu, daha küçük ve yönetilebilir alt ağlara bölünür.
Alt Ağlar (Subnets): Mantıksal Bölümlendirme ve Bölgesel Dağıtım
Alt ağlar, VPC'nizin IP adres aralığını daha küçük, mantıksal bölümlere ayırır. Her alt ağ, tek bir Availability Zone (AZ) içinde bulunur ve bu, yüksek erişilebilirlik (HA) için kaynaklarınızı farklı AZ'lere dağıtmanıza olanak tanır. İki ana alt ağ türü vardır:
- Public Subnet: Bir Internet Gateway (IGW) ile ilişkilendirilmiş yönlendirme tablosuna (route table) sahiptir. Bu sayede, bu alt ağdaki EC2实例ları doğrudan internetten erişilebilir hale gelir (bir Public IP veya Elastic IP atanmışsa).
- Private Subnet: IGW ile doğrudan ilişkilendirilmez. İnternet erişimi genellikle bir NAT Gateway veya NAT instance üzerinden sağlanır. Bu alt ağlar, veritabanları veya uygulama sunucuları gibi doğrudan internet erişimine ihtiyaç duymayan ancak dışarıya doğru iletişim kurabilen hassas kaynaklar için idealdir.
Aşağıda, bir VPC içinde bir public ve bir private alt ağ oluşturmaya yönelik AWS CLI komut örnekleri yer almaktadır:
# VPC oluşturma (örnek CIDR: 10.0.0.0/16)aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query 'Vpc.VpcId' --output text# Örnek olarak vpc-0123456789abcdef0 ID'si döndüğünü varsayalım# Public Subnet oluşturma (örnek CIDR: 10.0.1.0/24, AZ: us-east-1a)aws ec2 create-subnet --vpc-id vpc-0123456789abcdef0 --cidr-block 10.0.1.0/24 --availability-zone us-east-1a --query 'Subnet.SubnetId' --output text# Private Subnet oluşturma (örnek CIDR: 10.0.2.0/24, AZ: us-east-1b)aws ec2 create-subnet --vpc-id vpc-0123456789abcdef0 --cidr-block 10.0.2.0/24 --availability-zone us-east-1b --query 'Subnet.SubnetId' --output textBu komutlar, IP adres planlamasının ve bölgesel dağıtımın temelini oluşturur. Üretim ortamlarında, her AZ için en az bir public ve bir private alt ağ tanımlamak, mimariyi daha dayanıklı hale getirir.
Güvenlik Grupları (Security Groups): Durumsal Paket Filtreleme
Güvenlik Grupları, EC2实例ları (veya diğer kaynaklar) için sanal güvenlik duvarlarıdır. Instance seviyesinde çalışırlar ve durum bilgisine sahiptirler; yani bir giden isteğin yanıtı, gelen kural tanımlı olmasa bile geri dönebilir. Güvenlik grupları, belirli protokoller, portlar ve kaynak IP adreslerine dayalı olarak gelen (inbound) ve giden (outbound) trafiği kontrol eder. Bu, minimum ayrıcalık prensibini (least privilege) uygulayarak, yalnızca gerçekten ihtiyaç duyulan trafiğe izin vermeyi sağlar.
Bir örnekle açıklayalım: bir web sunucusu güvenlik grubu, HTTP (port 80) ve HTTPS (port 443) trafiğine internetten (0.0.0.0/0) gelen erişime izin verirken, SSH (port 22) erişimini yalnızca belirli bir yönetim IP aralığına kısıtlayabilir.
# Web Sunucusu Güvenlik Grubu oluşturmaaws ec2 create-security-group --group-name WebServerSG --description "Web Server Security Group" --vpc-id vpc-0123456789abcdef0 --query 'GroupId' --output text# Örnek olarak sg-0abcdef0123456789 ID'si döndüğünü varsayalım# HTTP (80) ve HTTPS (443) trafiğine internetten (0.0.0.0/0) izin vermeaws ec2 authorize-security-group-ingress --group-id sg-0abcdef0123456789 --protocol tcp --port 80 --cidr 0.0.0.0/0aws ec2 authorize-security-group-ingress --group-id sg-0abcdef0123456789 --protocol tcp --port 443 --cidr 0.0.0.0/0# SSH (22) trafiğine sadece belirli bir IP'den (örneğin, kendi IP'niz) izin vermeaws ec2 authorize-security-group-ingress --group-id sg-0abcdef0123456789 --protocol tcp --port 22 --cidr "YOUR_IP_ADDRESS/32"Bu komutlar, web sunucunuz için gerekli temel güvenlik kurallarını tanımlar. Outbound kuralları varsayılan olarak tüm trafiğe izin verir, ancak daha sıkı kontrol için bu da kısıtlanabilir.
Gerçek Bir Üretim Senaryosu: Üç Katmanlı Uygulama Mimarisi
Düşünün ki, bir e-ticaret uygulaması geliştiriyorsunuz. Bu uygulama genellikle bir web katmanı (Load Balancer ve EC2实例ları), bir uygulama katmanı (EC2实例ları) ve bir veritabanı katmanından (örneğin, RDS实例ları) oluşur. Bu mimariyi VPC içinde güvenli ve ölçeklenebilir bir şekilde yapılandıralım:
- VPC Oluşturma: '10.0.0.0/16' gibi geniş bir CIDR bloğu ile bir VPC oluşturulur.
- Alt Ağlar: Her Availability Zone için en az bir public ve iki private alt ağ oluşturulur. Örneğin:
- Public Subnet (Web Katmanı): '10.0.1.0/24' ve '10.0.3.0/24' (farklı AZ'lerde). Bu alt ağlarda Application Load Balancer (ALB) ve web sunucuları (genellikle bir Auto Scaling Group arkasında) bulunur.
- Private Subnet (Uygulama Katmanı): '10.0.2.0/24' ve '10.0.4.0/24' (farklı AZ'lerde). Bu alt ağlarda uygulama sunucuları bulunur. İnternet'e çıkış için bir NAT Gateway kullanılır.
- Private Subnet (Veritabanı Katmanı): '10.0.5.0/24' ve '10.0.6.0/24' (farklı AZ'lerde). Bu alt ağlarda RDS veritabanı instance'ları bulunur.
- Güvenlik Grupları:
- WebServerSG: Gelen HTTP(S) trafiğine internetten (0.0.0.0/0) ve SSH trafiğine sadece yönetim IP'lerinden izin verir. Giden olarak sadece uygulama katmanı güvenlik grubuna ve NAT Gateway'e izin verebilir.
- AppServerSG: Gelen trafiğe sadece WebServerSG'den (kaynak olarak WebServerSG ID'si belirtilir) ve SSH trafiğine yönetim IP'lerinden izin verir. Giden olarak VeritabanıSG'ye ve NAT Gateway'e izin verir.
- DatabaseSG: Gelen trafiğe sadece AppServerSG'den (kaynak olarak AppServerSG ID'si belirtilir) belirli veritabanı portundan (örneğin, MySQL için 3306) izin verir. Giden trafik kısıtlı olabilir.
Bu katmanlı yapı, her bileşenin sadece ihtiyaç duyduğu bileşenlerle iletişim kurmasını sağlayarak güvenlik duruşunu önemli ölçüde güçlendirir. Örneğin, dışarıdan veritabanına doğrudan erişim mümkün değildir; sadece uygulama sunucuları üzerinden erişilebilir.
Optimizasyon ve En İyi Uygulamalar
- Minimum Ayrıcalık Prensibi: Güvenlik gruplarını oluştururken her zaman en az ayrıcalık prensibini uygulayın. Sadece gerekli port ve IP adres aralıklarına izin verin.
- Ağ ACL'leri (Network ACLs): Güvenlik grupları instance seviyesinde çalışırken, Ağ ACL'leri alt ağ seviyesinde çalışır ve durum bilgisi olmayan (stateless) paket filtrelemesi yapar. Genellikle güvenlik grupları yeterli olsa da, ek bir güvenlik katmanı veya belirli IP'leri tamamen engellemek için Ağ ACL'leri kullanılabilir. Ancak dikkatli yapılandırılmalıdır, aksi takdirde trafik akışını engelleyebilir.
- VPC Flow Logs: Ağ trafiği akışını izlemek ve sorun gidermek için VPC Flow Logs'u etkinleştirin. Bu loglar, kimin kiminle hangi port üzerinden konuştuğunu detaylı olarak gösterir.
VPC'nizi alt ağlar ve güvenlik grupları ile doğru bir şekilde yapılandırmak, AWS'teki altyapınızın hem güvenliğini hem de ölçeklenebilirliğini doğrudan etkileyen kritik bir adımdır. İyi tasarlanmış bir ağ mimarisi, olası güvenlik ihlallerini azaltırken, uygulamalarınızın sorunsuz çalışmasını sağlar.