[Daily morning study] AWS WAF와 Shield - 웹 애플리케이션 방화벽과 DDoS 방어
#daily morning study
AWS WAF (Web Application Firewall)
WAF는 HTTP/HTTPS 트래픽을 검사해서 악성 요청을 차단하는 레이어 7(애플리케이션 계층) 방화벽이다. 일반 방화벽이 IP/포트 기반으로 동작하는 것과 달리, WAF는 요청 내용(헤더, 쿼리 파라미터, 바디)을 분석한다.
AWS WAF는 다음 서비스와 연동된다:
- CloudFront (글로벌 엣지)
- Application Load Balancer (ALB)
- API Gateway
- AppSync
Web ACL (Access Control List)
WAF의 핵심 단위는 Web ACL이다. Web ACL은 여러 Rule과 Rule Group으로 구성되며, 각 요청은 규칙을 순서대로 평가해서 Allow / Block / Count / CAPTCHA 중 하나의 액션을 취한다.
요청 → Web ACL → Rule 1 → Rule 2 → ... → Default Action
Rule에는 우선순위(priority) 숫자를 붙이고, 낮은 숫자부터 평가한다.
Rule 유형
1. 관리형 규칙 (Managed Rule Groups)
AWS와 파트너사가 미리 만들어둔 규칙 세트. 별도 설정 없이 바로 붙여 쓸 수 있다.
| 규칙 그룹 | 설명 |
|---|---|
| AWSManagedRulesCommonRuleSet | OWASP Top 10 기반 범용 규칙 |
| AWSManagedRulesSQLiRuleSet | SQL Injection 방어 |
| AWSManagedRulesKnownBadInputsRuleSet | 알려진 악성 입력 패턴 |
| AWSManagedRulesBotControlRuleSet | 봇 트래픽 탐지 및 차단 |
2. 커스텀 규칙
직접 조건을 정의한다. 조건 유형은 아래와 같다.
- IP 세트: 특정 IP / CIDR 허용·차단
- 지리적 매칭 (Geo match): 국가 코드 기반 차단
- 문자열 매칭: 헤더, URI, 쿼리 스트링에 특정 문자열 포함 여부
- 정규식 (Regex): 패턴 매칭
- 크기 제약 (Size constraint): 요청 크기 제한
- 레이트 제한 (Rate-based rule): 동일 IP에서 5분 내 요청 수가 임계값 초과 시 차단
레이트 제한 예시
{
"Name": "RateLimitRule",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 2000,
"AggregateKeyType": "IP"
}
},
"Action": { "Block": {} }
}
5분 동안 동일 IP에서 2000회 초과 요청이 들어오면 차단한다.
WAF 로그
WAF 로그는 Kinesis Data Firehose를 통해 S3 / CloudWatch Logs / Splunk 등으로 전송할 수 있다. 로그에는 요청 URI, 헤더, 적용된 규칙, 최종 액션이 포함된다.
AWS Shield
Shield는 DDoS(Distributed Denial of Service) 공격으로부터 AWS 리소스를 보호하는 서비스다. 두 가지 티어가 있다.
Shield Standard (기본, 무료)
모든 AWS 계정에 자동으로 활성화되어 있다. L3/L4 공격(SYN Flood, UDP 반사 공격 등)에 대한 기본 보호를 제공한다.
- 추가 설정 불필요
- 비용 없음
- 자동으로 트래픽 이상 탐지 및 완화
Shield Advanced (유료)
월 $3,000 이상의 고가 서비스지만, 대규모 트래픽을 받는 서비스라면 고려할 가치가 있다.
| 기능 | Standard | Advanced |
|---|---|---|
| L3/L4 DDoS 보호 | ✅ | ✅ |
| L7 DDoS 보호 | ❌ | ✅ (WAF 연동) |
| DDoS 비용 환급 | ❌ | ✅ |
| 실시간 가시성 | ❌ | ✅ |
| AWS DRT 지원 | ❌ | ✅ |
| 고급 이벤트 감지 | ❌ | ✅ |
AWS DRT (DDoS Response Team): 공격 중 AWS 전문가 팀이 직접 완화 작업을 지원한다.
DDoS 비용 환급: 공격으로 인해 트래픽이 급증해 발생한 추가 비용을 환급해준다.
Shield Advanced 보호 대상
- EC2
- Elastic IP
- CloudFront
- Route 53
- ALB / Global Accelerator
WAF + Shield 조합 아키텍처
실무에서는 WAF와 Shield를 계층적으로 조합해서 사용한다.
인터넷
↓
Route 53 ← Shield Advanced
↓
CloudFront ← Shield Advanced + WAF Web ACL
↓
ALB ← Shield Advanced + WAF Web ACL
↓
EC2 / ECS
CloudFront 앞단에 WAF를 붙이면 엣지에서 악성 트래픽을 조기 차단해서 오리진 서버 부하를 줄일 수 있다.
WAF 우회 방지 포인트
WAF를 CloudFront에 붙였다면, ALB 직접 접근을 막아야 한다. 그렇지 않으면 공격자가 CloudFront를 우회해서 ALB에 직접 요청을 보낼 수 있다.
방법:
- ALB의 Security Group에서 CloudFront IP만 허용 → IP 대역이 너무 많아 관리가 어렵다
- CloudFront가 ALB에 커스텀 헤더를 추가하고, ALB에서 WAF로 해당 헤더 유무를 검사한다
CloudFront → ALB 요청에 X-Origin-Token: <비밀값> 헤더 추가
ALB WAF Rule: X-Origin-Token 헤더 없으면 Block
요금 모델
AWS WAF는 사용량 기반 과금이다.
- Web ACL 당: 월 $5
- Rule 당: 월 $1
- 요청 처리: 백만 요청당 $0.60
관리형 규칙 그룹은 별도 추가 요금이 붙는 경우도 있다.
정리
- WAF: HTTP/HTTPS 요청 내용을 분석해 SQL Injection, XSS, 레이트 리밋 등 L7 위협을 차단
- Shield Standard: 모든 계정 기본 제공, L3/L4 DDoS 기본 보호
- Shield Advanced: 유료, L7 보호 + DRT 지원 + 비용 환급
- 실무에서는 CloudFront + WAF + Shield Advanced를 함께 구성해 다층 방어(Defense in Depth)를 구현한다