Takip et

Kodla AWS WAF Yönetimi: En İyi Pratikler ve IaC Rehberi

Kodla AWS WAF yönetimi ile web uygulamalarınızı siber tehditlere karşı koruyun. Terraform ve CloudFormation kullanarak güvenliğinizi kolayca otomatikleştirebilirsiniz.

Kodla AWS WAF Yönetimi: En İyi Pratikler ve IaC Rehberi

Kodla AWS WAF yönetimi ile web uygulamalarınızı siber tehditlere karşı koruyun. Terraform ve CloudFormation kullanarak güvenliğinizi kolayca otomatikleştirebilirsiniz.

Günümüzün hızla değişen dijital dünyasında, web uygulamalarının güvenliğini sağlamak artık isteğe bağlı bir durum değil, zorunlu bir ihtiyaç haline geldi. Web Application Firewall (Web Uygulaması Güvenlik Duvarı – WAF) çözümleri, bu korumayı sağlamak için en etkili araçlardan biridir. Ancak, bulut ortamlarındaki dinamik yapı nedeniyle, güvenlik kurallarını AWS yönetim konsolundan elle yapılandırmak zamanla büyük bir karmaşaya yol açar. İşte bu noktada, altyapıyı kod olarak yönetme (Infrastructure as Code – IaC) prensipleri devreye giriyor. Bu makalede, AWS WAF bileşenlerini kod ile nasıl yönetebileceğinizi, en iyi pratikleri ve gerçek dünya senaryolarını adım adım inceleyeceğiz.

AWS WAF Nedir ve Neden Kodla Yönetilmelidir?

AWS WAF, web uygulamalarınızı yaygın web açıklarına ve kötü amaçlı botlara karşı koruyan esnek bir güvenlik duvarı hizmetidir. SQL Injection (SQL Enjeksiyonu), Cross-Site Scripting (Siteler Arası Betik Çalıştırma – XSS) ve DDoS saldırıları gibi tehditleri engellemek için kurallar tanımlamanıza olanak tanır. Bu kuralları AWS Application Load Balancer (Uygulama Yük Dengeleyici), Amazon CloudFront veya Amazon API Gateway gibi servislerinize doğrudan bağlayabilirsiniz.

Peki, bu kuralları neden AWS konsolundan el ile tıklayarak değil de kod yazarak yönetmeliyiz? Öncelikle, manuel yapılan her işlem insan hatasına son derece açıktır. Küçük bir IP adresinin yanlış yazılması veya bir kural önceliğinin hatalı ayarlanması, tüm sistemin erişilemez hale gelmesine neden olabilir. Kodla yönetim sayesinde, tüm değişiklikleri önceden test edebilir ve hata payını sıfıra indirebilirsiniz.

İkinci olarak, sürüm kontrolü (version control) avantajından yararlanırsınız. AWS WAF kurallarınızı Git gibi bir versiyon kontrol sisteminde tuttuğunuzda, hangi kuralın ne zaman, kim tarafından ve neden değiştirildiğini kolayca görebilirsiniz. Bir sorun oluştuğunda ise tek bir komutla eski güvenli sürüme geri dönebilirsiniz (rollback). Bu durum, özellikle denetim (audit) süreçlerinde güvenlik ekiplerine inanılmaz bir kolaylık sağlar.

Son olarak, çoklu ortam yönetimi büyük bir problem olmaktan çıkar. Geliştirme (Development), test (Staging) ve canlı (Production) ortamlarınızın tamamında aynı güvenlik standartlarını uygulamak istiyorsanız, kodla yönetim tek mantıklı seçenektir. Kod tabanlı yaklaşım sayesinde, aynı WAF kurallarını saniyeler içinde farklı AWS hesaplarına ve bölgelerine (regions) hatasız bir şekilde dağıtabilirsiniz.

Altyapı Olarak Kod (IaC) ile AWS WAF Kurulumu Nasıl Yapılır?

Altyapı olarak kod (IaC) yaklaşımı, AWS kaynaklarını tanımlamak ve yönetmek için deklaratif (tanımlayıcı) dosyalar kullanır. AWS WAF yönetiminde en popüler iki araç Terraform ve AWS CloudFormation’dır. Terraform, bulut sağlayıcıdan bağımsız yapısı ve geniş topluluk desteği ile öne çıkarken; CloudFormation, AWS’nin kendi yerel servisidir.

Kodla AWS WAF yönetimine başlarken ilk yapmanız gereken şey, güvenlik kurallarınızı modüler hale getirmektir. Sabit değerleri (hardcoded) doğrudan kodun içine yazmak yerine, değişkenler (variables) kullanmalısınız. Örneğin, engellenecek IP adreslerini içeren bir listeyi kodun içinde statik olarak tanımlamak yerine, dinamik olarak güncellenen bir IP Set (IP Kümesi) kaynağına bağlamalısınız. Böylece kodun okunabilirliğini ve bakımını kolaylaştırırsınız.

Aşağıdaki tabloda, manuel yönetim ile kodla yönetim arasındaki temel farkları daha net görebilirsiniz:

Özellik Manuel Yönetim (Konsol) Kodla Yönetim (IaC)
Hata Oranı Yüksek (İnsan hatasına açık) Çok Düşük (Test edilebilir)
Sürüm Kontrolü Yok (Sadece AWS CloudTrail logları) Tam (Git geçmişi ve commit detayları)
Ortamlar Arası Tutarlılık Zor (Her ortamda elle kurulum) Mükemmel (Aynı kod şablonu)
Geri Dönüş (Rollback) Süresi Uzun (Değişiklikleri elle geri alma) Saniyeler içinde (Git revert ve deploy)

Bu karşılaştırma, özellikle büyük ölçekli projelerde kodla yönetimin neden bir lüks değil, zorunluluk olduğunu açıkça ortaya koymaktadır. Şimdi, bu teorik bilgileri pratiğe dökerek Terraform ile ilk AWS WAF kuralımızı nasıl yazacağımıza bakalım.

Terraform ile Temel Bir AWS WAF Kuralı Oluşturma

AWS WAFv2 API’sini kullanarak Terraform ile bir Web ACL (Web Erişim Kontrol Listesi) oluşturmak oldukça basittir. İlk olarak, sıkça karşılaşılan bir senaryoyu ele alalım: Belirli bir IP adres bloğundan gelen istekleri engellemek ve diğer tüm isteklere izin vermek istiyoruz. Bu senaryo, özellikle belirli bir IP adresinden gelen siber saldırıları veya tarama (scanning) faaliyetlerini engellemek için idealdir.

Bunun için öncelikle bir aws_wafv2_ip_set kaynağı tanımlamalı, ardından bu IP kümesini kullanan bir aws_wafv2_web_acl oluşturmalıyız. İşte bu senaryoyu gerçekleştiren örnek Terraform kodu:

resource "aws_wafv2_ip_set" "kara_liste_ip" {
  name               = "kara-liste-ip-seti"
  description        = "Engellenen IP Adresleri"
  scope              = "REGIONAL"
  ip_address_version = "IPV4"
  addresses          = ["192.0.2.0/24", "198.51.100.0/22"]
}

resource "aws_wafv2_web_acl" "web_guvenlik_duvari" {
  name        = "web-guvenlik-duvari"
  description = "Temel Web ACL Kuralları"
  scope       = "REGIONAL"

  default_action {
    allow {}
  }

  rule {
    name     = "IPEngellemeKurali"
    priority = 1

    action {
      block {}
    }

    statement {
      ip_set_reference_statement {
        arn = aws_wafv2_ip_set.kara_liste_ip.arn
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "IPEngellemeKuraliMetrik"
      sampled_requests_enabled   = true
    }
  }

  visibility_config {
    cloudwatch_metrics_enabled = true
    metric_name                = "webGuvenlikDuvariMetrik"
    sampled_requests_enabled   = true
  }
}

Yukarıdaki kod bloğunda, ilk olarak kara_liste_ip adında bir IP kümesi oluşturduk. Ardından, web_guvenlik_duvari adındaki Web ACL kaynağımız içerisinde bu IP kümesini referans gösteren bir kural (rule) tanımladık. Bu kural, belirtilen IP’lerden gelen istekleri doğrudan engelleyecek (Block) şekilde yapılandırılmıştır. En önemlisi, default_action bloğu ise bu kurala uymayan diğer tüm temiz isteklere izin verecektir (Allow).

Çoklu Hesap (Multi-Account) Ortamlarında AWS WAF Yönetimi Nasıl Olmalıdır?

Büyük ölçekli kurumsal şirketler genellikle tek bir AWS hesabı yerine, güvenlik ve faturalandırma sınırlarını belirlemek için çoklu AWS hesapları (Multi-Account) kullanırlar. Bu tür yapılarda, her hesapta ayrı ayrı WAF kuralları tanımlamak sürdürülemez bir yönetim yükü oluşturur. Ayrıca, farklı ekiplerin güvenlik kurallarını bypass etme riski de ortaya çıkar.

Bu sorunu çözmek için AWS Organizations ve AWS Firewall Manager servislerini kodla entegre etmelisiniz. AWS Firewall Manager, tüm organizasyonunuz genelinde AWS WAF kurallarını merkezi olarak dağıtmanıza ve uygulamanıza olanak tanır. Bu sayede, yeni açılan bir AWS hesabı bile anında şirketinizin standart güvenlik kuralları ile korunmaya başlar.

Merkezi yönetim için şu adımları izleyebilirsiniz:

  • AWS Organizations üzerinde bir güvenlik hesabı (Security Account) belirleyin.
  • AWS Firewall Manager’ı bu hesap üzerinde etkinleştirin.
  • Terraform veya CloudFormation kullanarak merkezi bir “WAF Politikası” (WAF Policy) yazın.
  • Bu politikayı, organizasyonunuza yeni katılan hesaplar da dahil olmak üzere tüm hedef hesaplara otomatik olarak uygulayın.

Böylece, yeni bir mikro servis veya uygulama yayına alındığında, güvenlik ekibinin manuel müdahalesine gerek kalmadan temel koruma kuralları otomatik olarak aktif hale gelecektir. Bu yaklaşım, güvenlik standartlarının şirketin tamamında eksiksiz uygulanmasını sağlar ve uyumluluk (compliance) süreçlerini büyük ölçüde kolaylaştırır.

CI/CD Süreçlerine AWS WAF Entegrasyonu Nasıl Sağlanır?

Güvenlik kurallarınızı kod haline getirdikten sonra, bunları yazılım geliştirme yaşam döngüsünün (SDLC) bir parçası haline getirmelisiniz. GitOps prensiplerini benimseyerek, WAF kurallarınızdaki her değişikliği otomatik bir CI/CD (Sürekli Entegrasyon / Sürekli Dağıtım) hattından geçirebilirsiniz. Bu yaklaşım, güvenliği yazılım geliştirme sürecinin en başına entegre eden “DevSecOps” felsefesinin temelini oluşturur.

Bir geliştirici veya güvenlik analisti yeni bir kural eklemek istediğinde, Git üzerinde bir Pull Request (Değişiklik İsteği) açar. CI/CD hattı (örneğin GitHub Actions, GitLab CI veya AWS CodePipeline) devreye girerek şu adımları çalıştırır:

  1. Linting (Kod Analizi): Terraform veya CloudFormation kodunun sözdizimi (syntax) hatalarını kontrol eder.
  2. Güvenlik Taraması: tfsec veya checkov gibi araçlar kullanarak WAF kodunda güvenlik açığı olup olmadığını denetler (örneğin, varsayılan kuralın yanlışlıkla herkese açık bırakılması).
  3. Plan Aşaması: terraform plan komutu ile hangi kuralların ekleneceğini, değiştirileceğini veya silineceğini gösteren bir rapor oluşturur.
  4. Onay ve Dağıtım: Kıdemli bir güvenlik mühendisinin onayının ardından, kod otomatik olarak hedef AWS ortamına dağıtılır (apply).

Vaka Analizi: Türkiye’nin Lider E-Ticaret Platformunda WAF Otomasyonu

Türkiye’de faaliyet gösteren büyük bir e-ticaret platformu, Kasım ayı indirim dönemlerinde (Black Friday) yoğun bot saldırılarına maruz kalıyordu. Güvenlik ekibi, saldırganların IP adreslerini manuel olarak engellemeye çalışırken hem geç kalıyor hem de yanlışlıkla gerçek kullanıcıları engelliyordu. Bu durum ciddi ciro kayıplarına yol açıyordu.

Şirket, AWS WAF yönetimini tamamen Terraform’a taşıdı. Log analiz sistemlerini (AWS Athena ve Kinesis) WAF ile entegre ederek, anormal trafik üreten IP’leri otomatik tespit eden bir sistem kurdular. Bu sistem, şüpheli IP’leri tespit ettiğinde Git deposundaki bir IP listesini güncelleyen otomatik bir Pull Request açıyordu. CI/CD pipeline’ı bu isteği 30 saniye içinde test edip canlıya alıyordu. Sonuç olarak, bot saldırılarına yanıt verme süresi 45 dakikadan 1 dakikanın altına düştü ve müşteri memnuniyeti %99.8 seviyesinde korundu.

AWS WAF Kurallarını Test Etmek İçin Hangi Yöntemler Kullanılır?

Yazdığınız bir güvenlik kuralının, gerçek kullanıcı trafiğini engellemeyeceğinden (False Positive – Hatalı Pozitif) nasıl emin olabilirsiniz? Canlı ortama doğrudan “Block” (Engelle) modunda kural dağıtmak oldukça risklidir. Yanlış yazılmış bir düzenli ifade (Regex), müşterilerinizin sepet sayfasına erişmesini engelleyebilir.

Bu riski azaltmak için AWS WAF’ın “Count” (Say) modunu kullanmalısınız. Bir kuralı kodunuzda tanımlarken aksiyonunu Count olarak belirlerseniz, WAF bu kurala eşleşen istekleri engellemez, sadece loglar ve metrikler üzerinde işaretler. Böylece kuralın ne kadar istek yakaladığını izleyebilirsiniz.

Kuralı en az 24-48 saat boyunca “Count” modunda çalıştırdıktan sonra, AWS Athena veya CloudWatch Logs Insights kullanarak logları analiz etmelisiniz. Eğer normal kullanıcıların istekleri bu kurala takılmıyorsa, kodunuzdaki kural aksiyonunu güvenle Block olarak güncelleyebilir ve CI/CD hattınız üzerinden canlıya alabilirsiniz. Bu yöntem, iş sürekliliğini bozmadan güvenliği artırmanın en sağlam yoludur.

Kodla AWS WAF Yönetiminde Sık Yapılan Hatalar ve Çözümleri

Kodla altyapı yönetimi harika avantajlar sunsa da, bazı kritik hatalar büyük sorunlara yol açabilir. Bu hataları bilmek ve önceden önlem almak, sistemlerinizin kararlılığı açısından hayati önem taşır.

  • WCU (WAF Capacity Unit) Sınırlarını Göz Ardı Etmek: AWS WAF’ta her kuralın karmaşıklığına göre bir WCU bedeli vardır ve bir Web ACL için toplam sınır genellikle 1500’dür. Kod yazarken kuralların WCU maliyetlerini hesaplamamak, dağıtım (deployment) sırasında hatalara yol açar. Kurallarınızı yazarken WCU değerlerini her zaman optimize edin.
  • Hassas Verileri Koda Gömme: IP adresleri veya özel API anahtarları gibi hassas verileri doğrudan Git depolarında saklamayın. Bunları AWS Secrets Manager veya Terraform değişkenleri (variables) aracılığıyla dışarıdan besleyin.
  • Loglamayı İhmal Etmek: WAF kurallarını kodla dağıtıp loglamayı aktif etmemek, karanlıkta yürümeye benzer. aws_wafv2_web_acl_logging_configuration kaynağını kullanarak logları mutlaka bir Amazon S3 kovasına veya CloudWatch log grubuna yönlendirin.

Sıkça Sorulan Sorular (FAQ)

AWS WAF kurallarını kodla yönetmek performansı etkiler mi?

Hayır, AWS WAF kurallarını kodla yönetmek (Terraform veya CloudFormation kullanmak) sadece kuralların oluşturulma ve güncellenme sürecini etkiler. WAF’ın istekleri inceleme performansı üzerinde hiçbir olumsuz etkisi yoktur.

Terraform ile yazılan WAF kuralları ne kadar sürede aktif olur?

Terraform kodunuzu uyguladıktan (apply) sonra, AWS WAF kuralları dünya genelindeki tüm AWS uç noktalarında (edge locations) genellikle birkaç saniye içinde aktif hale gelir.

AWS Managed Rules (Yönetilen Kurallar) kodla nasıl entegre edilir?

AWS’nin sunduğu hazır koruma paketlerini (örneğin SQLi veya Core Rule Set) kodunuza kolayca ekleyebilirsiniz. Bunun için Web ACL kaynağınızın içinde managed_rule_group_statement bloğunu kullanmanız yeterlidir.

WAF kurallarında hata yaptığımda hızlıca nasıl geri dönebilirim?

Git sürüm kontrol sisteminizde bir önceki commit’e geri dönüp (git revert) CI/CD pipeline’ınızı tekrar tetikleyerek birkaç dakika içinde eski çalışan WAF kurallarınızı geri yükleyebilirsiniz.

#AWS #IaC #Terraform #SiberGüvenlik #CloudSecurity

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık