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

AWS WAF 작동 방식

AWS WAF를 사용하여 Amazon CloudFront 또는 Application Load Balancer가 웹 요청에 응답하는 방식을 제어합니다. 먼저 조건, 규칙 및 웹 ACL(웹 액세스 제어 목록)을 생성합니다. 조건을 정의하고, 조건을 규칙에 결합하며 규칙을 웹 ACL에 결합합니다.

조건

조건은 AWS WAF가 웹 요청에서 감시할 기본 특성을 정의합니다.

  • 악성일 가능성이 있는 스크립트입니다. 공격자는 웹 애플리케이션의 취약성을 악용할 수 있는 스크립트를 포함시킵니다. 이것은 교차 사이트 스크립팅이라고 알려져 있습니다.

  • 요청이 시작되는 IP 주소 또는 주소 범위입니다.

  • 요청이 시작되는 국가 또는 지리적 위치입니다.

  • 쿼리 문자열과 같은 요청에서 지정된 부분의 길이입니다.

  • 악성일 가능성이 있는 SQL 코드입니다. 공격자는 악성 SQL 코드를 웹 요청에 포함시켜서 데이터베이스에서 데이터를 추출하려고 시도합니다. 이것은 SQL 명령어 주입이라고 알려져 있습니다.

  • 요청에 나타나는 문자열입니다. 예를 들어 User-Agent 헤더에 나타나는 값 또는 쿼리 문자열에 나타나는 텍스트 문자열입니다. 정규식을 사용하여 이러한 문자열을 지정할 수도 있습니다.

일부 조건에는 여러 개의 값이 있습니다. 예를 들어, IP 조건에 최대 10,000개의 IP 주소 또는 IP 주소 범위를 지정할 수 있습니다.

규칙

조건을 규칙에 결합하여 허용하거나, 차단하거나, 계수하려는 요청을 정확하게 대상으로 지정할 수 있습니다. AWS WAF는 다음 두 유형의 규칙을 제공합니다.

일반 규칙

일반 규칙은 조건만 사용하여 특정 요청을 대상으로 선택합니다. 예를 들어 공격자로부터 확인한 최근 요청을 기반으로 다음 조건이 포함된 규칙을 생성할 수 있습니다.

  • 요청이 192.0.2.44에서 나옵니다.

  • 요청의 User-Agent 헤더에 BadBot라는 값이 포함되어 있습니다.

  • 요청의 쿼리 문자열에 유사 SQL 코드가 포함되어 있는 것으로 보입니다.

이 예제에서와 같이 한 규칙에 여러 조건이 모두 포함되면 AWS WAF는 모든 조건과 모두 일치하는 요청을 찾습니다. 다시 말해서 조건을 AND로 함께 연결합니다.

비율 기반 규칙

비율 기반 규칙은 일반 규칙과 비슷하지만 비율 제한이 추가된다는 점이 다릅니다. 비율 기반 규칙은 지정된 IP 주소로부터 도착하는 요청의 개수를 5분 단위로 계산합니다. 요청 수가 비율 제한을 초과할 경우 이 규칙이 작업을 트리거할 수 있습니다.

조건을 비율 제한과 결합할 수 있습니다. 그러면 요청이 모든 조건과 일치하고 5분간 요청 수가 비율 제한을 초과할 경우 규칙이 웹 ACL에 지정된 작업을 트리거합니다.

예를 들어 공격자로부터 확인한 최근 요청을 기반으로 다음 조건이 포함된 비율 기반 규칙을 생성할 수 있습니다.

  • 요청이 192.0.2.44에서 나옵니다.

  • 요청의 User-Agent 헤더에 BadBot라는 값이 포함되어 있습니다.

이 비율 기반 규칙에서 비율 제한도 정의합니다. 이 예에서는 비율 제한을 15,000으로 정의했다고 가정하겠습니다. 위의 두 조건을 모두 충족하고 5분간 15,000개 요청을 초과하는 요청은 웹 ACL에 정의된 대로 규칙의 작업(차단 또는 허용)을 트리거합니다.

두 조건을 모두 충족하지 않은 요청은 비율 제한으로 계산되지 않으며 이 규칙에 의해 차단되지 않습니다.

두 번째 예로, 웹 사이트의 특정 페이지에 대한 요청을 제한하는 경우를 가정해 보겠습니다. 이렇게 하려면 다음과 같은 문자열 일치 조건을 비율 기반 규칙에 추가할 수 있습니다.

  • [Part of the request to filter on]은 URI입니다.

  • [Match Type]은 [Starts with]입니다.

  • [Value to match]는 [login]입니다.

여기에 [RateLimit]를 15,000으로 지정합니다.

웹 ACL에 이 비율 기반 규칙을 추가함으로써 사이트의 나머지 페이지에는 영향을 주지 않고 로그인 페이지에 대한 요청을 제한할 수 있습니다.

중요

일반 규칙에는 적어도 하나의 조건을 추가해야 합니다. 조건이 없는 일반 규칙은 어떤 요청과도 일치되지 않으며, 따라서 규칙의 작업(허용, 계수 또는 차단)이 전혀 트리거되지 않습니다.

하지만 비율 기반 규칙에서는 조건이 선택 사항입니다. 비율 기반 규칙에 아무 조건도 추가하지 않을 경우 AWS WAF는 모든 요청이 규칙과 일치하는 것으로 가정하며, 따라서 동일한 IP 주소로부터 도착할 경우 비율 제한으로 계산됩니다. 동일한 IP 주소로부터의 요청이 비율 한도를 초과할 경우 규칙의 작업(계수 또는 차단)이 트리거됩니다.

웹 ACL

조건을 규칙으로 결합한 후 규칙을 웹 ACL로 결합합니다. 이 위치에서 각 규칙에 대한 작업(허용, 차단 또는 계산) 및 기본 작업을 정의합니다.

각 규칙에 대한 작업

웹 요청이 규칙의 모든 조건과 일치하면 AWS WAF는 요청을 차단하거나 CloudFront 또는 Application Load Balancer로 전달하도록 허용할 수 있습니다. AWS WAF에서 각 규칙에 대해 수행할 작업을 지정합니다.

AWS WAF는 규칙이 나열된 순서대로 요청을 웹 ACL의 규칙과 비교합니다. 그런 다음 AWS WAF는 요청이 일치하는 첫 번째 규칙과 연결된 작업을 선택합니다. 예를 들어, 웹 요청이 요청을 허용하는 규칙 하나 및 요청을 차단하는 다른 규칙 하나와 일치하는 경우 AWS WAF는 어떤 규칙이 처음 나열되는지에 따라 요청을 허용하거나 차단합니다.

새 규칙을 사용하기 전에 테스트하려는 경우 규칙에 있는 모든 조건을 충족하는 요청을 계산하도록 AWS WAF를 구성할 수도 있습니다. 요청을 허용하거나 차단하는 규칙과 마찬가지로, 요청을 계산하는 규칙은 웹 ACL의 규칙 목록에 있는 위치에 따라 영향을 받습니다. 예를 들어, 웹 요청이 요청을 허용하는 규칙 하나 및 요청을 계산하는 다른 규칙 하나와 일치하는 경우 요청을 허용하는 규칙이 먼저 나열되면 요청은 계산되지 않습니다.

기본 작업

기본 작업은 AWS WAF가 웹 ACL의 규칙 중 하나에 있는 모든 조건과 일치하지 않는 요청을 허용할지 또는 차단할지를 결정합니다. 예를 들어, 웹 ACL을 생성하고 전에 정의한 규칙만 추가한다고 가정합니다.

  • 요청이 192.0.2.44에서 나옵니다.

  • 요청의 User-Agent 헤더에 BadBot라는 값이 포함되어 있습니다.

  • 요청의 쿼리 문자열에 악성 SQL 코드가 포함되어 있는 것으로 보입니다.

요청이 규칙에 있는 세 가지 조건과 모두 일치하지 않고 기본 작업이 ALLOW이면 AWS WAF는 요청을 CloudFront 또는 Application Load Balancer로 전달하며 서비스는 요청된 객체로 응답합니다.

두 개 이상의 규칙을 웹 ACL에 추가하면 요청이 규칙 중 하나에 있는 모든 조건을 충족하지 않는 경우에만 AWS WAF는 기본 작업을 수행합니다. 예를 들어, 조건 하나가 포함된 두 번째 규칙을 추가한다고 가정합니다.

  • User-Agent 헤더에 BIGBadBot라는 값이 포함된 규칙입니다.

요청이 첫 번째 규칙에 있는 세 가지 조건을 모두 충족하지 않고 두 번째 규칙의 조건 하나를 충족하지 않는 경우에만 AWS WAF는 기본 작업을 수행합니다.

드문 경우지만, 요청을 허용할지 또는 차단할지에 대해 CloudFront 또는 Application Load Balancer에 대한 응답이 지연되는 내부 오류가 AWS WAF에 발생할 수 있습니다. 이러한 경우 일반적으로 CloudFront 또는 Application Load Balancer가 콘텐츠를 제공합니다.

다음 그림은 AWS WAF가 규칙을 확인하고 해당 규칙을 기반으로 작업을 수행하는 방식을 보여 줍니다.


            웹 ACL