전공영역 공부 기록

AWS WAF 사용방법과 운영 적용방안

악분 2023. 9. 17. 22:10
반응형

안녕하세요. 이 글은 AWS WAF를 공부하면서 정리한 내용입니다. WAF를 실습하기 위한 환경은 테라폼으로 자동화 했습니다. WAF는 AWS콘솔로 수동으로 생성했습니다.

실습환경 아키텍처

 

  • 이 글은 유투브로도 만나볼 수 있습니다.

유투브 링크: https://youtu.be/fweHx0vFCS8?si=G30OKDbqDmU9Qiad 

 

 

1. AWS WAF란?

AWS WAF는 웹 어플리케이션을 보호하는 웹(어플리케이션)방화벽입니다. WAF는 사용자 요청을 검사하여 AWS리소스로 전달할지 거부할지 결정합니다.  

 

WAF는 웹 어플리케이션을 보호하기 때문에 HTTP프로토콜을 사용하는 AWS리소스만 연결 가능합니다. 예로 cloudfront, application loadbalancer, api gateway등이 있습니다. WAF는 HTTP프로토콜 요청을 검사하므로 웹 애플리케이션이 아닌 다른 애플리케이션이나 AWS리소스에는 연동하지 못합니다.

 

2. 사용방법

WAF는 AWS가 관리하므로 설정만 하면 됩니다. WAF를 사용하기 위해 2가지 설정이 필요합니다.

  • WEB ACL 생성
  • WAF를 AWS리소스에 연결

 

WEB ACL(액세스 제어 목록)에는 사용자 요청을 검사할 규칙이 있습니다. 사용자 요청이 WEB ACL에 있는 규칙과 일치한다면, 해당 규칙이 지정한 액션에 따라 요청이 처리됩니다. 예를 들어 액션이 허용이라면 요청이 허용되고, 반대로 액션이 거부라면 요청이 거부됩니다. 사용자 요청이 WEB ACL이 관리하는 규칙에 일치하지 않으면 디폴트 액션을 따릅니다.

 

2.1 WEB ACL생성

WAF 대시보드에서 서울리전을 선택하고 Create with ACL 버튼을 클릭합니다.

 

WEB ACL이름을 입력합니다. Resource type은 Regional을 선택합니다. Regional을 선택한 이유는 실습환경에서 WAF를 적용할 대상이 ALB이기 때문입니다. ALB는 리전에 속하는 리소스입니다.

 

Default action을 Allow로 설정합니다.

 

나머지 설정화면은 전부 디폴트를 사용하고 Next버튼을 클릭하여 WEB ACL을 생성합니다. 생성한 WEB ACL은 WEB ACL대시보드에 보입니다.

 

 

2.2 WEB ACL에 규칙 추가

WAF를 AWS리소스에 연결하는 방법은, 생성한 WEB ACL을 AWS리소스에 연결합니다.

 

리소스가 연결되면, Associated AWS resources메뉴에 리소스 이름이 보입니다.

 

3. WEB ACL에 규칙 추가

WEB ACL에 규칙을 추가하는 방법은 2가지입니다. 사용자가 직접 규칙을 만들거나 AWS가 관리하는 Managed 규칙을 추가할 수 있습니다. Managed 규칙 중에 돈을 지불해야 사용가능한 규칙이 있습니다.

 

규칙을 WEB ACL에 무한정 추가할 수 없고 capacity unit범위 안에서만 추가할 수 있습니다. capacity unit을 WCUs라고 부릅니다. WCUs는 5000 capacity까지 허용하고 1500이 넘으면 비용이 부과됩니다.

 

4. 실습 

실습과정은 유투브 영상으로 대체합니다.

https://youtu.be/fweHx0vFCS8?si=kCVs76k1XAIokvAX&t=420 

 

5. WEB ACL 규칙 검사 순서

WEB ACL에 규칙이 여러 개라면, 우선순위 따라 규칙을 사용하여 사용자 요청을 검사합니다. 만약 규칙이 매핑되면 바로 규칙의 액션을 사용하고, 하위 우선순위 규칙은 사용하지 않습니다.

 

우선순위는 WEB ACL대시보드에서 Priority필드에 있습니다. 아래 그림은 모든 트래픽 허용 규칙이 우선순위가 제일 높습니다.

 

6. 규칙 검사 순서 주의사항

매핑되는 규칙 액션을 바로 사용하므로 규칙 우선순위를 고려하여 규칙 우선순위를 설정해야 합니다. 중요한 규칙이 우선순위를 낮게 설정하면, 상위 우선순위 규칙때문에 사용되지 않는 상황이 생깁니다.

 

7. WAF를 운영한다면...

WAF를 잘못 적용하면 서비스까지 사용자 요청이 전달이 안되어 장애가 발생할 수 있습니다. 그래서 규칙을 바로 WAF에 적용하지 않고 모니터링 기간이 필요합니다.

 

2021우아콘에서 WAF 운영과 v1 -> v2 마이그레이션 과정을 자세히 설명합니다. 시간이 있으시면 보시는 것을 추천합니다.

  • 유투브 영상 링크:  https://youtu.be/HTjOj4qM4Xo?si=5nr7tbtYx-EEaGC3

출처:   https://youtu.be/HTjOj4qM4Xo?si=5nr7tbtYx-EEaGC3

 

7.1 WAF 로그 저장

WAF로그는 2곳에 저장됩니다.

  • sample request(디폴트): 마지막 3시간 전 로그 저장
  • 장기저장(선택): WAF로그를 영구 저장

 

sample request는 현재 시간을 기준으로 마지막 3시간 전까지 로그만 임시 저장합니다. 그러므로 짧은 기간을 모니터링 할 때 적합합니다.

 

3시간을 초과한 WAF로그를 분석하려면 영구저장 설정을 해야 합니다. 로그를 저장할 위치는 cloudwatch, kinesis firehose, s3 bucket 중 한 개를 선택할 수 있습니다.

 

7.2 모니터링 방법

WAF 테스트와 모니터링은 운영환경과 동일한 스테이지환경 또는 QA환경에서 테스트하는 것을 권장합니다. 운영환경에서 테스트하면 기존 서비스에 영향이 미칠 수 있고 테스트 규칙때문에 보안위험이 노출될 수 있습니다. 

 

 

만약 운영환경에서 규칙을 테스트해야 한다면 액션을 count로 설정합니다. count는 허용, 거절하지 않고 로그만 남깁니다. 그리고 하위 우선순위 규칙을 실행합니다. 만약 모든 규칙의 액션이 count이면 디폴트 액션이 실행됩니다.

 

반응형