AWS WAF의 요청 구성 요소 - AWS WAF, AWS Firewall Manager 및 AWS Shield Advanced

AWS WAF의 요청 구성 요소

이 섹션에서는 검사용으로 지정할 수 있는 웹 요청의 구성 요소를 설명합니다. 웹 요청 내에서 패턴을 찾는 일치 규칙 문에 대해 요청 구성 요소를 지정합니다. 이러한 유형의 문에는 문자열 일치, 정규식 일치, 크기 제약 조건 및 SQL 주입 공격 문이 포함됩니다. 이러한 요청 구성 요소 설정을 사용하는 방법에 대한 자세한 내용은 AWS WAF에서 일치 규칙 문 사용에서 개별 규칙 문을 참조하세요.

달리 명시되지 않는 한, 규칙 문에 지정된 요청 구성 요소가 웹 요청에 없는 경우 AWS WAF는 요청이 규칙 기준과 일치하지 않는 것으로 평가합니다.

참고

요청 구성 요소가 필요한 각 규칙 문에 대해 단일 요청 구성 요소를 지정합니다. 요청 구성 요소를 두 개 이상 검사하려면 각 구성 요소에 대한 규칙 문을 만듭니다.

AWS WAF 콘솔 및 API 설명서에서는 다음 위치에서 요청 구성 요소 설정에 대한 지침을 제공합니다.

  • 콘솔의 규칙 작성기 – 정규 규칙 유형에 대한 명령문 설정에서는 검사 대화 상자의 요청 구성 요소에서 검사할 구성 요소를 선택합니다.

  • API 문 내용FieldToMatch

이 섹션의 나머지 부분에서는 검사할 웹 요청의 일부에 대한 옵션을 설명합니다.

HTTP 메서드

요청의 HTTP 메서드를 검사합니다. HTTP 메서드는 POST 또는 GET 등 웹 요청이 보호된 리소스에게 수행을 요구하고 있는 작업 유형을 나타냅니다.

단일 헤더

요청에서 이름이 지정된 단일 헤더를 검사합니다.

이 옵션의 경우 헤더 이름(예: User-Agent 또는Referer)을 지정합니다. 이름에 대한 문자열 일치에서는 대/소문자를 구분하지 않습니다.

모든 헤더

쿠키를 포함한 모든 요청 헤더를 검사합니다. 필터를 적용하여 모든 헤더 중 일부를 검사할 수 있습니다.

이 옵션에 대해 다음 사양을 제공합니다.

  • 일치 패턴 - 검사할 일부 헤더를 가져오는 데 사용하는 필터입니다. AWS WAF는 헤더 키에서 이러한 패턴을 찾습니다.

    일치 패턴 설정은 다음 중 하나일 수 있습니다.

    • 모두 — 모든 키를 일치시킵니다. 모든 헤더의 규칙 검사 기준을 평가합니다.

    • 제외된 헤더 – 여기에 지정된 문자열과 키가 일치하지 않는 헤더만 검사합니다. 키에 대한 문자열 일치에서는 대/소문자를 구분하지 않습니다.

    • 포함된 헤더 – 여기에 지정된 문자열 중 하나와 일치하는 키가 있는 헤더만 검사합니다. 키에 대한 문자열 일치에서는 대/소문자를 구분하지 않습니다.

  • 일치 범위 - AWS WAF에서 규칙 검사 기준을 사용하여 검사해야 하는 헤더의 부분입니다. , 또는 모두를 지정하여 키와 값이 둘 다 일치하는지 검사할 수 있습니다.

    모두의 경우 키와 값에 모두 일치 항목을 찾아야 할 필요는 없습니다. 일치하는 키 또는 값을 찾거나 둘 다 일치하는 항목을 찾으면 됩니다. 키와 값이 일치하도록 하려면 논리 AND 문을 사용하여 키를 검사하는 규칙 하나와 값을 검사하는 규칙 하나, 이렇게 두 가지 일치 규칙을 결합합니다.

  • 과대 처리 - 헤더 데이터가 AWS WAF에서 검사할 수 있는 것보다 더 큰 요청을 AWS WAF에서 처리하는 방식입니다. AWS WAF는 요청 헤더의 최대 처음 8KB (8,192바이트)와 최대 처음 200개 헤더를 검사할 수 있습니다. 첫 번째 제한에 도달할 때까지 AWS WAF에서 콘텐츠를 검사할 수 있습니다. 검사를 계속하거나 검사를 건너뛰고 요청을 규칙과 일치하거나 일치하지 않는 것으로 표시할 수 있습니다. 과대 콘텐츠 처리에 대한 자세한 내용은 AWS WAF에서 과대 웹 요청 구성 요소 처리 섹션을 참조하세요.

헤더 순서

AWS WAF에서 검사용으로 받는 웹 요청에 나타나는 순서대로 요청의 헤더 이름 목록을 포함하는 문자열을 검사합니다. AWS WAF는 문자열을 생성하고 나서 검사에서 해당 문자열을 필드로 사용하여 구성 요소를 일치시킵니다. AWS WAF는 문자열 내 헤더 이름을 콜론으로 구분하며 공백은 추가하지 않습니다. 예: host:user-agent:accept:authorization:referer.

이 옵션에 대해 다음 사양을 제공합니다.

  • 과대 처리 - 헤더 데이터가 AWS WAF에서 검사할 수 있는 것보다 더 큰 요청을 AWS WAF에서 처리하는 방식입니다. AWS WAF는 요청 헤더의 최대 처음 8KB(8,192바이트)와 최대 처음 200개 헤더를 검사할 수 있습니다. 첫 번째 제한에 도달할 때까지 AWS WAF에서 콘텐츠를 검사할 수 있습니다. 사용할 수 있는 헤더 검사를 계속하거나 검사를 건너뛰고 요청을 규칙과 일치하거나 일치하지 않는 것으로 표시할 수 있습니다. 과대 콘텐츠 처리에 대한 자세한 내용은 AWS WAF에서 과대 웹 요청 구성 요소 처리 섹션을 참조하세요.

쿠키

모든 요청 쿠키를 검사합니다. 필터를 적용하여 모든 쿠키의 하위 집합을 검사할 수 있습니다.

이 옵션에 대해 다음 사양을 제공합니다.

  • 일치 패턴 - 검사할 쿠키의 하위 집합을 가져오는 데 사용하는 필터입니다. AWS WAF는 쿠키 키에서 이러한 패턴을 찾습니다.

    일치 패턴 설정은 다음 중 하나일 수 있습니다.

    • 모두 — 모든 키를 일치시킵니다. 모든 쿠키의 규칙 검사 기준을 평가합니다.

    • 제외된 쿠키 – 여기에 지정된 문자열과 키가 일치하지 않는 쿠키만 검사합니다. 키의 문자열 일치는 대소문자를 구분하며 정확해야 합니다.

    • 포함된 쿠키 – 여기에 지정된 문자열 중 하나와 일치하는 키가 있는 쿠키만 검사합니다. 키의 문자열 일치는 대소문자를 구분하며 정확해야 합니다.

  • 일치 범위 - AWS WAF에서 규칙 검사 기준으로 검사할 쿠키 부분입니다. 키와 값 둘 다에 대해 , 또는 모두를 지정할 수 있습니다.

    모두의 경우 키와 값에 모두 일치 항목을 찾아야 할 필요는 없습니다. 일치하는 키 또는 값을 찾거나 둘 다 일치하는 항목을 찾으면 됩니다. 키와 값이 일치하도록 하려면 논리 AND 문을 사용하여 키를 검사하는 규칙 하나와 값을 검사하는 규칙 하나, 이렇게 두 가지 일치 규칙을 결합합니다.

  • 과대 처리 - 쿠키 데이터가 AWS WAF에서 검사할 수 있는 것보다 더 큰 요청을 AWS WAF에서 처리하는 방식입니다. AWS WAF는 요청 쿠키의 최대 처음 8KB(8,192바이트)와 최대 처음 200개 쿠키를 검사할 수 있습니다. 첫 번째 제한에 도달할 때까지 AWS WAF에서 콘텐츠를 검사할 수 있습니다. 검사를 계속하거나 검사를 건너뛰고 요청을 규칙과 일치하거나 일치하지 않는 것으로 표시할 수 있습니다. 과대 콘텐츠 처리에 대한 자세한 내용은 AWS WAF에서 과대 웹 요청 구성 요소 처리 섹션을 참조하세요.

URI 경로

리소스를 식별하는 URL의 부분을 검사합니다(예: /images/daily-ad.jpg). 자세한 내용은 Uniform Resource Identifier(URI): Generic Syntax 섹션을 참조하세요.

이 옵션을 통해 텍스트 변환을 사용하지 않는 경우, AWS WAF는 URI를 정규화하지 않고 요청 시 클라이언트로부터 수신할 때처럼 검사합니다. 텍스트 변환에 대한 자세한 내용은 AWS WAF에서 텍스트 변환 사용 섹션을 참조하세요.

JA3 지문

요청의 JA3 지문을 검사합니다.

참고

JA3 지문 검사는 Amazon CloudFront 배포 및 Application Load Balancer에서만 사용할 수 있습니다.

JA3 자문은 수신 요청의 TLS 클라이언트 Hello에서 파생된 32자 해시입니다. 이 지문은 클라이언트 TLS 구성의 고유 식별자 역할을 한다. AWS WAF는 계산에 필요한 충분한 TLS 클라이언트 Hello 정보가 있는 각 요청에 대해 이 지문을 계산하고 기록합니다. 거의 모든 웹 요청에는 이 정보가 포함됩니다.

클라이언트용 JA3 지문을 가져오는 방법

웹 ACL 로그에서 클라이언트 요청에 대한 JA3 지문을 얻을 수 있습니다. AWS WAF에서 지문을 계산할 수 있는 경우 로그에 해당 지문이 포함됩니다. 로깅 필드에 대한 자세한 내용은 웹 ACL 트래픽에 대한 로그 필드 섹션을 참조하세요.

규칙 문 요구 사항

제공하는 문자열과 정확히 일치하도록 설정된 문자열 일치 문 내에서만 JA3 지문을 검사할 수 있습니다. 문자열 일치 문 사양의 로그에서 JA3 지문 문자열을 제공하여 동일한 TLS 구성을 갖는 향후 요청과 일치시킵니다. 문자열 일치 문에 대한 자세한 내용은 문자열 일치 규칙 문 섹션을 참조하세요.

이 규칙 문에 대한 폴백 동작을 제공해야 합니다. 폴백 동작은 AWS WAF에서 JA3 지문을 계산할 수 없는 경우 AWS WAF에서 웹 요청에 할당하려는 일치 상태입니다. 일치시키도록 선택하면 AWS WAF에서 요청을 규칙 문과 일치하는 것으로 처리하며 규칙 동작을 요청에 적용합니다. 일치시키지 않도록 선택하면 AWS WAF에서 요청을 규칙 문과 일치하지 않는 것으로 처리합니다.

이 일치 옵션을 사용하려면 웹 ACL 트래픽을 기록해야 합니다. 자세한 내용은 AWS WAF 웹 ACL 트래픽 로깅 섹션을 참조하세요.

쿼리 문자열

? 문자(있는 경우) 뒤에 나타나는 URL의 부분을 검사합니다.

참고

사이트 간 스크립팅 일치 명령문의 경우 쿼리 문자열 대신 모든 쿼리 파라미터를 선택하는 것이 좋습니다. 모든 쿼리 파라미터를 선택하면 기본 비용에 WCU 10개가 추가됩니다.

단일 쿼리 파라미터

쿼리 문자열의 일부로 정의한 단일 쿼리 파라미터를 검사합니다. AWS WAF은 지정한 파라미터의 값을 검사합니다.

이 옵션의 경우 쿼리 인수도 지정합니다. 예를 들어 URL이 www.xyz.com?UserName=abc&SalesRegion=seattle인 경우 쿼리 인수로 UserName 또는 SalesRegion를 지정할 수 있습니다. 인수의 최대 길이는 30자입니다. 이름은 대소문자를 구분하지 않으므로 UserName을 지정하면 AWS WAF는 usernameUsERName을 포함한 UserName의 모든 변형과 일치합니다.

쿼리 문자열에 지정한 쿼리 인수의 인스턴스가 두 개 이상 포함된 경우 AWS WAF는 OR 로직을 사용하여 모든 값이 일치하는지 검사합니다. 예를 들어 URL www.xyz.com?SalesRegion=boston&SalesRegion=seattle에서 AWS WAF은 bostonseattle에 대해 지정한 이름을 평가합니다. 둘 중 하나가 일치하는 경우 검사는 일치입니다.

모든 쿼리 파라미터

ㅌ요청의 모든 쿼리 파라미터를 검사합니다. 단일 쿼리 파라미터 구성 요소 선택과 유사하지만, AWS WAF가 쿼리 문자열 내의 모든 인수 값을 검사합니다. 예를 들어, URL이 www.xyz.com?UserName=abc&SalesRegion=seattle인 경우 AWS WAF는 UserName 또는 SalesRegion의 값이 검사 기준과 일치하는 경우 일치를 트리거합니다.

이 옵션을 선택하면 기본 비용에 WCU 10개가 추가됩니다.

본문

요청 본문을 일반 텍스트로 평가해 검사합니다. JSON 콘텐츠 유형을 사용하여 본문을 JSON으로 평가할 수도 있습니다.

요청 본문은 요청 헤더 바로 뒤에 오는 요청 부분입니다. 여기에는 웹 요청에 필요한 추가 데이터(예: 양식의 데이터)가 포함됩니다.

  • 콘솔의 콘텐츠 유형 옵션에서 일반 텍스트를 선택하여 요청 옵션에서 본문을 선택합니다.

  • API의 규칙 FieldToMatch 사양에서 요청 본문을 일반 텍스트로 검사하도록 Body를 지정합니다.

Application Load Balancer 및 AWS AppSync의 경우 AWS WAF는 요청 본문의 처음 8KB를 검사할 수 있습니다. CloudFront, API Gateway, Amazon Cognito, App Runner 및 Verified Access의 경우는 기본적으로 AWS WAF가 처음 16KB를 검사할 수 있으며 웹 ACL 구성에서 제한을 최대 64KB까지 늘릴 수 있습니다. 자세한 내용은 AWS WAF에 대한 본문 검사 크기 제한 관리 섹션을 참조하세요.

이 구성 요소 유형에 대한 과대 처리를 지정해야 합니다. 과대 처리는 AWS WAF에서 검사할 수 있는 것보다 큰 본문 데이터가 있는 요청을 AWS WAF에서 처리하는 방법을 정의합니다. 검사를 계속하거나 검사를 건너뛰고 요청을 규칙과 일치하거나 일치하지 않는 것으로 표시할 수 있습니다. 과대 콘텐츠 처리에 대한 자세한 내용은 AWS WAF에서 과대 웹 요청 구성 요소 처리 섹션을 참조하세요.

또한 본문을 구문 분석된 JSON으로 평가할 수도 있습니다. 자세한 내용은 이어지는 섹션을 참조하세요.

JSON 본문

JSON으로 평가된 요청 본문을 검사합니다. 본문을 일반 텍스트로 평가할 수도 있습니다.

요청 본문은 요청 헤더 바로 뒤에 오는 요청 부분입니다. 여기에는 웹 요청에 필요한 추가 데이터(예: 양식의 데이터)가 포함됩니다.

  • 콘솔의 콘텐츠 유형 옵션에서 JSON을 선택하여 요청 옵션에서 본문을 선택합니다.

  • API의 규칙 FieldToMatch 사양에서 JsonBody를 지정합니다.

Application Load Balancer 및 AWS AppSync의 경우 AWS WAF는 요청 본문의 처음 8KB를 검사할 수 있습니다. CloudFront, API Gateway, Amazon Cognito, App Runner 및 Verified Access의 경우는 기본적으로 AWS WAF가 처음 16KB를 검사할 수 있으며 웹 ACL 구성에서 제한을 최대 64KB까지 늘릴 수 있습니다. 자세한 내용은 AWS WAF에 대한 본문 검사 크기 제한 관리 섹션을 참조하세요.

이 구성 요소 유형에 대한 과대 처리를 지정해야 합니다. 과대 처리는 AWS WAF에서 검사할 수 있는 것보다 큰 본문 데이터가 있는 요청을 AWS WAF에서 처리하는 방법을 정의합니다. 검사를 계속하거나 검사를 건너뛰고 요청을 규칙과 일치하거나 일치하지 않는 것으로 표시할 수 있습니다. 과대 콘텐츠 처리에 대한 자세한 내용은 AWS WAF에서 과대 웹 요청 구성 요소 처리 섹션을 참조하세요.

이 옵션을 선택하면 일치 문의 기본 비용 WCU가 두 배로 늘어납니다. 예를 들어 JSON 구문 분석을 사용하지 않는 일치 문 기본 비용이 5WCU인 경우 JSON 구문 분석을 사용하면 비용이 두 배가 되어 10WCU로 됩니다.

이 옵션의 경우 다음 섹션에 설명된 대로 추가 사양을 제공합니다.

AWS WAF가 JSON 본문 검사를 처리하는 방법

AWS WAF가 웹 요청 본문을 JSON으로 검사하면 본문을 구문 분석하고 검사를 위해 JSON 요소를 추출하는 단계를 수행합니다. AWS WAF는 구성 선택 사항에 따라 이러한 단계를 수행합니다.

다음은 AWS WAF가 수행하는 단계입니다.

  1. 본문 콘텐츠 구문 분석 - AWS WAF는 검사를 위해 JSON 요소를 추출하기 위해 웹 요청 본문의 콘텐츠를 구문 분석합니다. AWS WAF는 본문의 전체 콘텐츠를 구문 분석하는 데 최선을 다하지만 콘텐츠의 다양한 오류 상태에 대해서는 구문 분석이 실패할 수 있습니다. 예시에는 잘못된 문자, 중복 키, 잘림 및 루트 노드가 객체 또는 배열이 아닌 콘텐츠가 있습니다.

    본문 구문 분석 폴백 동작 옵션은 JSON 본문을 완전히 구문 분석하지 못할 경우 AWS WAF에서 수행해야 할 작업을 확인합니다.

    • 없음(기본 동작) - AWS WAF는 구문 분석 오류가 발생한 지점까지만 콘텐츠를 평가합니다.

    • 문자열로 평가 - 본문을 일반 텍스트로 검사합니다. AWS WAF는 JSON 검사에 대해 사용자가 정의한 텍스트 변환 및 검사 기준을 본문 텍스트 문자열에 적용합니다.

    • 일치 - 웹 요청을 규칙 문과 일치하는 것으로 처리합니다. AWS WAF는 규칙 동작을 요청에 적용합니다.

    • 일치하지 않음 - 웹 요청을 규칙 문과 일치하지 않는 것으로 처리합니다.

    참고

    이 대체 동작은 JSON 문자열을 구문 분석하는 동안 AWS WAF에 오류가 발생할 때만 트리거됩니다.

    구문 분석으로 JSON이 완전히 검증되지 않음

    AWS WAF 구문 분석은 입력 JSON 문자열을 완전히 검증하지 않으므로 잘못된 JSON에 대해서도 구문 분석에 성공할 수 있습니다.

    예를 들어 AWS WAF는 다음과 같은 잘못된 JSON을 오류 없이 구문 분석합니다.

    • 쉼표 누락: {"key1":"value1""key2":"value2"}

    • 콜론 누락: {"key1":"value1","key2""value2"}

    • 추가 콜론: {"key1"::"value1","key2""value2"}

    구문 분석이 성공했지만 결과가 완전히 유효한 JSON이 아닌 것과 같은 경우 평가의 후속 단계의 결과가 달라질 수 있습니다. 추출에 일부 요소가 누락되거나 규칙 평가에서 예상치 못한 결과가 있을 수 있습니다. 애플리케이션에서 수신하는 JSON을 검증하고 필요에 따라 잘못된 JSON을 처리하는 것이 좋습니다.

  2. JSON 요소 추출 - AWS WAF는 설정에 따라 검사할 JSON 요소의 하위 집합을 식별합니다.

    • JSON 일치 범위 옵션은 AWS WAF에서 검사해야 하는 JSON의 요소 유형을 지정합니다.

      키와 값 둘 다에 대해 , 또는 모두를 지정할 수 있습니다.

      모두의 경우 키와 값에 모두 일치 항목을 찾아야 할 필요는 없습니다. 일치하는 키 또는 값을 찾거나 둘 다 일치하는 항목을 찾으면 됩니다. 키와 값이 일치하도록 하려면 논리 AND 문을 사용하여 키를 검사하는 규칙 하나와 값을 검사하는 규칙 하나, 이렇게 두 가지 일치 규칙을 결합합니다.

    • 검사할 콘텐츠 옵션은 요소 세트를 AWS WAF에서 검사하려는 하위 집합으로 필터링하는 방법을 지정합니다.

      다음 중 하나를 지정해야 합니다.

      • 전체 JSON 콘텐츠 - 모든 요소를 평가합니다.

      • 포함된 요소만 - 제공한 JSON 포인터 기준과 경로가 일치하는 요소만 평가합니다. JSON에 모든 경로를 포함하려면 이 옵션을 사용하지 마세요. 대신 전체 JSON 콘텐츠를 사용합니다.

        JSON 포인터 구문에 대한 자세한 내용을 알아보려면 Internet Engineering Task Force(IETF) 설명서 JavaScript Object Notation (JSON) Pointer(JavaScript 객체 표기법(JSON) 포인터)를 참조하세요.

        예를 들어, 콘솔에서 다음을 제공할 수 있습니다.

        /dogs/0/name /dogs/1/name

        API 또는 CLI에서 다음을 제공할 수 있습니다.

        "IncludedPaths": ["/dogs/0/name", "/dogs/1/name"]

    예를 들어 검사할 콘텐츠 설정이 요소만 포함되고 포함된 요소 설정이 /a/b이라고 가정해 보겠습니다.

    다음 예시 JSON 본문의 경우:

    { "a":{ "c":"d", "b":{ "e":{ "f":"g" } } } }

    JSON 일치 범위 설정에 대해 AWS WAF에서 검사할 요소 세트는 아래에 나열되어 있습니다. 포함된 요소 경로의 일부인 b 키는 평가되지 않는다는 점에 유의하세요.

    • 모두: e, f,, g.

    • : ef.

    • : g.

  3. JSON 요소 집합 검사 - AWS WAF는 추출된 JSON 요소에 지정하려는 모든 텍스트 변형을 적용한 다음 결과 요소 집합을 규칙 문의 일치 기준과 일치시킵니다. 이는 다른 웹 요청 구성 요소와 동일한 변환 및 평가 동작입니다. 추출된 JSON 요소 중 하나라도 일치하면 웹 요청이 규칙과 일치하는 것입니다.