상위: Web Security
요약
AWS WAF(Web Application Firewall)는 웹 애플리케이션을 SQL Injection, XSS 등의 공격으로부터 보호하는 서비스입니다. HTTP/HTTPS 요청의 내용을 검사하여 악성 트래픽을 차단합니다.
핵심 개념
WAF vs 일반 방화벽
| 구분 | 일반 방화벽 (L3/L4) | WAF (L7) |
|---|---|---|
| 검사 대상 | IP, 포트 | HTTP 요청 내용 |
| 차단 기준 | 출발지 IP | SQL문, 스크립트, 패턴 |
| 예시 | "이 IP 차단" | "SELECT * FROM 포함 요청 차단" |
일반 방화벽: 택배 받는 사람만 확인 (IP/포트)
WAF: 택배 내용물까지 검사 (HTTP Body, Headers)
구성 요소
1. Web ACL (Access Control List)
규칙들의 모음집
Web ACL: "MyWebACL"
├── Rule 1: SQL Injection 차단 (Priority: 1)
├── Rule 2: XSS 차단 (Priority: 2)
├── Rule 3: 특정 국가 차단 (Priority: 3)
└── Default Action: Allow (기본 허용)
2. Rule (규칙)
트래픽 검사 조건 + 액션
Rule: "BlockSQLInjection"
├── Condition: URI에 "SELECT", "UNION", "DROP" 포함
├── Action: Block
└── Priority: 1 (숫자 낮을수록 먼저 평가)
3. Rule Group (규칙 그룹)
여러 규칙을 묶어서 관리
| 종류 | 설명 |
|---|---|
| AWS Managed | AWS가 관리하는 규칙 (OWASP, Known Bad Inputs 등) |
| Marketplace | 서드파티 제공 규칙 (F5, Fortinet 등) |
| Custom | 직접 만든 규칙 |
AWS Managed Rules (추천)
| Rule Group | 방어 대상 | 월 비용 |
|---|---|---|
| Core Rule Set (CRS) | OWASP Top 10 기본 방어 | $0 |
| SQL Database | SQL Injection | $0 |
| Known Bad Inputs | Log4j, Spring4Shell 등 | $0 |
| Linux/Windows OS | OS 명령어 삽입 | $0 |
| PHP/WordPress | PHP/WP 취약점 | $0 |
| Bot Control | 봇 트래픽 관리 | $10 |
| Account Takeover | 계정 탈취 방지 | $10 |
추천 조합
# 기본 보안 (무료)
- AWSManagedRulesCommonRuleSet # OWASP 기본
- AWSManagedRulesSQLiRuleSet # SQL Injection
- AWSManagedRulesKnownBadInputsRuleSet # 알려진 공격 패턴
# 언어/프레임워크별 추가
- AWSManagedRulesPHPRuleSet # PHP 사용 시
- AWSManagedRulesLinuxRuleSet # Linux 서버
Custom Rules 작성
예시 1: 특정 국가 차단
{
"Name": "BlockCountries",
"Statement": {
"GeoMatchStatement": {
"CountryCodes": ["RU", "CN", "KP"]
}
},
"Action": { "Block": {} }
}
예시 2: Rate Limiting
{
"Name": "RateLimitPerIP",
"Statement": {
"RateBasedStatement": {
"Limit": 2000, // 5분당 최대 요청 수
"AggregateKeyType": "IP"
}
},
"Action": { "Block": {} }
}
예시 3: Admin 페이지 IP 제한
{
"Name": "AdminIPRestriction",
"Statement": {
"AndStatement": {
"Statements": [
{
"ByteMatchStatement": {
"SearchString": "/admin",
"FieldToMatch": { "UriPath": {} }
}
},
{
"NotStatement": {
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:...:ipset/AllowedIPs"
}
}
}
}
]
}
},
"Action": { "Block": {} }
}
적용 가능한 서비스
| 서비스 | 리전 WAF | Global WAF |
|---|---|---|
| CloudFront | - | ✅ |
| ALB | ✅ | - |
| API Gateway | ✅ | - |
| AppSync | ✅ | - |
| Cognito | ✅ | - |
비용
요금은 2026-08 기준이며 변동될 수 있음
| 항목 | 비용 |
|---|---|
| Web ACL | $5/월 |
| Rule | $1/월 (per rule) |
| 요청 처리 | $0.60/백만 요청 |
| Bot Control | $10/월 + $1/백만 요청 |
예상 비용 계산
월 1000만 요청, Rule 10개 사용 시:
- Web ACL: $5
- Rules: $10 (10개 × $1)
- 요청: $6 (10M × $0.60/M)
= 총 $21/월
아키텍처에서의 위치
인터넷
│
▼
┌────────────────┐
│ CloudFront │
│ (CDN + WAF) │◀── AWS WAF 적용
└────────────────┘
│
▼
┌────────────────┐
│ ALB │◀── AWS WAF 적용 (선택)
└────────────────┘
│
▼
┌────────────────┐
│ EC2 / ECS │
└────────────────┘
Cloudflare WAF vs AWS WAF
| 항목 | AWS WAF | Cloudflare WAF |
|---|---|---|
| 비용 | 사용량 기반 | 플랜 기반 (Pro $25~) |
| 관리 | 직접 규칙 설정 | Managed Rules 중심 |
| 적용 대상 | AWS 서비스만 | 모든 웹서비스 |
| CDN 통합 | CloudFront 별도 | 자동 포함 |
| 학습 곡선 | 높음 | 낮음 |
선택 가이드
- AWS 올인: AWS WAF + CloudFront
- 간단한 설정: Cloudflare
- 하이브리드: Cloudflare (CDN) + AWS WAF (ALB)
관련 개념
- SQL Injection - WAF로 방어하는 대표적 공격
- XSS - Cross-Site Scripting 방어
- AWS Shield - DDoS 방어 (WAF와 함께 사용)
- Cloudflare - 대안적 WAF 서비스
- OWASP Top 10 - WAF가 방어하는 취약점 목록