WAF는 ALB, CloundFront, API Gateway 등의 앞단에 위치하여 정의된 규칙(Rule)에 따라 웹 요청을 허용하거나 차단하는 방화벽 서비스이다.
1. 왜 일반 방화벽(보안 그룹)만으로는 부족한가?
- 보안 그룹(Security Group): IP주소와 포트 번호를 기준으로 차단한다.
- WAF: HTTP 메시지의 내용을 뜯어본다 → 수상한 문구가 포함된 요청을 차단하라는 정교한 제어가 가능하다.
2. WAF의 핵심 구성 요소
2.1. Web ACL (Access Control List)
- WAF의 최상위 단위이다. 하나의 Web ACL을 만들어 ALB나 API Gateway에 연결한다. 이 안에 여러 개의 ‘규칙(Rule)’을 담는다.
2.2. 규칙 (Rule)
트래픽을 검사하는 조건이다.
- 관리형 규칙(Managed Rules): AWS 전문가들이 미리 만들어둔 규칙 세트이다. (예: SQL 인젝션 방어, 알려진 봇 차단, 리눅스 서버 취약점 방어 등) 개발자가 직접 로직을 짤 필요 없이 선택만 하면 된다.
- 사용자 지정 규칙(Custom Rules): “특정 IP 대역은 차단한다”, “요청 헤더에 특정 토큰이 없으면 막는다” 등 서비스 특성에 맞는 규칙을 직접 만든다.
2.3. IP 세트 (IP Sets)
- 자주 차단해야 하는 악성 IP 리스트나, 반대로 화이트리스트 IP들을 묶어서 관리한다.
3. 백엔드 개발자가 알아야할 WAF의 주요 기능
3.1. 일반적인 웹 공격 방어
- SQL Injection: 데이터베이스를 파괴하는 쿼리 삽입 공격을 차단한다.
- XSS (Cross-Site Scripting): 악성 스크립트 삽입을 차단한다.
3.2. 속도 기반 제한 (Rate Limiting)
- 특정 IP가 짧은 시간 동안 너무 많은 요청을 보내면 자동으로 해당 IP를 일정 시간 차단한다.
- DDos 공격이나 무차별 대입(Brute-force) 공격을 막는 데 매우 효과적이다.
3.3. 봇 제어 (Bot Control)
- 검색 엔진 로봇은 허용하고, 정보를 무단으로 긁어가는 스크래핑 봇이나 악의적인 스캐너 봇은 식별하여 차단한다.
3.4. 지리적 차단 (Geo Match)
- 서비스 타겟 국가가 한국뿐이라면 다른 특정 국가에서 오는 모든 요청을 원천 하단하여 공격 범위를 좁힐 수 있다.
4. 실무 적용 시 주의사항
- 오탐(False Positive) 주의
- 보안을 너무 강화하면 정상적인 사용자의 요청도 차단될 수 있다 (예: 사용자가 입력한 게시글 내용이 우연히 SQL 키워드와 겹치는 경우)
- 처음에는 Count 모드(실제로 차단은 안 하고 기록만 남김)로 운영하여 로그를 분석한 뒤 문제가 없을 때 Block 모드로 전환하는 것이 정석적이다.
- 비용 관리
- WAF는 Web ACL 개수, 규칙 개수, 그리고 처리하는 요청 수에 따라 비용이 발생한다. 트래픽이 매우 많은 서비스라면 비용 설계를 미리 해야한다.
- 로그 분석
- 차단된 요청의 상세 내용은 CloudWatch Logs나 S3에 저장할 수 있다. 접속이 안 된다는 문의가 왔을 때 WAF 로그를 먼저 확인해야 할 수도 있다.
5. 백엔드 보안 계층도
- AWS WAF: HTTP 계층 공격 방어
- ALB / API Gateway: 부하 분산 및 진입점
- 보안 그룹 (Security Group): 네트워크 계층 방어
- 애플리케이션 코드: 입력값 검증, 인증/인가 로직