Come posso creare regole JSON personalizzate complesse in AWS WAF?

4 minuti di lettura
0

Voglio creare regole JSON personalizzate complesse in AWS WAF.

Soluzione

Crea regole personalizzate complesse nell'editor JSON delle regole in ACL Web e Gruppi di regole nella console AWS WAF. Accedi alla regola tramite il relativo gruppo di regole o la lista di controllo degli accessi Web (ACL Web) in cui è definita.

Per creare regole personalizzate che utilizzano istruzioni nidificate, devi utilizzare l'editor JSON. Le istruzioni nidificate combinano la logica AND, OR o NOT. Per ulteriori informazioni, consulta ](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statements.html)Nozioni di base sulle istruzioni per le regole[.

Per creare istruzioni per le regole, usa l'editor delle regole visivo nella console AWS WAF. Quindi scegli l'editor JSON delle regole per visualizzare le istruzioni JSON e apporta le modifiche necessarie nell'editor JSON.

Usa gli esempi seguenti come riferimento per creare la tua logica personalizzata per le regole.

Esempio 1

Usa l'istruzione seguente per una regola personalizzata che consente le richieste che provengono dagli **Stati Uniti - USA ** e hanno l'URI /wp-admin/ o /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"
  }
}

**Logica della regola:**la richiesta proviene (dagli USA) e l'URI è ( /a o /b ) ).

Esempio 2

Usa l'istruzione seguente per una regola personalizzata che blocca le richieste che contengono firme XSS nel corpo. La regola esclude gli URI /test, /login e /admin dall'ispezione:

{
 "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"
 }
}

**Logica della regola:**la richiesta ha la (firma XSS nel corpo) e l'URI non è ( /a o /b o /c ).

Esempio 3

Usa l'istruzione seguente per una regola personalizzata che blocca le richieste che contengono l'etichetta personalizzata internal. Inoltre le richieste non possono avere una combinazione specifica di host, indirizzo IP e 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"
 }
}

**Logica della regola:**se la richiesta (contiene l'etichetta) e non (URI e IP e host), allora blocca.

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa