WiseN

[Re2021] AWS WAF 로그를 CloudWatch Logs나 S3로 바로 설정할 수 있습니다

Jan 07, 2022   |   AWS

작성자_박제호

페이스북 공유하기 트위터 공유하기
Blog thumbnail

안녕하십니까. GS네오텍 박제호입니다. 이번 글에서는 AWS WAF 서비스 로깅과 관련하여, 리인벤트 전후로 발표된 변경 사항에 대해서 소개해드리도록 하겠습니다.


기존의 WAF 로깅은 샘플데이터 기반으로 보여주도록 되어 있어서, 의미있는 값(Full Log)을 확인하기 위해서는 Amazon Kinesis Data Firehose를 추가로 연계하여 별도로 로깅을 설정해야 했습니다. 이것이 이번 업데이트로 Kinesis를 거치지 않고도 CloudWatch Logs와 S3에 대해 직접 로그 설정이 가능해졌습니다. 아래의 데모를 통해 내용을 확인해보도록 하겠습니다. (시간이 없으신 분은 글의 맨 아래 요약문단만 보셔도 됩니다.)


(1) CloudWatch Logs log group 으로 로깅 설정하기

먼저 [WAF] ▷ [Web ACLs]  [ACL 이름] ▷ ​[Logging and metrics] 탭으로 이동합니다. [Logging and metrics] 탭에서 Enable을 선택하면 아래와 같은 화면이 나옵니다. 기존에 만들어둔 WAFv2 용도의 그룹이 없으므로 [Create new]를 선택하여 CloudWatch Logs 화면으로 이동합니다.

 


 

어려운 설정 없이 이름만 입력하여 생성 가능합니다. 단, WAFv2 로깅 설정은 이름을 꼭 "aws-waf-logs-"로 시작해 주어야 합니다. 규칙을 지키지 않을 경우 이후 설정란에서 검색이 불가합니다.

 


 

생성 후 다시 WAF 로깅 설정란을 보면, 생성한 그룹 선택이 가능합니다.

 


 

설정 후 몇 분 이내에 WAF 로그가 쌓이는 것을 확인할 수 있습니다.

 


 

추가로 CloudWatch Logs를 쓰면 간단한 구문을 사용하여 빠르게 원하는 결과를 확인 가능합니다. 이 기능은 Web ACLs 화면의 Cloudwatch Log Insights 탭에서 사용 가능합니다.

 


 

 

(2) S3 로 로깅 설정하기

S3도 거의 동일한 방식으로 설정을 진행하실 수 있습니다. S3 bucket 선택 후 Create new 버튼을 클릭합니다.

 


 

앞서 말씀드린 규칙을 적용하여 "aws-waf-logs-"로 시작되는 bucket을 생성합니다. 

 


 

생성한 S3 bucket을 설정해줍니다.

 


 

기본값 gz압축된 WAF 로그가 지정된 Bucket으로 저장되기 시작합니다.

 


 

3. Kinesis Data Firehose stream 로 설정 (기존 방식 참고용)

마지막으로 이미 기존에 지원하고 있던 Kinesis 연동 방법입니다. Kinesis Data Firehose stream 선택 후 Create new 버튼을 클릭합니다.

 


 

일반적인 옵션인 출발지: PUT / 목적지: S3로 지정하겠습니다.

 


 


 

마찬가지로 생성규칙을 지켜 "aws-waf-logs-"로 시작하는 이름을 부여합니다.

 


 

Kinesis 설정 시 추가적인 행동을 수행하실 수 있는데, 그중 하나는 Lambda 함수와의 연계입니다. Lambda 함수 작성을 통해 로그처리에 대한 커스터마이징 자동화를 수행하실 수 있습니다.

 


 

기타 옵션은 기본값으로 두고 진행합니다. 몇 분 정도 후에, 지정한 목적지에 WAF 로그가 쌓이기 시작합니다.


앞서 WAF 로그를 설정할 수 있는 3가지 방법을 살펴보았습니다. 1차 로그 저장소로 기존 Kinesis만 지원하던 로깅 방식에 이번에 CloudWatch Group과 S3 Bucket 으로 지정하는 방식이 추가되었습니다. 사용자 관점에서 다양한 니즈를 비용효율적으로 충족할 수 있게 되고, 로깅을 위해 강제되었던 Kinesis로부터 어느정도 자유롭게 되어 의미가 있는 업데이트였습니다.

 

선택지가 다양해졌기 때문에, 다음 기준에 따라 WAF의 로그 저장소를 지정해 주시는 것을 추천합니다. 1) 기본적인 데이터를 저장하고 추후 분석을 하실 사용자라면 S3 Bucket을 2) Insight 기능을 이용하여 빠른 검색 기능으로 분석을 하실 사용자라면 CloudWatch Logs Group를 3) 로그를 특정 위치로 전달하거나, 전처리 후 분석을 하실 사용자라면 Kinesis를 선택하시면 되구요. 사실 기존처럼 Kinesis를 경유해서 S3나 CloudWatch Logs로 연계하는 구성이 유효하기 때문에 Kinesis 레벨에서 처리할 요건이 있는 경우 기존 방식을, 그런 요건이 없는 경우 S3나 CloudWatch Logs로 바로 로그를 내려주는 설정을 활용하시면 됩니다. 그럼 마칩니다. 끝!

 

[링크]

https://aws.amazon.com/about-aws/whats-new/2021/12/awf-waf-cloudwatch-log-s3-bucket/