[AWS] Send WAF logs to S3/ElasticSearch

DaBeen Yi
5 min readJun 2, 2021

--

About WAF, Kinesis, S3 and ElasticSearch

AWS WAF 생성 후, 감사 및 장애 대응을 위해 WAF의 로그를 수집하고 분석할 필요성을 느꼈다. 그래서 찾아본 결과를 간단하게나마 정리해보려고 한다!

일단 WAF에서 발생하는 로그를 분석하기 위한 architecture(?)는 대략 다음과 같다.

https://aws.amazon.com/ko/blogs/security/how-to-analyze-aws-waf-logs-using-amazon-elasticsearch-service/

나의 경우에는 WAF는 이미 구성이 되어있는 상태이고.. 이 포스팅을 작성하면서 (1) Kinesis, (2) WAF log 저장용 S3 그리고 분석을 위한 (3) ElasticSearch를 구성해볼 예정이다.

그럼 각 구간을 하나씩 살펴봄과 동시에 생성해보자!

아젠다는 다음과 같다.

  • ElasticSearch 설명
  • ElasticSearch Hands-On
  • Kinesis 설명
  • Kinesis Hands-On
  • WAF 설정

ElasticSearch

한마디로 말해서 OpenSource 탐색 엔진 그리고 로그 분석 툴 정도로 알아두면 될 것 같다.

아래 설명할 Kinesis firehose가 WAF logs를 전달하면 이 로그를 저장, 분석하고 Kibana라는 tool을 사용해서 시각화한다.

ElasticSearch Hands-On

ElasticSearch를 생성할 때는 별 다른 주의 사항은 없다.

처음 리전 선택만 주의하고 나머지는 각자의 상황에 맞게 옵션을 선택하면 된다. 나의 경우는 아래와 같이 옵션을 선택하여 생성을 진행하였다. (대부분 Default로 설정)

1)

리전 주의! (원하는 리전 다시 한번 확인할 것)

2)

Cofigure domain, Custom endpoint, Auto-tune

3)

Data nodes, Data nodes storage

4)

기타 등등 설정

여기까지 설정을 완료하면 아래와 같이 새롭게 생성된 도메인을 확인할 수 있다.

ElasticSearch는 일단 여기까지 생성해두고 다음은 WAF와 ElasticSearch를 연결하는 Kinesis를 살펴보자 👀

Kinesis 설명

WAF의 로그를 분석하기 위해서는 AWS의 Kinesis라는 기능을 사용해야한다고 한다.

Kinesis라는 서비스 내에도 역할에 따라 3가지 종류로 서비스가 세분화 되어있음을 확인할 수 있었다.

아직 완벽하게 파악하지는 못했지만 아주아주 간단하게 정리하면 아래와 같다.

  • Amazon Kinesis Data Stream: 정보 수집
  • Amazon Kinesis Data Firehose: 정보 전달
  • Amazon Kinesis Data Analytics: 분석

Logs 수집은 이미 WAF에서 이루지고 있기 때문에 이를 S3와 ElasticSearch로 보내기 위해서 Data Firehose를 이용한다.

Kinesis Hands-On

Kinesis 생성 시에는 몇 가지 주의 사항이 있다.

  • Kinesis 생성 시에는 이름을 꼭 `aws-waf-logs-` 라고 생성해야한다.
  • 만일 Kinesis를 CloudFront와 연동할 예정이라면 Kinesis는 반드시 Northern Virginia Region에 위치해야한다.

1)

2)

WAF 설정

위의 순서를 따라 ElasticSearch와 Kinesis 설정을 모두 마쳤다면 본격적으로 WAF에서 Logging을 활성화해주어야 한다.

위에서 생성한 Kinesis 선택

여기까지가 WAF의 로그를 저장하고 분석하기 위한 기본 세팅이고 다음 포스팅에서는 이렇게 ElasticSearch로 모인 logs을 어떻게 분석하는지 살펴보려한다. 🍰

--

--