有効なトークン AWS WAF がないリクエストをブロックする - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

有効なトークン AWS WAF がないリクエストをブロックする

このセクションでは、AWS WAF モバイル SDK の使用時に、トークンがないログインリクエストをブロックする方法について説明します。

インテリジェントな脅威 AWS Managed Rules のルールグループ AWSManagedRulesACFPRuleSetAWSManagedRulesATPRuleSet、および AWSManagedRulesBotControlRuleSet を使用すると、ルールグループは AWS WAF トークン管理を呼び出し、ウェブリクエスト内のトークンのステータスを評価してそれに応じたラベルを付けます。

注記

トークンのラベル付けは、これらのマネージドルールグループのいずれかを使用して評価したウェブリクエストにのみ適用されます。

適用されるトークン管理のラベル付けについては、前述の「AWS WAF でのトークンラベルのタイプ」セクションを参照してください。

その後、インテリジェントな脅威軽減マネージドルールグループは、トークンの要件を次のように処理します。

  • AWSManagedRulesACFPRuleSet AllRequests ルールは、すべてのリクエストに対して Challenge アクションを実行するように設定されており、accepted トークンラベルのないリクエストは効果的にブロックされます。

  • AWSManagedRulesATPRuleSet は、rejected トークンラベルを持つリクエストをブロックしますが、absent トークンラベルを持つリクエストはブロックしません。

  • acceptedトークンラベルなしでリクエストを 5 回送信すると、AWSManagedRulesBotControlRuleSet のターゲットを絞った保護レベルが、クライアントにチャレンジを送信します。有効なトークンを持たない個別のリクエストはブロックされません。ルールグループの共通の保護レベルでは、トークンの要件は管理されません。

インテリジェントな脅威ルールグループの詳細については、「AWS WAF Fraud Control Account Creation Fraud Prevention (ACFP) ルールグループ」、「AWS WAF Fraud Control アカウント乗っ取り防止 (ATP) のルールグループ」、および「AWS WAF Bot Control ルールグループ」を参照してください。

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, "RetrofittedByFirewallManager": false, "LabelNamespace": "awswaf:111111111111:webacl:exampleWebACL:" }