ADC

Erweiterte Richtlinienausdrücke mithilfe der API-Spezifikation

Sie können einheitliche API-Spezifikationen auf die Importseite der Web App Firewall importieren und dann mithilfe der API-Spezifikationen einen erweiterten Richtlinienausdruck erstellen. Sie können die entsprechenden Aktionen für den eingehenden API-Verkehr basierend auf den Ausdrücken konfigurieren. Eine API-Spezifikation enthält den Endpunkt, das Schema und die Parameter. Der eingehende API-Verkehr kann vom Typ gRPC oder REST sein.

Sie können den Ausdruck http.req.api verwenden, um die Endpunkte in den eingehenden Anfragen zu identifizieren, die in der API-Spezifikation definiert sind.

Syntax:

http.req.api (“API_Spec_Name”)

Beispiel:

set responder policy reject -rule !"http.req.api(\"myspec\").endpoint(\"POST"\",\"/v1/pet/\")

Das System lehnt den gesamten Datenverkehr ab, wenn der Datenverkehr nicht mit den in der API-Spezifikation angegebenen Endpunkten übereinstimmt.

Erweiterter Richtlinienausdruck für das API-Schema

Mithilfe der folgenden Operationen können Sie erweiterte Richtlinienausdrücke für die API erstellen:

Voraussetzungen.

Importieren Sie die API-Spezifikationsdatei mithilfe der Importoption in der Web App Firewall.

Weitere Informationen finden Sie unter Importe.

Ausdruck zum Abgleichen des Datenverkehrs nach der HTTP-Methode

Verwenden Sie eine HTTP-Zeichenfolgenmethode, um passende APIs einzuschränken. Diese Zeichenfolge kann eine oder mehrere HTTP-Methoden enthalten, getrennt durch” “oder kann einen Platzhalter (*) enthalten. Wenn mehr als eine Methode angegeben wird, wird der Ausdruck zu einer ODER-Bedingung zwischen den Methoden ausgewertet.

Beispielsweise gleicht GET oder PUT oder DELETE eine eingehende Anfrage mit der HTTP-Methode GET OR PUT OR DELETE ab.

Beispiel:

  • Einzelne HTTP-Methode

    http.req.api("petstore").method("POST").text("id").eq("1")

  • Mehrfache Methode http.req.api("petstore").method("GET|DELETE").exists

Ausdruck zum Abgleichen des Datenverkehrs nach URL

PATH (URL-Zeichenfolge) wird verwendet, um die Endpunkte abzugleichen, die Platzhalter enthalten. Das einzelne Sternchen (*) entspricht einem einzelnen Segment, während das doppelte Sternchen (**) allen möglichen Segmenten entspricht, denen das doppelte Sternchen vorangestellt ist.

Beispiel:

  • http.api("petstore").path("/v1/pets/*/find") Es gleicht den eingehenden Verkehr nur mit /v1/pets/*/find
  • http.api("petstore").path("/v1/pets/**") Es entspricht allen Endpunkten, beginnend mit /v1/pets

Ausdruck zum Abgleichen des Datenverkehrs nach API-Namen

Verwenden Sie den Ausdruck APINAME (Namenszeichenfolge), um den passenden Datenverkehr nach API-Namen einzuschränken. Sie können die API-Namenszeichenfolge auch verwenden, indem Sie den Befehl show ausführen, wie im folgenden Beispiel gezeigt:

    show api spec gspec
       Name: gspec
       File: gfile
       Type: OAS
<!--NeedCopy-->
  • operation ID dient als Endpunktname, wenn der Dateityp OAS ist.

    Beispiel: Um den eingehenden Datenverkehr für den Endpunkt aus dem folgenden OAS zu validieren:

    Vorgangs-ID: adexchangebuyer.accounts.list

    Verwenden Sie den folgenden Richtlinienausdruck: http.req.api("schema").apiname("adexchangebuyer.accounts.list").exists

  • service name und rpc name dienen als Endpunktname, wenn der Dateityp Proto ist.

    Im folgenden Beispiel ist echoService.echo der Endpunkt: service echoService { rpc Echo (Echoreq) returns (echoResp) { option (google.api.http) = {get: “ /v1/ {name=messages/*}”};}}

Greifen Sie auf Werte aus der API-Spezifikation zu

Sie können auf die Felder in den API-Spezifikationen über Name, Pfad, Abfrageparameter, JSON-Text oder gRPC-Body zugreifen. Verwenden Sie PI-Ausdrücke, um den Typ des Parameters zu definieren. Die folgenden Typen werden unterstützt:

  • num − Ein ganzzahliger Wert.
  • ulong − Ein langer Integer-Wert.
  • bool - Ein boolescher Wert.
  • double - Ein doppelter Wert.
  • text - Eine Zeichenfolge beliebiger Länge.

Beispiel: Verwenden Sie den folgenden Ausdruck, um den eingehenden Datenverkehr mithilfe eines numerischen Parameters zu überprüfen, der dem Wert eins entspricht:

http. req.api("petstore.proto"). APIName ("TestPet").NUM("test_num1").eq(1)

Greifen Sie auf den Wert aus den wiederholten Feldern zu

Um auf wiederholte Objekte in APIs zuzugreifen, verwenden Sie den zweiten Parameter als sich wiederholenden Index. Ein Zugriff außerhalb des Arrays führt zu einem undefinierten Wert.

Beispiel:

Um das fünfte Tag im Endpunkt ‘FindPets’ abzurufen, verwenden Sie: http.req.api("petstore.proto", "FindPets').TEXT( "tags", 5 ).contains("mytag")

Um das fünfte Tag in der Zeichenfolge mit wiederholten Tags abzurufen, verwenden Sie: /v1/pets?tags=1&tags=2&tags=3&tags=4&tags=mytag&tags=6

Greifen Sie auf Werte aus den verschachtelten Objekten zu

Objekte können in andere Objekte verschachtelt werden. Derselbe Feldname kann in verschachtelten Objekten im selben Dokument vorkommen. Der vollständige Zugriffsname muss jedoch weiterhin eindeutig sein. Um auf verschachtelte Felder zuzugreifen, verketten Sie die Feldnamen mit einem”. “(Punkt) als Trennzeichen.

Beispiel: Verwenden Sie kennel.location.state, um California aus dem folgenden JSON abzurufen.

{ “Zwinger”: { “Standort”: { “Bundesstaat”: “Kalifornien” }} }

Ausdruck

http. req.api("petstore.proto", "TestPet").text( "kennel.location.state" ).contains("California")

Zugriff auf den Wert mithilfe eines Objektausdrucks

Der Object () -Ausdruck wird beim Zugriff auf Unterfelder wiederholter Objekte verwendet. Wenn zwei oder mehr Objekte mit unterschiedlichen Werten konfiguriert sind, können Sie einen Ausdruck erstellen, um das Objekt für einen Wert zu validieren. Im folgenden JSON-Text hat das Objekt “foo” beispielsweise zwei Werte, nämlich eins und keinen. { “foo”: [ { “bar”: “eins” }, { “bar”: “keiner” } ] }

Um den Wert mit keinem zu vergleichen, können Sie den Ausdruck wie folgt konfigurieren:

HTTP. req.api("schema").object("foo",1).text("bar").eq("none")

Erweiterte Richtlinienausdrücke mithilfe der API-Spezifikation