« Tüm yayınlar

Terraform ile S3 için Sıfır Güven Ağ Çevresi Kurmak

IAM anahtarları sızsa bile S3'e erişimi engelleyen VPC Endpoint ve bucket policy tabanlı sıfır güven mimarisini Terraform örnekleriyle inceliyoruz.

Çok bölgeli (multi-AZ) 3 katmanlı bir web uygulamasında medya dosyalarını EC2 instance'larında tutmak, auto-scaling sırasında veri kaybına yol açan sürdürülemez bir yaklaşımdır. Bunun yerine S3'e taşımak standart çözüm olsa da, sadece IAM izinlerine güvenmek IAM anahtarı veya instance profile sızıntısı durumunda tüm depolama katmanını internete açık hale getirebilir.

Bu yazıda anlatılan yaklaşım, kimlik tabanlı güvenliğe ek olarak ağ düzeyinde bir izolasyon katmanı ekliyor: özel subnetlerde çalışan uygulama sunucuları, trafiği internete çıkmadan S3'e yönlendiren bir VPC Gateway Endpoint üzerinden iletişim kuruyor. Terraform ile tanımlanan S3 bucket policy ise, isteğin belirli bir VPC Endpoint ID'sinden gelmediği sürece tüm s3:GetObject ve s3:PutObject çağrılarını açıkça reddediyor. Sonuç olarak çalınan bir IAM kimlik bilgisi bile, saldırgan sizin VPC'niz içinden istek yapmadıkça işe yaramıyor.

İçerik, bu deseni uygularken mühendislerin sıkça düştüğü kritik bir tuzağa da dikkat çekiyor: sıkı deny politikasını, VPC Endpoint route table yayılımı tamamlanmadan veya CI/CD runner'lara gerekli istisnalar tanımlanmadan devreye almak, kendi bucket'ınıza erişiminizi anında kilitleyebilir. AWS'de deny kuralları mutlaktır ve override edilemez, bu yüzden doğru sıralama kritik önem taşır.

Bu mimari, kimlik hırsızlığı temelli saldırı sınıflarının önemli bir kısmını ortadan kaldırarak, GitHub'da sızmış bir AWS anahtarının bile pratikte işe yaramaz hale gelmesini sağlıyor — çünkü veri, yalnızca belirlenen VPC alt ağlarından erişilebilir durumda kalıyor.