AWS WAF で複雑なカスタム JSON ルールを作成する方法を教えてください。
AWS WAF で複雑なカスタム JSON ルールを作成したいと考えています。
解決方法
複雑なカスタムルールは、AWS WAF コンソールの**[ウェブ ACL]および[ルールグループ]の下にある[ルール JSON エディタ]**で作成します。ルールには、ルールが定義されているルールグループまたはウェブアクセスコントロールリスト (ウェブ ACL) からアクセスします。
ネストされたステートメントを使用するカスタムルールを作成するには、JSON エディタを使用する必要があります。ネストされたステートメントは、AND、OR、またはNOT ロジックを組み合わせたものです。詳細については、「ルールステートメントの基本」をご覧ください。
ルールステートメントを作成するには、AWS WAF コンソールのルールビジュアルエディタを使用します。次に、**[ルール JSON エディタ]**を選択して JSON ステートメントを表示し、JSON エディタで必要な変更を加えます。
次の例を参考にして、独自のカスタムルールロジックを作成してください。
例 1
次のカスタムルールステートメントを使用すると、United States - US から発信され、URI が /wp-admin/ または /wp-login/ であるリクエストが許可されます。
{ "Name": "test", "Priority": 100, "Statement": { "AndStatement": { "Statements": [ { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, { "OrStatement": { "Statements": [ { "ByteMatchStatement": { "SearchString": "/wp-admin/", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "CONTAINS" } }, { "ByteMatchStatement": { "SearchString": "/wp-login/", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "CONTAINS" } } ] } } ] } }, "Action": { "Allow": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "test" } }
**ルールのロジック:**リクエストは (from US) であるとともに、URIは (/a または /b) ) である。
例 2
次のカスタムルールステートメントを使用すると、本文に XSS 署名を持つリクエストがブロックされます。このルールは /test、/login、/admin URI をインスペクションから除外します。
{ "Name": "XSS_Block_Allow_Uploads", "Priority": 100, "Statement": { "AndStatement": { "Statements": [ { "XssMatchStatement": { "FieldToMatch": { "Body": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, { "NotStatement": { "Statement": { "OrStatement": { "Statements": [ { "ByteMatchStatement": { "SearchString": "/test", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } }, { "ByteMatchStatement": { "SearchString": "/admin", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } }, { "ByteMatchStatement": { "SearchString": "/login", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } } ] } } } } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "XSS_Block_Allow_Uploads" } }
**ルールのロジック:**リクエストは (本文に XSS 署名) を持ち、URI は (/a または /b、または /c) ではない。
例 3
次のカスタムルールステートメントを使用すると、カスタムラベル「internal」を含むリクエストがブロックされます。また、リクエストがホスト、IP アドレス、URI の特定の組み合わせを持っている場合はブロックされません。
{ "Name": "Block_internal_unauthorized", "Priority": 100, "Statement": { "AndStatement": { "Statements": [ { "LabelMatchStatement": { "Scope": "LABEL", "Key": "internal" } }, { "NotStatement": { "Statement": { "AndStatement": { "Statements": [ { "ByteMatchStatement": { "FieldToMatch": { "UriPath": {} }, "PositionalConstraint": "EXACTLY", "SearchString": "/test", "TextTransformations": [{ "Type": "NONE", "Priority": 0 }] } }, { "IPSetReferenceStatement": { "ARN": "arn:aws:wafv2:us-east-1:xxxxxxxxxxxx:regional/ipset/internal_IPs/xxx-xx-xxx" } }, { "ByteMatchStatement": { "FieldToMatch": { "SingleHeader": { "Name": "host" } }, "PositionalConstraint": "EXACTLY", "SearchString": "example.com", "TextTransformations": [{ "Type": "NONE", "Priority": 0 }] } } ] } } } } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Block_internal_unauthorized" } }
**ルールのロジック:**リクエストが (ラベルを含む) とともに、(URI および IP および ホスト) ではない場合、ブロック。
関連するコンテンツ
- AWS公式更新しました 7ヶ月前
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 2年前
- AWS公式更新しました 4ヶ月前