Wie erstelle ich komplexe benutzerdefinierte JSON-Regeln in AWS WAF?
Ich möchte komplexe benutzerdefinierte JSON-Regeln in AWS WAF erstellen.
Lösung
Erstellen Sie komplexe benutzerdefinierte Regeln im JSON-Editor unter Web-ACLs und Regelgruppen in der AWS-WAF-Konsole. Greifen Sie auf die Regel über ihre Regelgruppe oder die Web-Zugriffskontrollliste (Web ACL) zu, in der sie definiert ist.
Um benutzerdefinierte Regeln zu erstellen, die verschachtelte Anweisungen verwenden, müssen Sie den JSON-Editor verwenden. Verschachtelte Anweisungen kombinieren UND-, ODER- oder NICHT-Logik. Weitere Informationen finden Sie unter Grundlagen von Regelanweisungen.
Verwenden Sie den visuellen Editor für Regeln in der AWS-WAF-Konsole, um Regelanweisungen zu erstellen. Wählen Sie dann JSON-Editor für Regeln, um die JSON-Anweisungen anzuzeigen und die erforderlichen Änderungen im JSON-Editor vorzunehmen.
Verwenden Sie die folgenden Beispiele als Referenz, um Ihre eigene benutzerdefinierte Regellogik zu erstellen.
Beispiel 1
Verwenden Sie die folgende benutzerdefinierte Regelanweisung, um eine Anfrage zuzulassen, wenn sie aus den Vereinigten Staaten – USA stammt und den URI /wp-admin/ oder /wp-login/ hat:
{ "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" } }
Regellogik: Die Anfrage ist (aus den USA) UND URI ist ( /a ODER /b ).
Beispiel 2
Verwenden Sie die folgende benutzerdefinierte Regelanweisung, um eine Anfrage zu blockieren, wenn sie XSS-Signaturen im Text enthält. Die Regel schließt die URIs /test, /login und /admin von der Überprüfung aus:
{ "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" } }
Regellogik: Die Anfrage hat (XSS-Signatur im Text) UND URI ist NICHT ( /a ODER /b ODER /c ).
Beispiel 3
Verwenden Sie die folgende benutzerdefinierte Regelanweisunge, um eine Anfrage zu blockieren, wenn sie das interne benutzerdefinierte Label enthält. Anfragen dürfen auch keine bestimmte Kombination für den Host, die IP-Adresse und den URI haben:
{ "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" } }
Regellogik: Wenn die Anfrage (das Label enthält) UND nicht (URI und IP und Host), dann blockieren.

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren