

**에 대한 새로운 콘솔 환경 소개 AWS WAF**

이제 업데이트된 환경을 사용하여 콘솔의 모든 위치에서 AWS WAF 기능에 액세스할 수 있습니다. 자세한 내용은 [콘솔 작업을 참조하세요](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html).

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 유효한 AWS WAF 토큰이 없는 요청 차단
<a name="waf-tokens-block-missing-tokens"></a>

이 섹션에서는 AWS WAF 모바일 SDK를 사용할 때 토큰이 누락된 로그인 요청을 차단하는 방법을 설명합니다.

지능형 위협 AWS 관리형 규칙 그룹 `AWSManagedRulesACFPRuleSet`, `AWSManagedRulesATPRuleSet`및 `AWSManagedRulesBotControlRuleSet`를 사용하는 경우 규칙 그룹은 AWS WAF 토큰 관리를 호출하여 웹 요청 토큰의 상태를 평가하고 그에 따라 요청에 레이블을 지정합니다.

**참고**  
토큰 레이블 지정은 이러한 관리형 규칙 그룹 중 하나를 사용하여 평가하는 웹 요청에만 적용됩니다.

토큰 관리에서 적용하는 레이블 지정에 대한 내용은 앞의 [의 토큰 레이블 유형 AWS WAF](waf-tokens-labeling.md) 섹션을 참조하세요.

그러면 지능형 위협 완화 관리형 규칙 그룹이 다음과 같이 토큰 요구 사항을 처리합니다.
+ `AWSManagedRulesACFPRuleSet` `AllRequests` 규칙은 모든 요청에 대해 Challenge 작업을 실행하여 `accepted` 토큰 레이블이 없는 요청을 효과적으로 차단하도록 구성됩니다.
+ `AWSManagedRulesATPRuleSet`는 `rejected` 토큰 레이블이 있는 요청을 차단하지만 `absent` 토큰 레이블이 있는 요청은 차단하지 않습니다.
+ `AWSManagedRulesBotControlRuleSet` 대상 보호 수준에서는 클라이언트가 `accepted` 토큰 레이블 없이 요청을 5회 전송하고 나면 클라이언트에 챌린지를 제시합니다. 이 수준은 유효한 토큰이 없는 개별 요청을 차단하지는 않습니다. 이 규칙 그룹의 공통 보호 수준은 토큰 요구 사항을 관리하지 않습니다.

지능형 위협 규칙 그룹에 대한 자세한 내용은 [AWS WAF 사기 제어 계정 생성 사기 방지(ACFP) 규칙 그룹](aws-managed-rule-groups-acfp.md), [AWS WAF 사기 제어 계정 탈취 방지(ATP) 규칙 그룹](aws-managed-rule-groups-atp.md) 및 [AWS WAF Bot Control 규칙 그룹](aws-managed-rule-groups-bot.md) 섹션을 참조하세요.

**Bot Control 또는 ATP 관리형 규칙 그룹을 사용할 때 토큰이 누락된 요청을 차단하려면**  
봇 컨트롤 및 ATP 규칙 그룹을 사용하면 유효한 토큰이 없는 요청에 대해 규칙 그룹 평가를 종료하고 보호 팩(웹 ACL)에서 계속 평가할 수 있습니다.

토큰이 없거나 토큰이 거부된 모든 요청을 차단하려면 관리형 규칙 그룹 바로 뒤에 실행되도록 규칙을 추가하여 해당 규칙 그룹이 처리하지 않는 요청이 캡처 및 차단되도록 합니다.

다음은 ATP 관리형 규칙 그룹을 사용하는 보호 팩(웹 ACL)의 예제 JSON 목록입니다. 보호 팩(웹 ACL)에는 `awswaf:managed:token:absent` 레이블을 캡처하고 처리하는 규칙이 추가되었습니다. 이 규칙은 평가 범위를 로그인 엔드포인트로 이동하는 웹 요청으로 좁혀서 ATP 규칙 그룹의 범위와 일치시킵니다. 추가된 규칙은 굵게 표시됩니다.

```
{
  "Name": "exampleWebACL",
  "Id": "55555555-6666-7777-8888-999999999999",
  "ARN": "arn:aws:wafv2:us-east-1:111111111111:regional/webacl/exampleWebACL/55555555-4444-3333-2222-111111111111",
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "",
  "Rules": [
    {
      "Name": "AWS-AWSManagedRulesATPRuleSet",
      "Priority": 1,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesATPRuleSet",
          "ManagedRuleGroupConfigs": [
            {
              "AWSManagedRulesATPRuleSet": {
                "LoginPath": "/web/login",
                "RequestInspection": {
                  "PayloadType": "JSON",
                  "UsernameField": {
                    "Identifier": "/form/username"
                  },
                  "PasswordField": {
                    "Identifier": "/form/password"
                  }
                },
                "ResponseInspection": {
                  "StatusCode": {
                    "SuccessCodes": [
                      200
                    ],
                    "FailureCodes": [
                      401,
                      403,
                      500
                    ]
                  }
                }
              }  
            }
          ]
        }
      },
      "OverrideAction": {
        "None": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSManagedRulesATPRuleSet"
      }
    },
    {
      "Name": "RequireTokenForLogins",
      "Priority": 2,
      "Statement": {
        "AndStatement": {
          "Statements": [
            {
              "Statement": {
                "LabelMatchStatement": {
                  "Scope": "LABEL",
                  "Key": "awswaf:managed:token:absent"
                }
              }
            },
            {
              "ByteMatchStatement": {
                "SearchString": "/web/login",
                "FieldToMatch": {
                  "UriPath": {}
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                 }
                ],
                "PositionalConstraint": "STARTS_WITH"
              }
            },
            {
              "ByteMatchStatement": {
                "SearchString": "POST",
                "FieldToMatch": {
                  "Method": {}
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ],
                "PositionalConstraint": "EXACTLY"
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "RequireTokenForLogins"
      } 
    }
  ],
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "exampleWebACL"
  },
  "Capacity": 51,
  "ManagedByFirewallManager": false,
  "RetrofittedByFirewallManager": false,
  "LabelNamespace": "awswaf:111111111111:webacl:exampleWebACL:"
}
```