GCP Cloud Armor ile DDoS Koruması: Kapsamlı Rehber
Bir gece yarısı alarmı aldığınızı düşünün: Uygulamanız yüzlerce bin istek altında eziliyor, sunucularınız yanıt veremez hale geliyor ve müşterileriniz sitenize erişemiyor. DDoS saldırıları artık sadece büyük şirketlerin sorunu değil; küçük bir e-ticaret sitesinden kurumsal SaaS uygulamasına kadar herkes hedef olabilir. Google Cloud Platform’un sunduğu Cloud Armor, bu tür saldırılara karşı güçlü ve esnek bir savunma hattı oluşturmanızı sağlıyor. Bu yazıda Cloud Armor’ı gerçek dünya senaryolarıyla birlikte derinlemesine inceleyeceğiz.
Cloud Armor Nedir ve Neden Önemlidir?
Cloud Armor, GCP’nin Web Application Firewall (WAF) ve DDoS koruma servisidir. Google’ın küresel ağ altyapısı üzerinde çalışır ve L3/L4 DDoS saldırılarını otomatik olarak absorbe ederken L7 saldırılarına karşı da özelleştirilebilir kurallar uygulamanıza olanak tanır.
Cloud Armor’ın temel avantajları şunlardır:
- Global ölçek: Google’ın omurga ağı üzerinde çalıştığından trafiği kaynağa yakın noktalarda filtreler
- Entegre WAF kuralları: OWASP Top 10 saldırılarına karşı hazır kural setleri sunar
- Adaptive Protection: ML tabanlı anormallik tespiti ile sıfır-gün saldırılarına karşı koruma sağlar
- Ücret optimizasyonu: Arka uç sunucularınıza ulaşmadan önce zararlı trafiği engeller, bu da compute maliyetlerini düşürür
Cloud Armor, Google Cloud Load Balancing ile entegre çalışır. Dolayısıyla HTTP(S) Load Balancer, TCP/SSL Proxy Load Balancer veya External HTTP(S) Load Balancer kullanan mimariler için idealdir.
Ön Gereksinimler ve Ortam Hazırlığı
Başlamadan önce birkaç şeyin hazır olması gerekiyor. GCP projenizde compute.googleapis.com ve networksecurity.googleapis.com API’lerinin aktif olduğundan emin olun.
# Gerekli API'leri etkinleştir
gcloud services enable compute.googleapis.com
gcloud services enable networksecurity.googleapis.com
# Mevcut proje ve kimlik doğrulamayı kontrol et
gcloud auth list
gcloud config get-value project
# Cloud Armor için gerekli rolü kontrol et
gcloud projects get-iam-policy YOUR_PROJECT_ID
--flatten="bindings[].members"
--filter="bindings.members:user:YOUR_EMAIL"
Cloud Armor güvenlik politikaları oluşturmak için hesabınızda roles/compute.securityAdmin veya roles/owner rolü olması gerekiyor. Üretim ortamında en az ayrıcalık prensibini uygulamak için özel bir IAM rolü tanımlamanızı öneririm.
İlk Güvenlik Politikasını Oluşturma
Cloud Armor’da her şey Security Policy kavramı etrafında döner. Bir güvenlik politikası, sıralı kurallar içerir ve bu kurallar IP tabanlı filtreleme, coğrafi kısıtlama veya WAF imzalarına dayalı olabilir.
# Temel bir güvenlik politikası oluştur
gcloud compute security-policies create my-ddos-policy
--description "Ana uygulama DDoS ve WAF koruması"
--type CLOUD_ARMOR
# Politika detaylarını görüntüle
gcloud compute security-policies describe my-ddos-policy
Politikayı oluşturduktan sonra bunu bir backend servisine bağlamanız gerekiyor:
# Güvenlik politikasını backend servisine uygula
gcloud compute backend-services update my-backend-service
--security-policy my-ddos-policy
--global
# Bağlantıyı doğrula
gcloud compute backend-services describe my-backend-service
--global
--format="value(securityPolicy)"
IP Tabanlı Kural Yönetimi
Gerçek dünyada en çok ihtiyaç duyulan özelliklerden biri belirli IP adreslerini veya CIDR bloklarını engellemek ya da izin vermektir. Cloud Armor’da her kuralın bir önceliği vardır; düşük sayı yüksek öncelik anlamına gelir.
# Kötü niyetli IP bloğunu engelle (öncelik: 1000)
gcloud compute security-policies rules create 1000
--security-policy my-ddos-policy
--description "Bilinen kötü niyetli IP bloğunu engelle"
--src-ip-ranges "185.220.101.0/24,45.142.212.0/24"
--action deny-403
# Güvenilir ofis IP'lerine her zaman izin ver (öncelik: 100)
gcloud compute security-policies rules create 100
--security-policy my-ddos-policy
--description "Ofis IP'lerine whitelist"
--src-ip-ranges "203.0.113.0/24"
--action allow
# Varsayılan kuralı güncelle - tüm trafiğe izin ver (öncelik: 2147483647)
gcloud compute security-policies rules update 2147483647
--security-policy my-ddos-policy
--action allow
# Mevcut kuralları listele
gcloud compute security-policies rules list
--security-policy my-ddos-policy
Bir saldırı sırasında hızlıca IP engelleme yapmanız gerektiğinde bu komutları bir script haline getirmenizi öneririm.
Coğrafi Kısıtlama (Geo-Restriction)
Uygulamanız sadece belirli ülkelere hizmet veriyorsa, diğer ülkelerden gelen trafiği engellemek saldırı yüzeyini önemli ölçüde azaltır. Bir e-ticaret müşterimde Türkiye, Almanya ve İngiltere dışından gelen trafiği engelleyerek saldırı trafiğini yüzde seksen oranında düşürmeyi başardık.
# Belirli ülkelerden gelen trafiği engelle
gcloud compute security-policies rules create 2000
--security-policy my-ddos-policy
--description "Riskli bölgelerden trafiği engelle"
--expression "origin.region_code == 'RU' || origin.region_code == 'CN' || origin.region_code == 'KP'"
--action deny-403
# Alternatif: Sadece belirli ülkelere izin ver (whitelist yaklaşımı)
gcloud compute security-policies rules create 500
--security-policy my-ddos-policy
--description "Sadece TR, DE, GB'ye izin ver"
--expression "!(origin.region_code == 'TR' || origin.region_code == 'DE' || origin.region_code == 'GB')"
--action deny-403
Önemli not: Coğrafi engelleme CDN üzerinden gelen meşru trafiği de etkileyebilir. Eğer Cloudflare veya başka bir CDN kullanıyorsanız, CDN IP’lerini whitelist’e eklemeyi unutmayın.
Rate Limiting ile Uygulama Katmanı Koruması
L7 saldırılarında saldırganlar genellikle düşük hacimli ama yüksek frekanslı istekler gönderir. Cloud Armor’ın rate limiting özelliği bu tür saldırılara karşı etkilidir.
# IP başına rate limiting kuralı oluştur
gcloud compute security-policies rules create 3000
--security-policy my-ddos-policy
--description "Agresif rate limiting"
--expression "true"
--action throttle
--rate-limit-threshold-count 100
--rate-limit-threshold-interval-sec 60
--conform-action allow
--exceed-action deny-429
--enforce-on-key IP
# API endpoint'leri için daha sıkı rate limiting
gcloud compute security-policies rules create 2500
--security-policy my-ddos-policy
--description "API endpointleri icin strict rate limiting"
--expression "request.path.matches('/api/.*')"
--action throttle
--rate-limit-threshold-count 30
--rate-limit-threshold-interval-sec 60
--conform-action allow
--exceed-action deny-429
--enforce-on-key IP
Rate limiting konfigürasyonunda dikkat edilmesi gerekenler:
- –rate-limit-threshold-count: İzin verilen maksimum istek sayısı
- –rate-limit-threshold-interval-sec: Zaman penceresi (saniye cinsinden, 60 veya 1 olabilir)
- –conform-action: Eşiğin altındaki istekler için aksiyon (allow)
- –exceed-action: Eşiği aşan istekler için aksiyon (deny-429 veya redirect)
- –enforce-on-key: Rate limiting anahtarı (IP, ALL, HTTP-HEADER, XFF-IP, HTTP-COOKIE)
WAF Kuralları ve OWASP Koruması
Cloud Armor’ın preconfigured WAF rules özelliği, OWASP Top 10 saldırılarına karşı hazır imza tabanlı kurallar sunar. SQL injection, XSS ve diğer yaygın web saldırılarını bu kurallarla engelleyebilirsiniz.
# SQL Injection korumasını etkinleştir
gcloud compute security-policies rules create 4000
--security-policy my-ddos-policy
--description "SQL Injection koruması"
--expression "evaluatePreconfiguredExpr('sqli-stable')"
--action deny-403
# XSS korumasını etkinleştir
gcloud compute security-policies rules create 4100
--security-policy my-ddos-policy
--description "XSS koruması"
--expression "evaluatePreconfiguredExpr('xss-stable')"
--action deny-403
# Remote code execution koruması
gcloud compute security-policies rules create 4200
--security-policy my-ddos-policy
--description "Remote Code Execution koruması"
--expression "evaluatePreconfiguredExpr('rce-stable')"
--action deny-403
# Local file inclusion koruması
gcloud compute security-policies rules create 4300
--security-policy my-ddos-policy
--description "LFI koruması"
--expression "evaluatePreconfiguredExpr('lfi-stable')"
--action deny-403
WAF kurallarını uygulamadan önce preview modunda test etmenizi kesinlikle öneririm. Preview modunda kurallar trafiği engellemez, sadece log’a yazar:
# Kuralı preview moduna al
gcloud compute security-policies rules update 4000
--security-policy my-ddos-policy
--preview
# Preview loglarını Cloud Logging'den çek
gcloud logging read
'resource.type="http_load_balancer" AND jsonPayload.enforcedSecurityPolicy.outcome="PREVIEW"'
--limit 50
--format json
Adaptive Protection ile ML Tabanlı Koruma
Cloud Armor’ın en güçlü özelliklerinden biri Adaptive Protection‘dır. Bu özellik, makine öğrenimi kullanarak normal trafik profilinizi öğrenir ve anomalileri tespit ettiğinde sizi uyarır, hatta otomatik kural önerir.
# Adaptive Protection'ı etkinleştir
gcloud compute security-policies update my-ddos-policy
--enable-layer7-ddos-defense
# Adaptive Protection durumunu kontrol et
gcloud compute security-policies describe my-ddos-policy
--format="value(adaptiveProtectionConfig)"
Adaptive Protection bir saldırı tespit ettiğinde Cloud Console’da ve Cloud Monitoring’de alert üretir. Bu alertlere otomatik yanıt vermek için Cloud Functions veya Cloud Run ile entegrasyon kurabilirsiniz.
Gerçek bir senaryo: Bir müşteride gece 2’de Adaptive Protection, normalden 40 kat fazla istek gelen bir endpoint tespit etti ve otomatik kural önerisi oluşturdu. On dakika içinde kuralı uygulayarak saldırıyı durdurabildik; bu süre normalde manuel analizle saatler alabilirdi.
Terraform ile Infrastructure as Code
Üretim ortamında Cloud Armor politikalarını manuel komutlarla yönetmek sürdürülebilir değil. Terraform kullanarak politikalarınızı kod olarak yönetin:
# Terraform ile Cloud Armor politikası tanımı
# main.tf dosyası içeriği:
cat > cloud_armor.tf << 'EOF'
resource "google_compute_security_policy" "ddos_policy" {
name = "production-ddos-policy"
description = "Uretim ortami DDoS ve WAF politikasi"
# Adaptive Protection
adaptive_protection_config {
layer_7_ddos_defense_config {
enable = true
}
}
# Ofis IP whitelist
rule {
action = "allow"
priority = "100"
match {
versioned_expr = "SRC_IPS_V1"
config {
src_ip_ranges = ["203.0.113.0/24"]
}
}
description = "Ofis IP whitelist"
}
# Rate limiting
rule {
action = "throttle"
priority = "3000"
match {
versioned_expr = "SRC_IPS_V1"
config {
src_ip_ranges = ["*"]
}
}
rate_limit_options {
conform_action = "allow"
exceed_action = "deny(429)"
enforce_on_key = "IP"
rate_limit_threshold {
count = 100
interval_sec = 60
}
}
description = "Global rate limiting"
}
# Varsayilan kural
rule {
action = "allow"
priority = "2147483647"
match {
versioned_expr = "SRC_IPS_V1"
config {
src_ip_ranges = ["*"]
}
}
description = "Varsayilan izin kurali"
}
}
EOF
# Terraform init ve apply
terraform init
terraform plan
terraform apply -auto-approve
Monitoring ve Alerting Kurulumu
Cloud Armor logları, Cloud Logging’e otomatik olarak yazılır. Bu logları analiz etmek ve kritik olaylar için alert kurmak önemlidir.
# Cloud Armor loglarını sorgula
gcloud logging read
'resource.type="http_load_balancer" AND jsonPayload.enforcedSecurityPolicy.outcome="DENY"'
--limit 100
--format="table(timestamp, jsonPayload.enforcedSecurityPolicy.name, jsonPayload.enforcedSecurityPolicy.priority, httpRequest.remoteIp, httpRequest.requestUrl)"
# Engellenen IP'lerin özeti
gcloud logging read
'resource.type="http_load_balancer" AND jsonPayload.enforcedSecurityPolicy.outcome="DENY"'
--format="value(httpRequest.remoteIp)" |
sort | uniq -c | sort -rn | head -20
# Cloud Monitoring'de alert politikası oluştur
gcloud alpha monitoring policies create
--policy-from-file=alert_policy.json
Alert politikası için JSON dosyası hazırlayın. Dakikada 1000’den fazla engelleme olduğunda PagerDuty veya email ile bildirim gönderecek şekilde yapılandırabilirsiniz.
Ayrıca Cloud Armor Security Dashboard‘u kullanarak görsel analiz yapabilirsiniz. Dashboard’da şu metrikleri takip edin:
- Allowed request count: Meşru trafiğin hacmi
- Denied request count: Engellenen istek sayısı
- Preview request count: Preview modundaki kuralların tespit ettiği istek sayısı
- Preconfigured WAF rule matches: Hangi WAF kurallarının tetiklendiği
Gerçek Dünya Senaryosu: Ani Trafik Artışına Müdahale
Bir SaaS şirketinde yaşanan gerçek bir olaydan örnek vereyim. Sabah 9’da trafik aniden normalin 50 katına çıktı. Saldırı trafiği farklı IP’lerden geldiği için basit IP engellemesi işe yaramıyordu. Müdahale adımları şu şekildeydi:
# 1. Adım: Saldırı trafiğinin profilini çıkar
gcloud logging read
'resource.type="http_load_balancer"'
--freshness=30m
--format="value(httpRequest.userAgent)" |
sort | uniq -c | sort -rn | head -10
# 2. Adım: Şüpheli User-Agent'ı engelle
gcloud compute security-policies rules create 500
--security-policy my-ddos-policy
--description "Bot User-Agent engelleme"
--expression "request.headers['user-agent'].matches('.*python-requests.*') || request.headers['user-agent'].matches('.*Go-http-client.*')"
--action deny-403
# 3. Adım: Hedef endpoint'e rate limiting uygula
gcloud compute security-policies rules create 400
--security-policy my-ddos-policy
--description "Hedef endpoint emergency rate limit"
--expression "request.path == '/api/v1/search'"
--action throttle
--rate-limit-threshold-count 10
--rate-limit-threshold-interval-sec 60
--conform-action allow
--exceed-action deny-429
--enforce-on-key IP
# 4. Adım: Saldırı haritasını oluştur - ASN bazlı analiz
gcloud logging read
'resource.type="http_load_balancer" AND httpRequest.status=200'
--freshness=10m
--format=json |
jq -r '.[] | .httpRequest.remoteIp' |
xargs -I {} curl -s "https://ipapi.co/{}/org/" |
sort | uniq -c | sort -rn
Bu olayda saldırı trafiğinin büyük çoğunluğunun birkaç hosting sağlayıcısının ASN’inden geldiğini tespit ettik ve bu ASN’lere ait IP bloklarını geçici olarak engelleyerek sorunu çözdük.
Güvenlik Politikası Test Etme
Yeni kuralları üretim ortamına almadan önce test edin:
# Test için geçici politika oluştur
gcloud compute security-policies create test-policy
--description "Test ortami politikasi"
# Curl ile kural testleri
# Normal istek - izin verilmeli
curl -v -H "User-Agent: Mozilla/5.0"
https://YOUR_LB_IP/
# SQL injection denemesi - engellenmelı
curl -v
"https://YOUR_LB_IP/search?q=1%27+OR+%271%27%3D%271"
-H "User-Agent: Mozilla/5.0"
# Rate limit testi - 200 istek gönder
for i in {1..200}; do
curl -s -o /dev/null -w "%{http_code}n"
https://YOUR_LB_IP/api/test
done | sort | uniq -c
# Kural eşleşmelerini logdan kontrol et
gcloud logging read
'resource.type="http_load_balancer" AND jsonPayload.enforcedSecurityPolicy.name="test-policy"'
--limit 20
--format="table(timestamp,jsonPayload.enforcedSecurityPolicy.outcome,httpRequest.remoteIp)"
Maliyet Optimizasyonu İpuçları
Cloud Armor’ın iki farklı tier’ı var:
- Cloud Armor Standard: Temel DDoS koruması, IP/geo kural yönetimi ve WAF kuralları içerir. Ücretlendirme politika başına aylık 5 dolar artı istek bazlı ücret.
- Cloud Armor Plus (Managed Protection): Adaptive Protection, DDoS Response Support ve gelişmiş tehdit istihbaratı içerir. Ücretlendirme daha yüksek ama büyük ölçekli saldırılarda maliyet avantajı sağlar.
Maliyeti optimize etmek için şu yaklaşımları kullanın:
- Preview modunu üretimde uzun süre açık bırakmayın; her preview isteği de ücretlendirilir
- Yüksek trafikli ortamlarda gereksiz kural sayısını minimize edin
- Bloklanan trafiği backend’e göndermediğiniz için compute maliyeti zaten düşer; bu tasarrufu hesaplayın
Sonuç
Cloud Armor, GCP üzerindeki uygulamalarınız için kapsamlı bir güvenlik katmanı sunar. Basit IP engellemesinden başlayıp ML tabanlı Adaptive Protection’a kadar geniş bir özellik yelpazesiyle her ölçekteki uygulama için uygun çözümler içerir.
Özetlemek gerekirse pratik adımlar şunlardır:
- Önce preview modunda kuralları test edin, false positive oranını ölçün, sonra production’a alın
- Tüm politikaları Terraform ile yönetin; gece yarısı panik anında manuel hata yapmayın
- Adaptive Protection’ı mutlaka etkinleştirin; maliyeti düşük, faydası çok yüksek
- Cloud Monitoring alertlerini doğru şekilde yapılandırın; bir saldırıdan uyku saatinde haberdar olabilmelisiniz
- Olay müdahale playbook’unuzu önceden hazırlayın; saldırı anında düşünmeye vaktiniz olmayacak
Güvenlik tek seferlik bir iş değil, süregelen bir süreçtir. Cloud Armor loglarınızı düzenli olarak gözden geçirin, ortaya çıkan yeni tehdit vektörlerine karşı kurallarınızı güncelleyin ve her büyük saldırıdan sonra post-mortem yapın. Altyapınız ne kadar güçlü olursa olsun, en büyük güvenlik açığı genellikle hazırlıksız yakalanmaktır.
