본문 바로가기

Cloud

[AWS] 웹 방화벽(Web Application Firewall, WAF) 로깅 구성 - 2

이전 포스팅 글에서 AWS WAF 풀 로깅을 S3로 저장을 설정해봤다.

풀 로그 기록 활성을 진행한 뒤 한가지 문제? 가 있다.

해킹 공격이 발생하여 WAF 규칙의 로그를 확인하고 싶을 때 S3에 저장된 데이터가 어마어마해서 찾기가 너무 힘들다.

따라서 이번 글은 S3에 저장된 로깅정보를 Database 쿼리문을 통해 필요한 정보만 추출할 수 있는 서비스 해볼 것이다.

 

#AWS Glue 와 Athena 서비스란?

 

AWS Glue는 분석에 필요한 데이터를 쉽게 탐색, 준비, 조합할 수 있도록 제공하는 서비스이다.

 

AWS Athena는 표준 SQL을 사용해 S3에 저장된 데이터를 간편하게 분석할 수 있는 쿼리 서비스이다.

 

이번 글은 위에 서비스를 사용해서 나에게 정말 필요한 정보만 가져올 수 있도록 구축을 진행하고자 한다.

 

#AWS Glue 크롤러 생성

 

AWS Glue 콘솔 이동 후 Crawler 설정을 진행한다.

이전 포스팅글에서 WAF Log가 저장되는 S3경로를 확인하여 아래 입력 값으로 지정한다.

스토어 추가는 기본 옵션으로 넘어가자

여기서 IAM 역할 생성이 필요하며 네이밍은 본인이 원하는 이름으로 지정하여 생성한다.

이 기능이 필요한 목적?은 일별로 S3에 적재되는 WAF Log 데이터를 가져와서 적재하는 역할이 필요함으로 매일 UTC기준 12:00로 설정하였다 (사전에 테스트가 필요한 경우 온디맨드 설정으로 추천한다)

다음은 클로러에서 출력된 데이터를 적재하여야하는 데이터베이스가 필요하여 데이터 베이스 추가를 진행한 뒤 크롤러 생성은 마무리하면 Athena를 사용하기 위한 기본적인 준비는 완료될 것이다.

클로러가 정상적으로 동작한다면 다음 Athena 콘솔로 이동하여 DataBase 목록을 확인하면 클로러가 진행되면서 생성된 Database와 Table을 확인할 수 있다.

생성된 테이블을 확인하였으면 아래처럼 쿼리문을 작성하여 나에게 꼭 맞는 데이터만 가져올 수 있게된다.

 

#참고 쿼리문

쿼리문을 공식 AWS 문서에서 참고할 수 있으며 본인이 작성한 쿼리문 예시는 아래 공유한다.

 

select to_iso8601(from_unixtime(timestamp / 1000)) as time_ISO_8601,
terminatingruletype as Rule_Type,
terminating_reason_detail.terminatingrule.ruleid as Block_Reason,
action as Action,
httprequest.clientip as Source_IP,
httprequest.country as Country,
httprequest.uri as URI,
terminatingrulematchdetails as Match_Reason,
httprequest.args as Args,
httprequest.httpMethod as HttpMethod,
responsecodesent as response,
httprequest.headers as Header
from "데이터베이스명"."테이블명"
cross join unnest(coalesce(waf_full_log_kor.rulegrouplist, ARRAY[NULL])) as t(terminating_reason_detail)
where (terminating_reason_detail.terminatingrule.ruleid != '' or action ='BLOCK') and date_format(from_unixtime(timestamp / 1000),'%Y-%m-%d') between '2021-06-03' and '2021-06-04'