AWS WAF에서 카운트 규칙 작업에 대한 지표 및 로그의 형식은 어떻게 지정합니까?

6분 분량
0

AWS WAF를 설정했고, 웹 ACL의 일부 규칙이 카운트 작업에 포함되어 있습니다. 카운트 규칙 작업의 규칙에 대한 Amazon CloudWatch 지표 및 로그를 분석하려면 어떻게 해야 합니까?

간략한 설명

카운트 규칙 작업을 사용하여 규칙을 일반 작업 설정으로 구현하기 전 규칙을 테스트할 수 있습니다. AWS WAF는 카운트 규칙 작업의 규칙을 기준으로 요청을 평가하고, 일치 항목을 지표, 요청 샘플 및 로그로 보고합니다.

또한 카운트 규칙 작업을 사용하여 긍정오류를 생성하는 규칙의 문제를 해결할 수 있습니다. 긍정오류는 규칙 또는 규칙 그룹이 차단할 것으로 예상되지 않는 트래픽을 차단 시 발생합니다. 허용하려는 요청을 차단하는 규칙을 식별했다면, 해당 규칙의 작업을 업데이트하여 카운트할 수 있습니다. 이렇게 하면 사용자의 요청에 따라 규칙이 적용되지 않습니다. 긍정 오류 탐지 및 완화에 대한 자세한 내용은 AWS 관리형 규칙에서 발생한 거짓 긍정을 감지하여 수신 허용 목록에 추가하려면 어떻게 해야 하나요?를 참조하십시오.

해결 방법

카운트 규칙 작업에 대해 지표 및 로그의 형식이 지정되는 방식을 이해하려면, 다음 세 가지 시나리오를 고려하십시오.

  1. 사용자 지정 규칙에 대한 규칙 작업을 카운트 모드로 설정합니다.
  2. AWS Managed Rules 규칙 그룹에서 개별 규칙에 대한 규칙 작업을 카운트 모드로 설정합니다.
  3. 전체 규칙 그룹의 작업을 재정의하여 계산합니다.

사용자 지정 규칙에 대한 규칙 작업을 카운트 모드로 설정

예시

사용자가 보유한 웹 ACL(Test1-ACL)에 카운트 규칙 작업을 포함하는 단일 사용자 지정 규칙(Geo-Count)이 있습니다. Geo-Count 규칙은 요청이 미국에서 시작된 경우 요청을 계산합니다. 클라이언트 IP가 다른 국가에 속한 경우 허용 작업을 포함하는 웹 ACL 기본 작업이 일치합니다.

다음은 이 규칙의 JSON 표현입니다.

{
  "Name": "Geo-Count",
  "Priority": 0,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "Geo-Count"
  }
}

해당 요청이 미국에 위치한 클라이언트 IP에서 시작된 경우, 다음과 같은 상황이 발생합니다.

  • 요청이 카운트됩니다.
  • 사용자 지정 규칙 Geo-Count에 대한 CloudWatch 지표는 CountedRequests 지표의 데이터 요소를 보여 줍니다.
    참고: CloudWatch는 0이 아닌 값이 있는 경우에만 CountedRequests 지표를 보고합니다. 데이터를 보려면 정적을 합계로 CloudWatch 콘솔의 그래프화한 지표 탭에서 전환합니다.
  • 왜냐하면 Geo-Count는 카운트 작업을 포함하는 사용자 지정 규칙이므로, AWS WAF가 요청을 계산하기 떄문입니다.
  • 그런 다음 AWS WAF는 웹 ACL 기본 작업에 대해 요청을 평가합니다. 웹 ACL 기본 작업이 허용으로 설정되어 있으므로, 요청은 허용됩니다.
  • 이 작업에 대한 데이터 요소는 웹 ACL에 대한 AllowedRequests 지표에 나타납니다.

AWS WAF 네임스페이스에 포함된 지표 및 차원에 대한 자세한 내용은 AWS WAF 지표 및 차원을 참조하십시오.

사용자 지정 규칙의 작업을 Count로 업데이트하면, 로깅 관점에서 규칙이 종료되지 않는 규칙으로 간주합니다. 따라서 요청이 카운트 모드의 사용자 지정 규칙과 일치하면 다음 필드가 기록됩니다.

  • nonTerminatingMatchingRules: 요청과 일치하는 종료되지 않는 규칙 목록입니다.
  • ruleId: 요청과 일치하며, 종료되지 않은 규칙의 ID입니다.
  • action: 항상 COUNT입니다.
  • ruleMatchDetails: 요청과 일치하는 규칙에 대한 상세 정보입니다. 이 필드는 SQL 명령어 삽입(SQLi) 및 크로스 사이트 스크립팅(XSS) 일치 규칙 문에 대해서만 채워집니다.

Geo-Count 규칙이 요청과 일치하면, 다음 예시처럼 nonTerminatingMatchingRules 세부 정보가 로그에 표시됩니다.

"nonTerminatingMatchingRules": [{
  "ruleId": "Geo-Count",
  "action": "COUNT",
  "ruleMatchDetails": [

  ]
}]

가능한 모든 로그 필드에 대한 자세한 내용은 로그 필드를 참조하십시오.

웹 ACL에 대한 로깅을 설정하려면 웹 ACL에 대한 로깅 관리를 참조하십시오.

AWS Managed Rules 규칙 그룹에서 개별 규칙에 대한 규칙 작업을 카운트 모드로 설정

규칙 그룹 내에서 규칙 작업을 재정의하여, 일부 또는 모든 규칙의 수를 계산하도록 설정할 수 있습니다. 규칙 그룹 내에서 count 이외의 값으로 구성한 규칙 작업의 경우, 재정의는 일치하는 요청만 계산하도록 해당 작업을 변경합니다.

웹 요청이 규칙과 일치하면 AWS WAF는 일치를 카운트로 처리한 다음, 규칙 그룹의 후속 규칙을 계속 평가합니다.

규칙 그룹에서 카운트하도록 규칙 동작을 설정하는 방법에 대한 자세한 내용은 규칙 그룹에서 계산하도록 규칙 동작 설정을 참조하십시오.

예시

사용자가 보유한 웹 ACL(Test2-ACL)은 AWS Managed Rules 규칙 그룹(AWSManagedRulesKnownBadInputsRuleSet)을 포함합니다. 이 웹 ACL에는 다른 규칙이 없고, 웹 ACL 기본 작업이 허용 작업으로 구성됩니다.

Log4JRCE 규칙(AWSManagedRulesKnownBadInputsRuleSet 규칙 그룹 내)을 Count 작업으로 업데이트합니다. 이제 클라이언트 요청의 구성 요소(예: URI, 쿼리 문자열 등) 에 Log4j 취약성이 있는 경우 해당 요청은 Log4JRCE 규칙으로 계산합니다. 요청이 규칙 그룹의 다른 규칙과 일치하지 않는 경우, 웹 ACL 기본 작업으로 요청을 허용합니다.

다음은 이 규칙의 JSON 표현입니다.

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet",
      "ExcludedRules": [
        {
          "Name": "Log4JRCE"
        }
      ]
    }
  },
  "OverrideAction": {
    "None": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

규칙 작업을 규칙 그룹 내의 규칙에 대한 카운트로 설정하면, 이러한 규칙은 규칙 그룹에서 제외한 규칙으로 간주합니다. 지표가 켜져 있으면 개별 제외 규칙에 대한 COUNT 지표를 수신합니다.

요청이 Log4JRCE 규칙과 일치하면 다음이 발생합니다.

  • 요청이 카운트됩니다.
  • Log4JRCE 규칙에 대한 CloudWatch 지표는 CountedRequests 지표의 데이터 포인트를 보여줍니다.

AWSManagedRulesKnownBadInputsRuleSet 내부에 요청과 일치하는 다른 규칙이 없으면, 다음과 같은 결과가 발생합니다.

  • 이 요청은 웹 ACL 기본 작업에 의해 허용됩니다.
  • 데이터 요소는 웹 ACL에 대한 AllowedRequests 지표에 나타납니다.

제외된 규칙의 경우 다음 필드가 AWS WAF 로그에 캡처됩니다.

  • excludedRules: 제외한 규칙 그룹의 규칙 목록입니다. 이러한 규칙에 대한 작업은 Count로 설정됩니다.
  • exclusionType: 제외한 규칙에 작업 개수가 있음을 나타내는 유형입니다.
  • ruleId: 제외한 규칙 그룹 내 규칙의 ID입니다.

Log4JRCE 규칙이 요청과 일치하면, 다음 예시처럼 excludedRules 세부 정보가 로그에 표시됩니다.

"ruleGroupList":[
  {
    "ruleGroupId":"AWS#AWSManagedRulesKnownBadInputsRuleSet",
    "terminatingRule":null,
    "nonTerminatingMatchingRules":[
      
      ],
    "excludedRules":[
      {
        "exclusionType":"EXCLUDED_AS_COUNT",
        "ruleId":"Log4JRCE"
      }
    ]
  }
]

규칙 그룹 내의 개별 규칙이 카운트 규칙 작업으로 업데이트되면 다음이 발생합니다.

  • 이 규칙과 일치하는 요청에 대한 로그에는 nonTerminatingMatchingRules 필드 하위 규칙에 대한 카운트 작업을 포함하지 않습니다.
  • AWS WAF 로그는 excludedRules 필드 하위에 이 규칙을 표시합니다.

집계할 전체 규칙 그룹의 작업 재정의

카운트할 규칙 그룹의 작업을 재정의하는 방법에 대한 자세한 내용은 카운트할 결과 규칙 그룹 작업 재정의를 참조하십시오.

카운트할 규칙 그룹의 작업을 재정의하는 방법에 대한 자세한 내용은 카운트할 규칙 그룹 작업 재정의를 참조하십시오.

예시

사용자가 보유한 웹 ACL(Test3-ACL)은 AWS Managed Rules 규칙 그룹(AWSManagedRulesKnownBadInputsRuleSet)을 포함합니다. 이 웹 ACL에는 다른 규칙이 없고, 웹 ACL 기본 작업은 Allow입니다. AWSManagedRulesKnownBadInputsRuleSet 규칙 그룹의 모든 규칙은 규칙에 정의된 기본 작업을 사용합니다. 즉, 이 규칙 그룹 내의 규칙은 Count로 설정되지 않았습니다. 그러나 카운트할 규칙 그룹 작업 재정의 옵션은 켜져 있습니다.

다음은 이 규칙의 JSON 표현입니다.

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet"
    }
  },
  "OverrideAction": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

클라이언트 요청의 구성 요소(예: URI, 쿼리 문자열 등)에 Log4j 취약점이 있는 경우 다음이 발생합니다.

  • 이 요청은 Log4JRCE 규칙에 의해 차단됩니다.
  • Block은 종료 작업이므로 AWS WAF는 규칙 그룹 평가를 중지하고, 종료 작업 결과를 웹 ACL에 반환합니다.
  • 이때 카운트할 규칙 그룹 재정의가 적용됩니다. 규칙 그룹의 종료 작업을 카운트로 재정의합니다.
  • 그런 다음 AWS WAF는 웹 ACL의 나머지 규칙을 계속 처리합니다.

Log4JRCE 규칙 (또는 다른 규칙)(AWSManagedRulesKnownBadInputsRuleSet 규칙 그룹 내)이 요청과 일치하면 다음과 같은 결과가 발생합니다.

  • CloudWatch는 CountedRequests 지표(그룹 이름 AWSManagedRulesKnownBadInputsRuleSet에 해당)의 데이터 요소를 표시합니다.
  • AWS WAF는 재정의 수행 후에도 웹 ACL의 나머지 규칙을 계속 처리합니다. 따라서 해당 요청은 궁극적으로 웹 ACL 기본 작업과 일치합니다. 이는 웹 ACL에 대한 AllowedRequests 지표의 데이터 포인트로 표시됩니다.
  • AWS WAF 로그에서 일치 요청의 nonTerminatingMatchingRules 필드는 카운트 작업을 포함합니다.
  • 또한 ruleGroupList는 카운트할 종료 작업을 재정의하기 전에 원래 요청을 차단한 규칙 그룹 내 규칙을 표시합니다.
  • Log4JRCE 규칙이 요청과 일치하면, 다음 예시처럼 ruleGroupListnonTerminatingMatchingRules 세부 정보가 로그에 표시됩니다.
"ruleGroupList": [{
  "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet",
  "terminatingRule": {
      "ruleId": "Log4JRCE",
      "action": "BLOCK",
      "ruleMatchDetails": null
    },
  "nonTerminatingMatchingRules": [

  ],
    "excludedRules": null
  }
],
"rateBasedRuleList": [

],
"nonTerminatingMatchingRules": [{
    "ruleId": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
    "action": "COUNT",
    "ruleMatchDetails": [

  ]
}]

관련 정보

웹 ACL에서 규칙 및 규칙 그룹 작업의 기본 처리

AWS 공식
AWS 공식업데이트됨 2년 전