AWS WAF, CloudWatch, Grafana 연동
개요
AWS WAF를 구축부터 WAF 로그를 모니터링 하는 Grafana와 연동하는 방식을 정리하였습니다.
해당 포스팅에서는 기본적으로 이미 구축되어 있는 EC2, Application Load Balancer 및 Grafana가 이미 있다는 가정 하에 진행합니다.
AWS WAF 구축
1.
AWS의 WAF & Shield 서비스로 이동합니다.
2.
Create Web ACL 버튼을 클릭하면 생성 페이지로 이동합니다.
3.
Create Web ACL 페이지로 넘어왔다면 Region 먼저 EC2와 ALB와 동일한 Region으로 변경합니다. 이후 이름을 입력합니다.
4.
Add AWS resources > Application Load Balancer를 클릭하여 WAF를 적용할 ALB를 선택 후 추가합니다.
5.
룰 추가 전 유의해야 할 사항은 아래와 같습니다
•
WCUs가 1500이 초과된 경우에 대해서 비용 부가됩니다.
6.
Add rules을 확인하면 개인 룰과 AWS에서 제공하는 룰 그룹을 선택할 수 있습니다. 무료로 사용 할 경우 Add Managed rule groups > AWS managed rule groups 내 Free rule groups를 이용하여 WCUs가 1500이 넘지 않게 구성하시면 됩니다.
7.
룰 셋 구성 후 계속 진행하면 룰 셋에 대한 정보 확인 후 WCL을 생성 할 수 있습니다.
WAF CloudWatch 설정
1.
생성한 WAF를 클릭하여 Logging and metrics 탭으로 이동 합니다.
2.
Logging 을 Enable로 변경 시도하면 로그 방식을 선택하는 창(Enable logging)으로 이동 됩니다.
3.
CloudWatch Logs log group을 선택하고 Create new를 선택하면 CloudWatch 생성 창으로 이동 됩니다.
•
CloudWatch 생성 시 aws-waf-logs-라는 접두어를 추가하고 생성해야 합니다.
4.
다시 Enable logging창으로 돌아와서 CloudWatch Logs log group 리스트를 새로고침 하고 생성한 CloudWatch를 선택해 줍니다. 이 때 앞에서 말한 접두사를 붙이지 않은 CloudWatch의 경우 리스트에 보이지 않습니다.
5.
Redacted fields에 로그에 적재하지 않을 요소를 클릭하고 저장하면 됩니다.
6.
이후 CloudWatch에서 ALB를 통해 접근하는 패킷에 대한 로그를 확인할 수 있습니다.
Grafana 연동
1.
가장 먼저 Grafana에 CloudWatch 데이터를 추가해 줍시다. Configuration(톱니바퀴) > Data sources 탭 내 Add data source를 클릭합닏.
2.
CloudWatch를 검색하여 추가합니다.
3.
AWS IAM 키 값을 이용하여 연동하기 때문에 Authentication Provider 방식을 Access & secret key로 변경해줍니다.
4.
AWS IAM 페이지 이동하여 Grafana 연동을 위한 사용자를 생성하도록 합시다. 액세스 관리 > 사용자 > 사용자 생성으로 이동하여 사용자 이름을 작성합니다.
5.
권한 옵션 > 직접 정책 연결로 이동하여 CloudWatch 및 CloudWatchLog의 Readonly 정책만 추가합니다.
6.
사용자를 생성하고 클릭해서 사용자 정보를 확인하여 액세스 키 만들기를 클릭합니다.
7.
액세스키 사용 사례 > 기타로 생성하면 액세스 키와 비밀 액세스 키를 확인할 수 있습니다.
•
비밀 액세스 키의 경우 다시 확인할 수 없기 때문에 export 하여 별도로 저장하시길 바랍니다.
8.
다시 Grafana로 돌아와서 Access Key ID, Secret Access Key에 각각의 값을 입력하고 Default Region을 설정합니다. Save & Test로 확인하여 아래와 같은 문구가 나오면 정상적으로 연동 완료 된 것입니다.