AWS WAF, AWS Firewall Manager 및 AWS Shield Advanced
개발자 가이드 (API 버전 2015-08-24)

5단계: AWS WAF를 사용하여 악의적 웹 요청을 감지하고 필터링

웹 애플리케이션 방화벽(WAF)을 사용하여 웹 사이트의 취약성을 악용하려는 공격으로부터 웹 애플리케이션을 보호할 수 있습니다. 일반적인 예로는 SQL 명령어 주입 또는 교차 사이트 요청 위조 등이 있습니다. 또한 방화벽을 사용하여 웹 애플리케이션 계층 DDoS 공격을 감지하고 완화할 수 있습니다.

AWS WAF는 Amazon CloudFront 또는 Application Load Balancer에 전달되는 HTTP 및 HTTPS 요청을 모니터링할 수 있게 해주고 콘텐츠에 대한 액세스를 제어할 수 있게 해주는 웹 애플리케이션 방화벽 서비스입니다. AWS WAF에서도 콘텐츠에 대한 액세스를 제어할 수 있습니다. 요청이 허용되는 IP 주소나 쿼리 문자열의 값으로부터 지정하는 조건 등 지정하는 조건에 따라, CloudFront는 요청된 콘텐츠나 HTTP 403 상태 코드(금지됨)로 요청에 응답합니다.

일부 공격은 일반적인 사용자 트래픽처럼 보이도록 위장한 웹 트래픽으로 구성됩니다. 이러한 유형의 공격을 완화하기 위해 AWS WAF 요청률 기반 블랙리스팅을 사용할 수 있습니다. 요청률 기반 블랙리스팅을 통해 웹 애플리케이션이 처리할 수 있는 요청 수의 임계값을 설정할 수 있습니다. 봇 또는 크롤러가 이 한도를 초과하면 AWS WAF를 사용하여 추가 요청을 자동으로 차단할 수 있습니다.

AWS는 AWS WAF 규칙 세트가 포함되어 있는 미리 구성된 템플릿을 제공합니다. 이 템플릿을 필요에 맞게 사용자 지정할 수 있습니다. 이 템플릿은 불량 봇, SQL 명령어 주입, XSS(교차 사이트 스크립팅), HTTP flood 및 알려진 공격자 공격과 같은 일반적인 웹 기반 공격을 차단하도록 설계되었습니다. 이 자습서에서는 이러한 템플릿을 사용하여 웹 사이트를 방화벽으로 보호합니다. 다음 절차에는 AWS CloudFormation을 사용하여 템플릿을 배포하는 방법을 보여 줍니다. 템플릿의 솔루션 다이어그램을 비롯한 자세한 내용은 AWS WAF 보안 자동화 단원을 참조하십시오.

이 템플릿은 이 자습서에서 다루지 않는 AWS Lambda 및 Amazon API Gateway 등의 일부 AWS 기능을 사용합니다. 이 템플릿은 필요한 모든 구성을 수행하므로 그러한 서비스에 대한 추가 작업을 수행할 필요가 없습니다. 그러나 Lambda 및 Amazon API Gateway에 대해 자세히 알아보려면 AWS Lambda 개발자 안내서Amazon API Gateway 개발자 안내서 단원을 참조하십시오.

중요

Amazon S3, AWS Lambda, Amazon API Gateway, AWS WAF 등 이 템플릿의 일부로 배포되는 모든 AWS 서비스의 비용은 여러분이 지불해야 합니다. 세부 정보는 각 AWS 서비스의 요금 페이지를 참조하십시오.

스택 시작(템플릿)

이 자동화된 AWS CloudFormation 템플릿은 AWS 클라우드에 AWS WAF 보안 자동화 솔루션을 배포합니다.

AWS CloudFormation 스택을 시작하려면(템플릿)

  1. AWS CloudFormation 콘솔에 로그인합니다.

  2. AWS CloudFormation을 처음 사용하는 경우 템플릿 선택 페이지에서 Amazon S3 템플릿 URL 지정을 선택한 후 https://s3.amazonaws.com/solutions-reference/aws-waf-security-automations/latest/aws-waf-security-automations.template을 입력합니다. 이전에 AWS CloudFormation을 사용한 적이 있는 경우 스택 생성을 선택한 후 Amazon S3 템플릿 URL 지정을 선택하고 https://s3.amazonaws.com/solutions-reference/aws-waf-security-automations/latest/aws-waf-security-automations.template을 입력합니다.

  3. [Next]를 선택합니다.

  4. [Specify Details] 페이지에서 다음 값을 지정합니다.

    [Stack Name ]

    AWS WAF 구성의 이름을 입력합니다. 이 이름은 또한 템플릿이 생성하는 웹 ACL의 이름이 됩니다(예: MyWebsiteACL).

    SQL 명령어 주입 보호 활성화

    [yes]를 선택하여 일반적인 SQL 명령어 주입 공격을 차단하도록 설계된 구성 요소를 활성화합니다.

    교차 사이트 스크립팅 보호 활성화

    [yes]를 선택하여 일반적인 XSS 공격을 차단하도록 설계된 구성 요소를 활성화합니다.

    HTTP Flood 보호 활성화

    를 선택합니다. 이 구성 요소는 특정 IP 주소의 다수 요청으로 이루어진 공격(예: 웹 계층 DDoS 공격 또는 Brute-Force 로그인 시도)을 차단하도록 비율 기반 규칙을 구성합니다. 클라이언트의 웹 요청이 5분 내에 단일 IP 주소에서 허용되는 최대 수신 요청 수를 정의하는 구성 가능한 임계치를 초과할 때 비율 기반 규칙이 자동으로 트리거됩니다. 이 임계치가 초과되면 요청 비율이 임계치 아래도 떨어질 때까지 IP 주소의 추가 요청이 차단됩니다. 비율 기반 규칙에 대한 자세한 내용은 AWS WAF의 작동 방식 단원을 참조하십시오.

    스캐너 및 프로브 보호 활성화

    [yes]를 선택하여 스캐너 및 프로브를 차단하도록 설계된 구성 요소를 활성화합니다.

    신뢰도 목록 보호 활성화

    [yes]를 선택하여 타사 신뢰도 목록의 IP 주소에서 보내는 요청을 차단합니다(지원되는 목록: spamhaus, torproject, emergingthreats).

    불량 봇 보호 활성화

    를 선택합니다. 템플릿을 사용하려면 이 보호를 활성화해야 합니다. 그러나 이 보호를 최대한 활용하려면 허니팟 링크 생성 등 이 자습서에서 다루지 않는 추가 단계를 완료해야 합니다. 그러한 단계는 AWS WAF Security Automations, Step 3. Embed the Honeypot Link in Your Web Application에 설명되어 있습니다. 이러한 추가 단계는 선택 사항이며, 이 자습서를 완료하는 데 필요하지 않습니다. 이러한 추가 단계를 수행하려면 먼저 이 자습서를 완료한 후, 허니팟 링크를 설정합니다.

    CloudFront 액세스 로그 버킷 이름

    CloudFront 배포의 액세스 로그를 저장할 Amazon S3 버킷의 이름을 입력합니다. 이 이름은 템플릿이 스택 시작 중에 생성한 새 버킷의 이름입니다. 기존 이름을 사용하지 마십시오.

    중요

    이 필드는 필수 항목입니다. 이 정보를 생략할 경우 즉시 오류가 발생하지는 않지만 이름을 지정하지 않으면 생성 프로세스가 성공적으로 완료되지 않습니다.

    요청 임계값

    이는 HTTP flood 보호에 사용되므로, 이 자습서에는 해당되지 않습니다. 기본값 2000을 그대로 둘 수 있습니다.

    오류 임계값

    이는 IP 주소 한 개에 대해 분당 허용되는 잘못된 최대 요청 수입니다. 이는 스캐너 및 프로브 보호에서 사용됩니다. 기본값 50을 사용합니다.

    WAF 차단 기간

    이는 스캐너 및 프로브 보호를 통해 식별되는 해당 IP 주소를 차단할 기간(분)입니다. 기본값 240을 사용합니다.

    익명 사용 데이터 전송

    [yes]를 선택하여 고객 기반 전체의 솔루션 사용량을 파악할 수 있도록 AWS에 익명 데이터를 전송합니다. 이 기능을 옵트아웃하려면 [no]를 선택합니다.

  5. [Next]를 선택합니다.

  6. [Options] 페이지에서 아무 변경도 하지 않습니다.

  7. [Next]를 선택합니다.

  8. [Review] 페이지에서 설정을 검토하고 확인합니다. 템플릿이 AWS Identity and Access Management(IAM) 리소스를 생성할 것임을 승인하는 확인란을 선택해야 합니다.

  9. [Create]를 선택하여 스택을 배포합니다.

AWS CloudFormation 콘솔의 상태 열에서 스택의 상태를 볼 수 있습니다. 약 15분 후에 CREATE_COMPLETE 상태가 보일 것입니다.

웹 ACL을 웹 애플리케이션과 연결

이제 Amazon CloudFront 웹 배포를 웹 ACL과 연결합니다.

웹 ACL을 웹 애플리케이션과 연결하려면

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/waf/에서 AWS WAF 콘솔을 엽니다.

  2. 탐색 창에서 [Web ACLs]를 선택합니다.

  3. 새로 만든 웹 ACL을 선택합니다. 이 ACL의 이름은 이전 단계에서 지정한 이름입니다(예: MyWebsiteACL).

  4. [Rules] 탭을 선택합니다.

  5. [Add association]을 선택합니다.

  6. AWS resources using this web ACL(이 웹 ACL을 사용하는 AWS 리소스)에서 이 자습서에서 앞서 생성한 CloudFront 배포를 선택합니다.

  7. [Add]를 선택하여 변경 사항을 저장합니다.

웹 액세스 로깅 구성

이 자습서의 마지막 단계로서 웹 액세스 로그를 적절한 Amazon S3 버킷에 보낼 수 있도록 Amazon CloudFront를 구성합니다. 그러면 이 데이터를 Log Parser AWS Lambda 함수에 사용할 수 있습니다.

CloudFront 배포의 웹 액세스 로그를 저장하려면

  1. https://console.aws.amazon.com/cloudfront/에서 Amazon CloudFront 콘솔을 엽니다.

  2. 배포 옆의 확인란을 선택한 후 [Distribution Settings]를 선택합니다.

  3. [General] 탭에서 [Edit]를 선택합니다.

  4. [AWS WAF Web ACL]에서 솔루션이 생성한 웹 ACL(초기 구성 중에 스택에 할당한 이름과 동일)이 이미 입력되어 있는지 확인합니다.

  5. [Logging]에서 [On]을 선택합니다.

  6. Bucket for Logs(로그를 저장할 버킷)에서 웹 액세스 로그를 저장하는 데 사용할 Amazon S3 버킷을 선택합니다(스택 시작(템플릿)에서 정의함).

  7. [Yes, edit]를 선택하여 변경 사항을 저장합니다.

다음: 추가 모범 사례.