AWS Shield ile DDoS Saldırılarına Karşı Bulut Koruma Stratejileri
Büyük bir DDoS saldırısıyla karşılaştığınızda, altyapınızın çöküşünü seyretmek kadar çaresiz bir his yoktur. AWS Shield, tam olarak bu senaryoyu önlemek için tasarlanmış bir hizmet. Ama “Shield açtım, tamam” deyip geçmek yerine, gerçekten nasıl çalıştığını, neyi koruyup neyi korumadığını ve nasıl doğru yapılandırılacağını bilmek şart. Bu yazıda AWS Shield’ı sysadmin perspektifinden ele alacağız.
AWS Shield Nedir ve Neden İhtiyaç Duyarsınız
AWS Shield, Amazon’un yönetilen DDoS koruma hizmetidir. İki katmanda gelir: Shield Standard ve Shield Advanced. Standard, tüm AWS müşterilerine otomatik ve ücretsiz olarak sunulur. Advanced ise aylık 3.000 USD + veri transfer ücretleriyle gelen, kurumsal düzey bir koruma katmanıdır.
Şunu açıkça söyleyelim: Eğer internete açık bir uygulamanız varsa, DDoS saldırısı bir “olursa” değil, “ne zaman olur” meselesidir. Küçük bir startup da, büyük bir enterprise de hedef olabilir. Rakipler, hacktivist gruplar, botnet operatörleri veya sadece eğlence amaçlı hareket eden script kiddie’ler her an kapınızı çalabilir.
Shield Standard, Layer 3 ve Layer 4 saldırılarına karşı (SYN/UDP flood, reflection saldırıları gibi) otomatik koruma sağlar. Shield Advanced ise buna ek olarak Layer 7 koruması, gerçek zamanlı görünürlük, AWS WAF entegrasyonu ve DRT (DDoS Response Team) erişimi gibi özellikler sunar.
Shield Standard: Temel Koruma Katmanı
Standard katman, AWS’nin tüm müşterilerine sunduğu temel korumadır. Herhangi bir konfigürasyon gerektirmez, otomatik olarak devrededir. CloudFront, Route 53, Elastic Load Balancing ve AWS Global Accelerator gibi servisler bu korumadan yararlanır.
Ancak Standard’ın önemli sınırlamaları vardır:
- Saldırı görünürlüğü yok (hangi trafik, ne büyüklükte saldırı, hiçbir metrik yok)
- Layer 7 saldırılarına karşı koruma yok
- AWS Destek ekibiyle proaktif iletişim yok
- Maliyet koruması yok (saldırı sırasında oluşan AWS maliyetleri size fatura edilir)
Yani Standard’ı “sigorta” olarak değil, “emniyet kemeri” olarak düşünün. Temel bir koruma sağlar ama ciddi bir kaza geçirirseniz yetersiz kalır.
Shield Advanced Kurulum ve Konfigürasyon
Shield Advanced’ı etkinleştirmek birkaç adımdan oluşur. Önce AWS CLI üzerinden durumu kontrol edelim:
# Shield Advanced abonelik durumunu kontrol et
aws shield describe-subscription
--region us-east-1
# Eğer abonelik yoksa bu komutu alırsınız:
# An error occurred (ResourceNotFoundException)
Shield Advanced’ı etkinleştirmek için AWS Console üzerinden yapabilir ya da CLI kullanabilirsiniz:
# Shield Advanced aboneliği başlat
aws shield create-subscription
--region us-east-1
# Abonelik bilgilerini görüntüle
aws shield describe-subscription
--region us-east-1
--query 'Subscription.{Status:SubscriptionState,StartTime:StartTime,Limits:Limits}'
Kaynakları Shield Advanced ile Koruma Altına Alma
Aboneliği aktifleştirdikten sonra, korumak istediğiniz kaynakları kaydetmeniz gerekiyor. Shield Advanced şu kaynak türlerini destekler:
- CloudFront Distribution
- Route 53 Hosted Zone
- Elastic IP Address
- Application Load Balancer
- Classic Load Balancer
- Network Load Balancer
- AWS Global Accelerator Accelerator
# Bir Application Load Balancer'ı koruma altına alma
ALB_ARN="arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc123"
aws shield create-protection
--name "Production-ALB-Protection"
--resource-arn $ALB_ARN
--region us-east-1
# CloudFront distribution'ı koruma altına alma
# Not: CloudFront için region her zaman us-east-1 olmalı
CF_ARN="arn:aws:cloudfront::123456789:distribution/EDFDVBD6EXAMPLE"
aws shield create-protection
--name "Production-CF-Protection"
--resource-arn $CF_ARN
--region us-east-1
# Mevcut koruma listesini görüntüle
aws shield list-protections
--region us-east-1
--query 'Protections[*].{Name:Name,ResourceArn:ResourceArn,Id:Id}'
Koruma Grupları Oluşturma
Birden fazla kaynağı tek bir grup altında yönetmek, özellikle büyük altyapılarda çok işe yarar. Koruma grupları, ilgili kaynakları mantıksal olarak gruplandırmanıza olanak tanır:
# Tüm production ALB'lerini bir gruba ekle
aws shield create-protection-group
--protection-group-id "production-alb-group"
--aggregation "MAX"
--pattern "BY_RESOURCE_TYPE"
--resource-type "APPLICATION_LOAD_BALANCER"
--region us-east-1
# Belirli kaynakları manuel olarak gruplama
aws shield create-protection-group
--protection-group-id "critical-endpoints"
--aggregation "SUM"
--pattern "ARBITRARY"
--members $ALB_ARN $CF_ARN
--region us-east-1
# Koruma gruplarını listele
aws shield list-protection-groups
--region us-east-1
AWS WAF Entegrasyonu
Shield Advanced’ın gerçek gücü, AWS WAF ile entegre çalışmasında ortaya çıkar. Layer 7 saldırılarına karşı, örneğin HTTP flood veya Slowloris saldırılarına karşı WAF kuralları kritik önem taşır.
# WAF Web ACL oluştur
aws wafv2 create-web-acl
--name "Shield-Advanced-WebACL"
--scope CLOUDFRONT
--default-action Allow={}
--description "Shield Advanced ile entegre WAF kuralları"
--rules file://waf-rules.json
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=ShieldWebACL
--region us-east-1
waf-rules.json dosyası için örnek içerik:
# Rate limiting kuralı ile WAF JSON dosyası oluşturma
cat > waf-rules.json << 'EOF'
[
{
"Name": "RateLimitRule",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 2000,
"AggregateKeyType": "IP"
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "RateLimitRule"
}
},
{
"Name": "AWSManagedRulesCommonRuleSet",
"Priority": 2,
"OverrideAction": {
"None": {}
},
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesCommonRuleSet"
}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "CommonRuleSet"
}
}
]
EOF
echo "WAF kuralları dosyası oluşturuldu"
CloudWatch Alarmları ve Monitoring
Shield Advanced, CloudWatch ile entegre çalışarak saldırı anında sizi haberdar edebilir. Bu alarmları kurmak, proaktif müdahale için şarttır:
# DDoS saldırısı tespiti için CloudWatch alarmı
aws cloudwatch put-metric-alarm
--alarm-name "Shield-DDoS-Attack-Detected"
--alarm-description "Shield tarafindan DDoS saldirisi tespit edildi"
--metric-name "DDoSDetected"
--namespace "AWS/DDoSProtection"
--statistic "Sum"
--period 60
--threshold 1
--comparison-operator "GreaterThanOrEqualToThreshold"
--evaluation-periods 1
--alarm-actions "arn:aws:sns:us-east-1:123456789:SecurityAlerts"
--ok-actions "arn:aws:sns:us-east-1:123456789:SecurityAlerts"
--treat-missing-data "notBreaching"
--region us-east-1
# Saldırı büyüklüğü için alarm (bps cinsinden)
aws cloudwatch put-metric-alarm
--alarm-name "Shield-Attack-BitsPerSecond"
--alarm-description "DDoS saldiri trafigi yuksek"
--metric-name "DDoSAttackBitsPerSecond"
--namespace "AWS/DDoSProtection"
--statistic "Maximum"
--period 60
--threshold 10000000
--comparison-operator "GreaterThanThreshold"
--evaluation-periods 2
--alarm-actions "arn:aws:sns:us-east-1:123456789:SecurityAlerts"
--region us-east-1
# Mevcut alarmları kontrol et
aws cloudwatch describe-alarms
--alarm-name-prefix "Shield"
--region us-east-1
--query 'MetricAlarms[*].{Name:AlarmName,State:StateValue}'
Gerçek Dünya Senaryosu: E-Ticaret Sitesi Saldırısı
Bir e-ticaret müşterisinde yaşadığımız gerçek bir senaryoyu paylaşayım. Kara Cuma öncesinde, rakip bir grup tarafından organize edildiğinden şüphelenilen bir HTTP flood saldırısıyla karşılaştık. Saniyede 500.000 istek geliyordu ve ALB’nin limitleri zorlanmaya başlamıştı.
Shield Advanced aktifti ama WAF kuralları yetersizdi. Hızlı müdahale için şu adımları izledik:
# Önce mevcut saldırıyı tespit et
aws shield describe-attacks
--start-time 2024-11-29T00:00:00Z
--end-time 2024-11-29T23:59:59Z
--region us-east-1
# Saldırı detaylarını görüntüle
ATTACK_ID="a1b2c3d4-5678-90ab-cdef-EXAMPLE"
aws shield describe-attack
--attack-id $ATTACK_ID
--region us-east-1
# Acil IP engelleme kuralı ekle (saldırının geldiği IP aralıkları)
aws wafv2 create-ip-set
--name "EmergencyBlockList"
--scope CLOUDFRONT
--ip-address-version IPV4
--addresses "192.0.2.0/24" "198.51.100.0/24"
--region us-east-1
# Rate limiting'i geçici olarak düşür
aws wafv2 update-rule-group
--name "RateLimitRules"
--scope CLOUDFRONT
--id "existing-rule-group-id"
--lock-token "existing-lock-token"
--region us-east-1
Bu senaryoda Shield Advanced’ın DRT (DDoS Response Team) ile doğrudan iletişim kurabilme özelliğini de kullandık. AWS Support’u arayıp “Shield Advanced müşterisiyiz, aktif saldırı altındayız” dediğinizde, öncelikli destek alıyorsunuz. Bu fark yarattı.
Maliyet Koruması Özelliği
Shield Advanced’ın en değerli ama en az bilinen özelliklerinden biri maliyet korumasıdır. DDoS saldırısı sırasında scaling kaynaklı artan AWS maliyetleri için kredi talep edebilirsiniz. Bu, özellikle auto-scaling kullanan mimarilerde kritik önem taşır.
# Maliyet koruması için saldırı raporunu hazırla
aws shield describe-attack
--attack-id $ATTACK_ID
--region us-east-1
--query 'Attack.{StartTime:StartTime,EndTime:EndTime,AttackedResource:AttackedResources,Vectors:AttackVectors}'
# Shield olayı raporu oluştur (destek talebi için)
aws shield create-protection
--name "Cost-Protection-Evidence"
--resource-arn $ALB_ARN
--region us-east-1
Maliyet koruması talebi için AWS Support üzerinden bir vaka açmanız ve Shield saldırı ID’sini paylaşmanız gerekiyor. AWS, saldırı süresince oluşan anormal maliyet artışını değerlendirip kredi uygulayabiliyor.
Shield Advanced ile Proaktif Müdahale Stratejisi
Saldırı başladıktan sonra değil, başlamadan önce hazırlıklı olmak gerekiyor. İşte bir runbook örneği:
#!/bin/bash
# DDoS müdahale runbook scripti
# shield-response.sh
set -e
REGION="us-east-1"
SNS_TOPIC="arn:aws:sns:us-east-1:123456789:SecurityAlerts"
LOG_FILE="/var/log/shield-response.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# Aktif saldırıları kontrol et
check_active_attacks() {
log "Aktif saldirilar kontrol ediliyor..."
ATTACKS=$(aws shield list-attacks
--start-time "$(date -u -d '1 hour ago' '+%Y-%m-%dT%H:%M:%SZ')"
--end-time "$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
--region $REGION
--query 'AttackSummaries[?EndTime==null]'
--output json)
ATTACK_COUNT=$(echo $ATTACKS | python3 -c "import sys,json; print(len(json.load(sys.stdin)))")
if [ "$ATTACK_COUNT" -gt "0" ]; then
log "UYARI: $ATTACK_COUNT aktif saldiri tespit edildi!"
# SNS bildirimi gonder
aws sns publish
--topic-arn $SNS_TOPIC
--subject "KRITIK: DDoS Saldirisi Aktif"
--message "Shield Advanced $ATTACK_COUNT aktif saldiri tespit etti. Detaylar: $ATTACKS"
--region $REGION
return 1
else
log "Aktif saldiri bulunamadi."
return 0
fi
}
# WAF rate limiting'i acil modda daralt
emergency_rate_limit() {
local NEW_LIMIT=${1:-500}
log "Rate limit $NEW_LIMIT istek/5dak olarak ayarlaniyor..."
# Bu komutu kendi WAF konfigurasyonunuza gore duzenleyin
aws wafv2 list-web-acls
--scope CLOUDFRONT
--region $REGION
--query 'WebACLs[*].{Name:Name,Id:Id,ARN:ARN}'
log "Rate limiting guncellendi. Manuel WAF guncellemesi gerekebilir."
}
# Ana akis
log "Shield müdahale scripti baslatildi"
check_active_attacks || emergency_rate_limit 500
log "Script tamamlandi"
Route 53 ile Shield Entegrasyonu
DNS katmanındaki saldırılar, çoğu zaman gözden kaçar. Route 53 Hosted Zone’larınızı da Shield Advanced ile koruma altına alın:
# Route 53 hosted zone'u Shield ile koruma altına al
HOSTED_ZONE_ARN="arn:aws:route53:::hostedzone/ZEXAMPLE123"
aws shield create-protection
--name "DNS-Protection-Primary"
--resource-arn $HOSTED_ZONE_ARN
--region us-east-1
# Health check alarm'ı ekle (DNS saldırısı göstergesi olabilir)
aws cloudwatch put-metric-alarm
--alarm-name "Route53-HealthCheck-Failed"
--metric-name "HealthCheckStatus"
--namespace "AWS/Route53"
--dimensions Name=HealthCheckId,Value=YOUR_HEALTH_CHECK_ID
--statistic "Minimum"
--period 60
--threshold 1
--comparison-operator "LessThanThreshold"
--evaluation-periods 2
--alarm-actions "arn:aws:sns:us-east-1:123456789:SecurityAlerts"
--region us-east-1
# Tüm korumaları özetle görüntüle
aws shield list-protections
--region us-east-1
--query 'Protections[*].{Ad:Name,Kaynak:ResourceArn}'
--output table
Terraform ile Shield Advanced Yönetimi
Manuel konfigürasyon yerine Infrastructure as Code kullanmak, özellikle birden fazla hesap ve bölge yönetiyorsanız çok daha sürdürülebilir:
# Terraform ile Shield Advanced yapılandırması
# main.tf dosyasının içeriğini oluştur
cat > shield-advanced.tf << 'EOF'
# Shield Advanced aboneliği
resource "aws_shield_subscription" "main" {
auto_renew = "ENABLED"
}
# ALB koruması
resource "aws_shield_protection" "alb" {
name = "production-alb-protection"
resource_arn = aws_lb.production.arn
tags = {
Environment = "production"
Team = "platform"
ManagedBy = "terraform"
}
}
# CloudFront koruması
resource "aws_shield_protection" "cloudfront" {
name = "production-cf-protection"
resource_arn = aws_cloudfront_distribution.main.arn
tags = {
Environment = "production"
Team = "platform"
}
}
# Koruma grubu
resource "aws_shield_protection_group" "production" {
protection_group_id = "production-resources"
aggregation = "MAX"
pattern = "ARBITRARY"
members = [
aws_lb.production.arn,
aws_cloudfront_distribution.main.arn
]
}
# Shield attack alarm
resource "aws_cloudwatch_metric_alarm" "ddos_attack" {
alarm_name = "shield-ddos-detected"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "DDoSDetected"
namespace = "AWS/DDoSProtection"
period = "60"
statistic = "Sum"
threshold = "1"
alarm_description = "DDoS saldirisi tespit edildi"
alarm_actions = [aws_sns_topic.security_alerts.arn]
}
EOF
# Terraform planı kontrol et
terraform plan -target=aws_shield_protection.alb
Shield Advanced Fiyatlandırması ve ROI Hesabı
3.000 USD/ay fiyat etiketini gören pek çok yönetici, Shield Advanced’ı pahalı buluyor. Ama şöyle düşünün: Başarılı bir DDoS saldırısı sonrasında oluşabilecek maliyetler neler?
- Downtime maliyeti (e-ticaret için dakikada binlerce USD olabilir)
- Saldırı sırasında oluşan AWS faturası (auto-scaling devreye girerse)
- İtibar kaybı ve müşteri kaybı
- Olay müdahale ekibinin mesai maliyeti
- Forensic analiz maliyeti
Günde 100 USD’nin altındaki bir maliyet olan Shield Advanced, bu risklere karşı makul bir yatırım. Özellikle SLA’larınız varsa ve downtime cezaları söz konusuysa, hesabı kolayca çıkarabilirsiniz.
Sık Yapılan Hatalar
Yıllarca AWS ortamlarında çalışırken gördüğüm yaygın hataları paylaşayım:
- Shield Advanced açmak ama WAF entegre etmemek: Layer 7 koruması olmadan Advanced’ın etkisi yarım kalır. WAF olmadan HTTP flood’a karşı savunmasız olursunuz.
- Sadece bir kaynağı korumaya almak: CloudFront korudunuz ama ALB’yi unuttunuz? Saldırganlar ALB’nin IP’sini bulup doğrudan vurabilir.
- CloudWatch alarmı kurmamak: Saldırıdan saat sonra haberdar olmak, pratik olarak habersiz olmakla aynı şeydir.
- DRT ile ilişki kurmamak: Shield Advanced aldıktan sonra AWS’nin DDoS Response Team’i ile proaktif bir görüşme yapın. Saldırı anında tanımadığınız biriyle iletişim kurmak zor olur.
- Terraform veya IaC kullanmamak: Manuel konfigürasyon, farklı hesaplarda tutarsızlığa yol açar.
Sonuç
AWS Shield, düzgün konfigüre edildiğinde altyapınızın ön saflarındaki en güçlü kalkanlardan biridir. Standard katman, temel saldırılara karşı otomatik koruma sağlar. Advanced ise Layer 7 koruması, gerçek zamanlı görünürlük, WAF entegrasyonu ve maliyet korumasıyla bu temel üzerine kurumsal düzey bir savunma inşa eder.
Ama şunu unutmayın: Shield, sihirli bir koruyucu değildir. Doğru konfigürasyon, düzenli test, CloudWatch alarmları ve güçlü WAF kuralları olmadan Shield Advanced bile yetersiz kalabilir. Tıpkı en iyi güvenlik duvarının yanlış kurallarla işe yaramaz hale gelmesi gibi.
Bu konuda pratik bir tavsiyem şu: Hemen bir Shield Advanced kaydı açıp tüm kritik kaynaklarınızı ekleyin, WAF ile entegre edin, CloudWatch alarmlarını kurun ve bir DDoS simülasyon testi yapın. AWS, onaylı iş ortakları aracılığıyla kontrollü DDoS testlerine izin veriyor. Test etmediğiniz hiçbir savunma mekanizmasına güvenmeyin.
