유효한 AWS WAF 토큰이 없는 요청 차단 - AWS WAF, AWS Firewall Manager, 및 AWS Shield Advanced

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

유효한 AWS WAF 토큰이 없는 요청 차단

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

참고

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

토큰 관리에서 적용하는 레이블 지정에 대한 내용은 앞의 AWS WAF 봇 및 사기 관리 규칙 그룹에 의한 토큰 라벨링 섹션을 참조하세요.

그러면 지능형 위협 완화 관리형 규칙 그룹이 다음과 같이 토큰 요구 사항을 처리합니다.

  • AWSManagedRulesACFPRuleSet AllRequests 규칙은 모든 요청에 대해 Challenge 작업을 실행하여 accepted 토큰 레이블이 없는 요청을 효과적으로 차단하도록 구성됩니다.

  • AWSManagedRulesATPRuleSetrejected 토큰 레이블이 있는 요청을 차단하지만 absent 토큰 레이블이 있는 요청은 차단하지 않습니다.

  • AWSManagedRulesBotControlRuleSet 대상 보호 수준에서는 클라이언트가 accepted 토큰 레이블 없이 요청을 5회 전송하고 나면 클라이언트에 챌린지를 제시합니다. 이 수준은 유효한 토큰이 없는 개별 요청을 차단하지는 않습니다. 이 규칙 그룹의 공통 보호 수준은 토큰 요구 사항을 관리하지 않습니다.

지능형 위협 규칙 그룹에 대한 자세한 내용은 AWS WAF 사기 방지 계정 생성 사기 방지 (ACFP) 규칙 그룹, AWS WAF 사기 방지 계정 탈취 방지 (ATP) 규칙 그룹AWS WAF 봇 컨트롤 규칙 그룹 섹션을 참조하세요.

Bot Control 또는 ATP 관리형 규칙 그룹을 사용할 때 토큰이 누락된 요청을 차단하려면

Bot Control 및 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, "LabelNamespace": "awswaf:111111111111:webacl:exampleWebACL:" }