Back/Server

AWS 로드밸런스 ACL 적용 EC2 WAF, ACL

이번 프로젝트에서 보안과 악의적 중복 요청 방지에 대해 고민하다 WAF를 선택했다.

물론 악성 쿼리나 중복 방지등등 여러 예외처리도 프론트와 백단에서 처리해야겠지만,
아무리 신경쓴다고 해도, 현재의 상황에선 한계점이 있을 것이라 생각했다.
AWS에서 규칙을 제공한다는 이야기를 듣고 도입해보기로 했다.

적용할 때 레퍼런스가 딱히 없어서 AWS 공식 문서를 보고 적용했다.



기본 정의

AWS WAF는 가용성에 영향을 주거나, 보안을 위협하거나, 리소스를 과도하게 사용하는 일반적인 웹 공격으로부터 웹 애플리케이션이나 API를 보호하는 데 도움이 되는 웹 애플리케이션 방화벽입니다. AWS WAF에서는 SQL 주입 또는 사이트 간 스크립팅과 같은 일반적인 공격 패턴을 차단하는 보안 규칙 및 사용자가 정의한 특정 트래픽 패턴을 필터링하는 규칙을 생성하도록 지원하여 애플리케이션에 트래픽이 도달하는 방법을 제어할 수 있습니다. 특정 트래픽 패턴을 필터링하는 규칙을 사용자 정의할 수도 있습니다. AWS 또는 AWS Marketplace Seller에서 관리하는 사전 구성된 규칙 집합인 AWS WAF의 관리 규칙을 사용하여 OWASP Top 10 보안 위험 및 과도한 리소스를 소비하거나 메트릭을 왜곡하거나 다운타임을 유발할 수 있는 자동화된 봇과 같은 문제를 신속하게 해결할 수 있습니다. 이러한 규칙은 새 문제가 나타나면 정기적으로 업데이트됩니다. AWS WAF에는 보안 규칙의 생성, 배포 및 유지보수를 자동화하는 데 사용할 수 있는 모든 기능을 갖춘 API가 포함되어 있습니다.

CDN 솔루션의 일부인 Amazon CloudFront, EC2에서 실행되는 웹 서버 또는 오리진 서버의 전방에 배치된 Application Load Balancer, REST API용 Amazon API Gateway, 또는 GraphQL API용 AWS AppSync에 AWS WAF를 배포할 수 있습니다. AWS WAF를 사용하면 사용하는 것에 대해서만 비용을 지불하고 가격은 배포한 규칙 수와 애플리케이션이 수신하는 웹 요청 수에 따라 결정됩니다.

출처 AWS

 

AWS WAF – 웹 애플리케이션 방화벽 – Amazon Web Services(AWS)

CDN 솔루션의 일부인 Amazon CloudFront, 모든 오리진 서버의 전방에 배치된 Application Load Balancer, REST API용 Amazon API Gateway, 또는 GraphQL API용 AWS AppSync에 AWS WAF를 손쉽게 배포하여 이러한 위치에 배포된 애

aws.amazon.com

 

 

WAF 선택

Create web ACL 을 선택한다.
가격은 월5달러 규칙당 월1달러
100만 요청당 0.60달러가 나간다.

 


ACL details 작성

로드밸런스를 사용할 거라 Regional resources를 선택한다.
그 후 밑의 Add AWS resources를 통해 기존에 생성된 로드밸런스를 추가해준다.

 

Rule작성

 

Add managed rule groups를 선택하여, 미리 정의된 규칙을 사용하기로 한다.

따로 설정된 것들이 있으면

Add my own rules and rule groups를 선택하면 된다.

 

현재 EC2, Linux-ubuntu, AWS-aurora를 사용 중이라,
적용될만한 규칙들을 골랐다.
Linux operating system, SQL database, Core rule set, bot control

ACL에선 규칙당 용량이 정해지는데,
현재 선택한 것들은 총1150이되겠다.
Default web ACL action for requests that don't match any rules Allow를 선택한다.

현재 해당 사진은 Block지만, 기본적으로 규칙과 일치하지 않은Allow를 선택하면 되겠다.



만약 규칙을 Block하겠다면
Custom response - optional을 누르고, Enable을 선택하면 응답값을 커스텀할 수도있다.

Response body에는 JSON, HTML 등 선택이 가능하다.

나는 json으로 작성했다.

그 후 Next를 계속 누르고, 샘플링 데이터를 요청하겠냐는 것은 뭐 때문에 샘플링이 필요한진 모르겠지만, Default로 설정되어 있어서, 그냥 선택하고 넘어갔다.

 

'Back > Server' 카테고리의 다른 글

[MySQL] Full Text Search Aws Aurora  (0) 2021.11.02
몽고DB 아틀라스 연결  (0) 2021.10.09
AWS EC2 HTTPS  (0) 2021.10.05
Nodejs Redis 활용  (0) 2021.08.22
리눅스, Node.js, mongoDB 설치 명령어  (0) 2021.03.21