Direkt zum Inhalt

Wie erstelle ich komplexe benutzerdefinierte JSON-Regeln in AWS WAF?

Lesedauer: 4 Minute
0

Ich möchte komplexe benutzerdefinierte JSON-Regeln in AWS WAF erstellen.

Lösung

Eine komplexe benutzerdefinierte Regel erstellen

Führe die folgenden Schritte aus:

  1. Öffne die AWS-WAF-Konsole.
  2. Wähle im Navigationsbereich die Option Regelgruppen aus.
  3. Wähle deine Regelgruppe aus.
  4. Wähle Regeln verwalten und dann Regel hinzufügen aus.
  5. Wähle Benutzerdefinierte Regel und dann Weiter aus.
  6. Wähle JSON, um den JSON-Regel-Editor zu öffnen.
  7. Aktualisiere den JSON-Regel-Editor mit deiner benutzerdefinierten Regel.
  8. Wähle Regel hinzufügen aus.

Hinweis: Um benutzerdefinierte Regeln zu erstellen, die verschachtelte Anweisungen verwenden, musst du den JSON-Editor verwenden. Verschachtelte Anweisungen kombinieren UND-, ODER- oder NICHT-Logik. Weitere Informationen findest du unter Using rule statement in AWS WAF (Verwenden von Regelanweisungen in AWS WAF).

Verwende die folgenden Beispiele als Referenz, um deine eigene benutzerdefinierte Regellogik zu erstellen.

Beispiel 1

Verwende 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

Verwende 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

Verwende die folgende benutzerdefinierte Regelanweisung, 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:555555555555:regional/ipset/internal_IPs/###-##-###"
                    }
                  },
                  {
                    "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.

AWS OFFICIALAktualisiert vor 6 Monaten