AWS에서 DDOS공격을 막기 위한 설정하기
2025. 6. 27. 12:35ㆍIT/S . e . v . e . r . I . n . f . r . a
AWS WAF, CloudFront, 그리고 Shield Standard 조합은 대규모 DDoS 공격과 과도한 다운로드 요청으로 인한 비용 급증을 효과적으로 방어하고 완화하는 강력한 전략입니다.
각 서비스는 다음과 같은 역할을 수행합니다:
- AWS Shield Standard: 추가 비용 없이 L3/L4 DDoS 공격에 대한 기본적인 자동 보호를 제공합니다.
- Amazon CloudFront: 콘텐츠를 엣지 로케이션에 캐싱하여 원본 서버의 부하를 줄이고, DDoS 공격 트래픽을 엣지에서 흡수하며, WAF와 연동됩니다.
- AWS WAF: CloudFront에 연동되어 L7 DDoS 공격, 웹 취약점 공격, 그리고 과도한 요청(다운로드 요청 등)을 애플리케이션 계층에서 필터링하고 차단합니다.
다음은 설정 순서와 각 단계별 주요 파라미터입니다.
전체 설정 순서 및 주요 파라미터
단계 1: 원본 서버 (Origin Server) 준비 🏢
CloudFront가 콘텐츠를 가져올 실제 애플리케이션 또는 스토리지 위치입니다.
- 원본 유형 선택:
- Application Load Balancer (ALB) 또는 EC2 인스턴스: 동적 웹 애플리케이션에 적합합니다.
- S3 버킷: 정적 웹사이트 호스팅이나 대용량 파일 다운로드(비디오, 이미지 등)에 적합합니다.
- 설정:
- ALB/EC2: 보안 그룹, 네트워크 ACL (NACL) 등을 통해 CloudFront IP 대역 또는 특정 IP 대역에서만 접근을 허용하도록 구성하여 직접 접근을 막고 보안을 강화합니다.
- S3 버킷:
- 버킷 정책: S3 버킷에 대한 직접적인 접근을 막고 CloudFront를 통해서만 접근 가능하도록 설정해야 합니다.
- Origin Access Control (OAC) 또는 Origin Access Identity (OAI) 설정: (매우 중요) CloudFront가 S3 버킷의 콘텐츠에만 접근할 수 있도록 보안을 설정합니다. OAC가 OAI보다 최신 방식이며 권장됩니다.
- 정적 웹사이트 호스팅 활성화 (선택 사항): S3를 정적 웹사이트로 호스팅할 경우 활성화합니다.
단계 2: AWS WAF Web ACL (Web ACL 생성) 🔒
CloudFront에 연결할 웹 방화벽 규칙 세트를 만듭니다.
- Web ACL 생성 시작:
- AWS WAF 콘솔에서 "Create web ACL"을 선택합니다.
- Region (리전): CloudFront와 연결할 것이므로 "Global (CloudFront)"를 선택합니다.
- Associated AWS resources (연결된 AWS 리소스): 이 단계에서는 아직 연결하지 않고, CloudFront 배포 생성 시 연결합니다.
- 규칙(Rules) 추가:
- AWS Managed Rule Groups (관리형 규칙 그룹) 추가 (권장):
- Purpose: AWS에서 미리 정의해 둔 일반적인 웹 취약점 및 봇 공격 방어 규칙 세트입니다.
- 추천 그룹:
AWSManagedRulesCommonRuleSet
(CRS): SQLi, XSS 등 일반적인 웹 공격 방어.AWSManagedRulesKnownBadInputsRuleSet
: 악성 IP 주소나 패턴 차단.AWSManagedRulesAnonymousIpList
: VPN, Tor 등 익명 프록시 차단 (필요시).AWSManagedRulesBotControlRuleSet
: 일반적인 봇 트래픽 관리 (비용 발생).
- Custom Rules (사용자 지정 규칙) 추가:
- IP Set Rules (IP 집합 규칙):
- Purpose: 특정 IP 주소(블랙리스트) 또는 IP 대역을 차단하거나 (화이트리스트) 허용합니다.
- Parameter: IP 주소 목록, CIDR 범위, Action (Block/Allow/Count).
- Rate-based Rules (속도 기반 규칙) ⭐️ (DDoS/과도한 다운로드 방어에 핵심):
- Purpose: 특정 IP 주소로부터 오는 요청 속도를 모니터링하고, 설정한 임계값을 초과하면 자동으로 차단합니다. 과도한 다운로드 요청이나 L7 DDoS 공격 방어에 매우 효과적입니다.
- Parameter:
- Rate limit (요청 임계값): 5분 동안 특정 IP에서 허용할 최대 요청 수 (예: 2000).
- Action (조치):
Block
(차단). - Aggregate key (집계 키):
IP address
(IP 주소 기준).
- 기타 규칙 (필요시): 특정 HTTP 헤더, 쿼리 문자열, 요청 본문 내용 등을 기반으로 하는 규칙.
- IP Set Rules (IP 집합 규칙):
- AWS Managed Rule Groups (관리형 규칙 그룹) 추가 (권장):
- Default Web ACL action (기본 웹 ACL 조치):
- 모든 규칙에 의해 허용되거나 차단되지 않은 요청에 대한 기본 동작을 설정합니다. 일반적으로
Allow
(허용)로 설정하여 오탐을 줄입니다. 엄격한 보안이 필요하면Block
으로 설정할 수도 있습니다.
- 모든 규칙에 의해 허용되거나 차단되지 않은 요청에 대한 기본 동작을 설정합니다. 일반적으로
- Metric Name (지표 이름): Web ACL의 CloudWatch 지표 이름을 지정합니다.
단계 3: Amazon CloudFront 배포 (CloudFront Distribution) 생성 🌐
WAF 웹 ACL을 연결하여 콘텐츠를 캐싱하고 전달하며 보안을 강화합니다.
- Create Distribution (배포 생성) 시작:
- Origin (원본) 설정:
- Origin domain (원본 도메인): 단계 1에서 준비한 ALB의 DNS 이름 또는 S3 버킷의 웹사이트 호스팅 엔드포인트 URL을 입력합니다. (S3 버킷 이름이 아님!)
- Origin access (원본 액세스): S3 버킷을 원본으로 사용하는 경우 "Origin access control settings (recommended)"를 선택하고 새로운 OAC를 생성하거나 기존 OAC를 사용합니다.
- Viewer protocol policy (뷰어 프로토콜 정책):
Redirect HTTP to HTTPS
(HTTP를 HTTPS로 리디렉션) 또는HTTPS Only
(HTTPS만)를 권장합니다.
- Default Cache Behavior (기본 캐시 동작) 설정:
- Cache policy (캐시 정책):
- 정적 콘텐츠(이미지, JS, CSS, 비디오 등)는
CachingOptimized
(캐싱 최적화)를 사용하여 엣지에서 최대한 캐싱되도록 합니다. - 동적 콘텐츠는
CachingDisabled
(캐싱 비활성화) 또는Managed-CachingDisabled
를 사용합니다.
- 정적 콘텐츠(이미지, JS, CSS, 비디오 등)는
- Allowed HTTP methods (허용된 HTTP 메서드): 애플리케이션에 필요한 메서드(GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE)만 선택합니다.
- Restrict viewer access (뷰어 액세스 제한): CloudFront Signed URL/Cookies를 사용할 경우 설정합니다 (콘텐츠 보호 시).
- Web Application Firewall (WAF) (웹 애플리케이션 방화벽): 단계 2에서 생성한 Web ACL을 선택하여 CloudFront에 연동합니다.
- Cache policy (캐시 정책):
- Distribution Settings (배포 설정):
- Price class : 사용자 트래픽의 지리적 분포를 고려하여 선택합니다. 비용 절감을 위해
Use only US, Canada and Europe
(미국, 캐나다 및 유럽만 사용)을 선택할 수도 있지만, 전 세계 서비스라면Use all edge locations
을 선택합니다. - Custom SSL certificate : 사용자 지정 도메인(예:
www.mycompany.com
)을 사용할 경우 ACM(AWS Certificate Manager)에서 발급받은 인증서를 선택합니다. - *Alternate domain names (CNAMEs) * 사용자 지정 도메인 이름을 입력합니다 (예:
www.mycompany.com
).
- Price class : 사용자 트래픽의 지리적 분포를 고려하여 선택합니다. 비용 절감을 위해
단계 4: DNS 레코드 업데이트 📡
사용자 트래픽이 CloudFront를 통해 서비스되도록 DNS 레코드를 변경합니다.
- Route 53 사용 시 (권장):
A
레코드 (Alias to CloudFront distribution): 도메인의 루트(example.com
) 또는 서브도메인(www.example.com
)에 대해 CloudFront 배포를 Alias 타겟으로 지정합니다.
- 다른 DNS 제공업체 사용 시:
CNAME
레코드:www.example.com
과 같은 서브도메인에 대해 CloudFront 배포 도메인 이름(d1234abcd.cloudfront.net
)을 가리키도록CNAME
레코드를 생성합니다.- 루트 도메인(Apex Domain)의 한계:
CNAME
레코드는 루트 도메인(예:example.com
)에는 직접 사용할 수 없습니다. 이 경우 Route 53으로 DNS를 이전하거나, 다른 DNS 제공업체가 CNAME Flattening 또는 ANAME 레코드를 지원하는지 확인해야 합니다.
단계 5: AWS Shield Standard 확인 ✅
AWS Shield Standard는 모든 AWS 고객에게 기본적으로 활성화되어 있습니다.
- 확인: Shield 콘솔에 접속하여 기본 보호가 적용되고 있음을 확인할 수 있습니다. 별도의 설정은 필요 없습니다. CloudFront를 사용하면 CloudFront 배포가 Shield Standard의 보호를 자동으로 받게 됩니다.
추가 고려사항 및 최적화
- 모니터링: CloudWatch를 통해 CloudFront, WAF, 원본 서버의 지표를 지속적으로 모니터링하여 이상 징후를 감지합니다. WAF 로그를 S3나 CloudWatch Logs로 전송하여 트래픽 패턴과 차단된 요청을 분석합니다.
- 비용 최적화: CloudFront의 캐싱 전략을 최적화하여 원본 서버로의 불필요한 요청을 줄이고, WAF 규칙을 효율적으로 구성하여 오탐 및 불필요한 비용 발생을 최소화합니다.
- 테스트: 모든 설정 변경 후에는 철저한 테스트를 통해 서비스가 정상적으로 작동하고 예상대로 트래픽이 필터링되는지 확인합니다. 특히 WAF 규칙은 서비스에 영향을 줄 수 있으므로
Count
액션으로 먼저 모니터링한 후Block
액션으로 변경하는 것이 안전합니다. - 공격 시뮬레이션: (선택 사항) 실제 서비스에 적용하기 전에 AWS DDoS Response Team과 협의하여 DDoS 공격 시뮬레이션을 진행하여 방어 체계를 검증할 수도 있습니다.
'IT > S . e . v . e . r . I . n . f . r . a' 카테고리의 다른 글
쉘 스크립트에서 메뉴 만들기 (0) | 2023.07.11 |
---|---|
Apache2.4에서 "client denied by server configuration"이라는 오류 발생시 (0) | 2022.07.07 |
쉘 스크립트에서 계산하기 [expr] (0) | 2022.05.30 |
XtraBackup(MariaBackup)에서 Stream 백업시 로깅하기 (0) | 2021.07.16 |
[shell] find로 검색한 리스트를 배열에 넣기 (0) | 2021.07.15 |
삼바 서버 설정하기 (0) | 2021.03.08 |