■ 최종 서비스 구현 : WAF에서 특정 이벤트 발생 시, Lambda를 통해 Slack으로 관련 데이터 전송 ■ 준비 과정 1. WEB Server ALB 설정 : https://dobby-isfree.tistory.com/79 |
최종적으로는 WEB Server에 WAF 설정을 하고 싶었기에, 금번 게시물을 통해 WAF 설정 방법을 알아보도록 하자.
WAF(Web Application Firewall)이란?
WAF란 AWS DOCS에 나와있는 것처럼 HTTP 또는 HTTPS의 요청을 모니터링할 수 있는 AWS Service이다.
https://docs.aws.amazon.com/ko_kr/waf/latest/developerguide/what-is-aws-waf.html
이름에 나와있듯이 방화벽(FIrewall)의 역할을 하지만, WEB Request에 초점이 맞춰진 Firewall이라고 보면 된다.
일반적인 방화벽(Firewall)이 IP/Port 기반으로 허용/차단 한다면, WAF는 URI/Header/Data를 기준으로 허용/차단한다.
그렇기때문에 SQL Injection, Log4j 등과 같이 URI 또는 Header에 악의적인 요청을 차단하는 것이 주 목적이다.
사용자 → ALB → WAF → ALB → WEB Server순으로 트래픽이 흐르며, 일반적으로 아래와 같이 구성된다.
중요한 부분은 "ALB → WAF → WEB Server"이며, ALB로 인입되는 WEB Server 트래픽 중에서 악의적인 트래픽을 차단한다.
WAF(Web Application Firewall) 설정 방법
1. web ACL 생성 버튼을 클릭한다
- WAF를 web ACL로 표현하는 것 같다.
2. web ACL 상세 설정을 한다.
1) Resource type과 Region을 설정하는 것이 중요하다.
- Resource type은 WAF 설정할 Resource를 설정하는 것이다. 필자는 ALB이기에 Regional 을 선택했다.
- Region은 내가 WAF 설정할 Region이다. 나는 Seoul에 ALB가 있기에 Seoul을 선택했다.
2) WAF Resouces를 연결한다.
- 여기까지 왔다면, 이제 다 했다. 필자는 ALB를 연결하기에 ALB를 선택했으나
필요에 따라서 API Gateway 등을 선택할 수 있다.
3) WAF Rule 설정 및 기본 동작 설정
(1) Add rules을 통해 WAF의 rule을 설정할 수 있다.
- AWS에서 제공하는 항목 또는 F5, Fotinet에서 제공하는 rule을 구독할 수 있다.(물론 과금..ㅎㅎ)
- 또한, Custom rule을 만들수도 있다. Rule add는 다 생성된 이후에도 변경할 수 있으므로 넘어간다.
(2) "Defatule web ACL action ~"는 WAF의 기본 동작을 설정하는 부분이다. Allow 또는 Block을 설정할 수 있으며 아래와 같다.
- Allow : Rule에 Match 안될 경우, 기본적으로 모든 요청을 Allow 함
- Block : Rule에 Match 안될 경우, 기본적으로 모든 요청을 Block 함
- 즉, Allow는 대고객 서비스일때 일반적으로 사용하며, 악의적인 트래픽에 대해서 Block Rule을 설정할 떄 사용된다.
- 반대로, Block은 특정 IP/Host가 사용하는 서비스에서 사용되며, 기본 Blcok 정책에 Allow IP를 지정하여 사용한다.
필자는 그냥 TEST 이므로 Allow로 했다!!
3. web ACL 생성 완료!
지금까지 문제가 없었다면 아래와 같이 Web ACLs 항목에 위에서 지정한 WAF가 나오게 되고
선택해보면 각 WEB Server 요청에 대한 IP/URI를 알 수 있고,
URI 정보를 클릭하면 아래와 같이 상세 Request를 볼 수 있다.
여담으로 처음에 WAF를 설정했을 때, 어떤 Error가 뜨긴 했으나 web ACL 목록에 표기가 되었었다.
근데 아무리 WEB Server를 들어가도 로그가 안나타나는것이였다!!!
그래서 뭐 IAM 설정을 해야되는건지, S3 버킷 설정을 해야되는건지 엄청 삽질을 했었는데
결과적으로는 엄청 허무하게.. WAF에 AWS Resources 연결이 되지 않아서 로그가 없었던것이였다!!
(내가 이것때문에 얼마나 삽질을 했던지 ㅜㅜㅜ)
다음에는 WAF 로그를 CloudWatch로 전송하고,
Lambda를 통해 특정 이벤트가 발생할 경우 Slack으로 보내는 것을 구현해볼 생각이다!
그리고 TEST ALB, WAF로 계속 남겨둬서 Block 하기위한 정규 표현식 TEST를 해볼 생각이다!!
이전에 아래와 같이 WAF과 관련하여 유사 게시물을 게시한적이 있다
1. AWS WAF 서비스란 : https://dobby-isfree.tistory.com/59
2. AWS WAF 특이 이벤트 발생 : https://dobby-isfree.tistory.com/62
끄읏!
'기술 이모저모 > [AWS] Workshop' 카테고리의 다른 글
[AWS][SNS] Cloudwatch 경보 Slack 연동[2/2] (0) | 2022.05.06 |
---|---|
[AWS][SNS] Cloudwatch 경보 Slack 연동[1/2] (0) | 2022.05.06 |
[AWS][ALB] WEB SERVER ALB 구성 (0) | 2022.04.25 |
[Secworkshop] DevSecOps: Integrating security into pipelines (0) | 2022.03.01 |
[AWS][GuardDuty] AWS Resource 위협탐지 서비스 (0) | 2022.03.01 |