ADC

Expresiones de política avanzadas que utilizan la especificación de API

Puede importar las especificaciones de API unificadas a la página de importaciones de Web App Firewall y, a continuación, crear una expresión de directiva avanzada mediante las especificaciones de la API. Puede configurar las acciones apropiadas para el tráfico de la API entrante en función de las expresiones. Una especificación de API contiene el punto final, el esquema y los parámetros. El tráfico de la API entrante puede ser de tipo gRPC o REST.

Puede usar la expresión http.req.api para identificar los puntos finales de las solicitudes entrantes definidas en la especificación de la API.

Sintaxis:

http.req.api (“API_Spec_Name”)

Ejemplo:

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

El sistema rechaza todo el tráfico si el tráfico no coincide con los puntos finales especificados en la especificación de la API.

Expresión de directiva avanzada para el esquema de API

Puede crear expresiones de directivas avanzadas para la API mediante las siguientes operaciones:

Prerrequisitos.

Importe el archivo de especificación de la API mediante la opción de importación del Web App Firewall.

Para obtener más información, consulte Importaciones.

Expresión para hacer coincidir el tráfico mediante el método HTTP

Use un método de cadena HTTP para restringir las API coincidentes. Esta cadena puede contener uno o más métodos HTTP separados por"|"o puede contener un comodín (*). Cuando se especifica más de un método, la expresión se evalúa como una condición OR entre los métodos. Por ejemplo, GET|PUT|DELETE hace coincidir una solicitud entrante con el método HTTP GET OR PUT OR DELETE.

Ejemplo:

  • Método HTTP único

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

  • Método múltiple http.req.api("petstore").method("GET|DELETE").exists

Expresión para hacer coincidir el tráfico por URL

PATH (cadena URL) se usa para hacer coincidir los puntos finales que incluyen caracteres comodín. El asterisco simple (*) coincide con un solo segmento, mientras que el asterisco doble()** coincide con todos los segmentos posibles con el prefijo anterior al asterisco doble.

Ejemplo:

  • http.api("petstore").path("/v1/pets/*/find") Coincide con el tráfico entrante solo con /v1/pets/*/find
  • http.api("petstore").path("/v1/pets/**") Coincide con todos los puntos finales empezando por /v1/pets

Expresión para hacer coincidir el tráfico por nombre de API

Use la expresión APINAME (cadena de nombre) para restringir el tráfico coincidente por nombre de API. También puede usar la cadena de nombre de la API ejecutando el comando show como se muestra en el siguiente ejemplo:

    show api spec gspec
       Name: gspec
       File: gfile
       Type: OAS
<!--NeedCopy-->
  • operation ID sirve como nombre del punto final si el tipo de archivo es OAS.

    Ejemplo: Para validar el tráfico entrante en el punto final desde el siguiente OAS:

    ID de operación: adexchangebuyer.accounts.list

    Utilice la siguiente expresión de directiva: http.req.api("schema").apiname("adexchangebuyer.accounts.list").exists

  • service name y rpc name sirven como nombre del punto final si el tipo de archivo es proto.

    En el siguiente ejemplo, EchoService.echo es el punto final: service EchoService { rpc Echo (EchoReq) returns (EchoResp) { option (google.api.http) = {get: “ /v1/ {name=messages/*}”};}}

Acceder a los valores de la especificación de la API

Puede acceder a los campos de las especificaciones de la API por nombre, ruta, parámetros de consulta, cuerpo JSON o cuerpo de gRPC. Para definir el tipo de parámetro, utilice expresiones PI. Se admiten los siguientes tipos:

  • num: un valor entero.
  • ulong: valor entero largo.
  • bool: valor booleano.
  • double: un valor doble.
  • texto: cadena de cualquier longitud.

Ejemplo: Para validar el tráfico entrante mediante un parámetro numérico que coincida con el valor uno, utilice la siguiente expresión:

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

Acceder al valor de los campos repetidos

Para acceder a los objetos repetidos en las API, utilice el segundo parámetro como índice de repetición. El acceso fuera de la matriz da como resultado un valor indefinido.

Ejemplo:

Para recuperar la quinta etiqueta en el punto final de “FindPets”, utilice: http.req.api("petstore.proto", "FindPets').TEXT( "tags", 5 ).contains("mytag")

Para recuperar la quinta etiqueta de la cadena de etiquetas repetidas, utilice: /v1/pets?tags=1&tags=2&tags=3&tags=4&tags=mytag&tags=6

Acceder a los valores de los objetos anidados

Los objetos se pueden anidar dentro de otros objetos. El mismo nombre de campo puede aparecer en los objetos anidados del mismo documento. Sin embargo, el nombre de acceso completo debe seguir siendo único. Para acceder a los campos anidados, concatene los nombres de los campos con un”. “(punto) como separador.

Ejemplo: utilice kennel.location.state para recuperar California a partir del siguiente JSON.

{ “kennel” : { “location” : { “state” : “California” } } }

Expresión

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

Valor de acceso mediante expresión de objeto

La expresión Object() se usa para acceder a subcampos de objetos repetidos. Si hay dos o más objetos configurados con valores diferentes, puede crear una expresión para validar el objeto específico de un valor. Por ejemplo, en el siguiente cuerpo de JSON, el objeto “foo” tiene dos valores, que son uno y ninguno. { “foo”: [ { “bar”: “uno” }, { “bar”: “ninguno” } ] }

Para comparar el valor con ninguno, puede configurar la expresión de la siguiente manera:

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

Expresiones de política avanzadas que utilizan la especificación de API