DevOps/AWS

[WAF] NestJS 애플리케이션 AWS에 배포하기 08

kyoulho 2023. 4. 25. 13:16

인프라 구성도

이번 시간에는 ALB를 방어하기 위해 WAF를 설정하겠습니다

 

WAF(Web Application Firewall)

기본적으로 AWS에 모든 리소스는 AWS Shield Standard로 보호됩니다. Shiled Standard는 네트워크 레벨에서의 DDos 보호, SYN Flood, UDP Flood 및 Reflection Attacks와 같은 공격 유형에 대한 자동 탐지 및 차단, 대역폭 공격에 대한  자동 스무딩을 무료로 제공합니다.

만일 더 다양한 보안 위협을 탐지 및 차단하고 싶다면 WAF를 사용하는 게 좋습니다.

 

WAF는 아키텍처의 변경 없이 CloudFront, API Gateway, AppSync, ALB에 적용할 수 있으며 웹 ACL(액세스 제어 목록)을 정의한 다음 보호하려는 리소스에 연결하여 요청을 허용, 차단, 카운팅, CAPTCHA 또는 챌린지 확인 등을 진행할 수 있습니다.

웹 ACL은

사용자가 작성할 수도 있으나 AWS에서 제공하는 사전 구성된 보안규칙이나 Marketplace에서 제공하는 규칙들을 비용을 지불하고 사용할 수도 있습니다.

 

WAF 생성하기

WAF & Shield 서비스에서 Create web ACL을 선택합니다.

 

WAF가 사용될 리소스에 리전을 먼저 선택합니다. 리전이 바뀌면 모든 인풋이 리셋됩니다. 이름을 지어주고 WAF를 적용한 리소스의 타입과 리소스를 선택해줍니다.저는 ALB를 선택했습니다.

 

이미 정의되어 있는 룰을 적용하려면 Add managed rule groups를 선택하고
직접 룰을 생성하려면 Add my own reules and rule groups를 선택합니다.

저는 AWS에서 이미 정의되어있는 룰을 사용하기 위해서 Add managed rule groups를 선택합니다.

 

AWS와 AWS Marketplace sellers에 의해 등록된 룰 그룹 목록입니다.  룰 그룹을 선택 후 Edit을 선택하면 룰 그룹 내에 각각의 룰을 변경할 수 있습니다. 저는 AWS managed rule groups에서 무료로 이용할 수 있는 Core rule set을 선택했습니다. 그 외에는 SQL Injection이나 POSIX를 방어하는 룰 그룹이 존재합니다.

무료로 사용할 수 있다고 해서 WAF가 무료라는 뜻은 아닙니다. 룰 그룹을 무료로 사용할 뿐 비용은 리소스에 개수와 요청 개수 등에 비례해 측정됩니다. 예상 비용을 계산하려면 아래 링크를 이용해 주세요.

https://aws.amazon.com/ko/waf/pricing/

 

Default action에서 룰에 매칭되지 않는 요청들을 허용할지 차단할지 선택합니다.

 

룰 그룹에 우선순위를 지정해 줍니다.

 

CloudWatch에서 사용될 metric name과 Request samplin options를 선택해 줍니다. 

이 옵션은 애플리케이션에서 수집한 샘플 요청을 사용하여 AWS WAF 규칙을 검증하고, 규칙이 올바르게 동작하는지 확인할 수 있는 기능입니다.

Enable sampled requests: 이 옵션을 선택하면, WAF V2는 규칙이 적용되는 요청 중 일부를 샘플링하여 통계 정보를 수집합니다. 이 옵션을 사용하면 규칙이 실제로 어떻게 작동하는지 확인할 수 있습니다.

Disable sampled requests: 이 옵션을 선택하면, WAF V2는 샘플링을 사용하지 않습니다. 이 경우에는 WAF V2가 적용된 요청의 모든 데이터가 사용됩니다.

Enable sampled requests with exclusions: 이 옵션을 선택하면, 특정 URL, IP 주소, 사용자 에이전트 등과 같이 특정 요청에서 샘플링을 제외할 수 있습니다. 이는 일부 요청에서는 샘플링하지 않으려는 경우 유용합니다.

 

 

한번 확인해 준후 Create web ACL을 선택하여 생성해 줍니다.

 

기본적인 WAF 생성 및 설정을 해보았습니다.

AWS Inspector 등을 이용해 방화벽이 정상 작동하는지 확인해 주세요.