Referencia del lenguaje del comparador de CEL

Common Expression Language (CEL) es un lenguaje de código abierto no completo de Turing que implementa semánticas comunes para la evaluación de expresiones. El Proxy web seguro usa un subconjunto de condiciones de CEL para hacer las decisiones de autorización booleanas basadas en datos de atributos. En general, una condición expresión consta de una o más instrucciones unidas por valores lógicos operadores (&&, || o !). Cada sentencia expresa un valor basado en atributos de control que se aplica a la vinculación de rol y, en última instancia, determina si el acceso de los usuarios.

Atributos

Los atributos de sesión y de aplicación se usan cuando se definen Las políticas del Proxy web seguro para describir los atributos de la sesión o atributos de la aplicación a los que se aplica una política.

Atributos de la sesión, descritos de SessionMatcher, se aplican a atributos específicos de la sesión, como la fuente o direcciones IP de destino, hosts o rango de IP. Los atributos de la aplicación, que se describen ApplicationMatcher, se aplican a atributos de aplicación, como encabezados de solicitud, el método de solicitud HTTP o la ruta de la solicitud.

Atributos disponibles en SessionMatcher y ApplicationMatcher

En la siguiente tabla, se describen los atributos que se aplican a SessionMatcher y ApplicationMatcher

Atributo Tipo de atributo Descripción
source.ip string La dirección IP del cliente que envió la solicitud.
source.port integer El puerto del cliente que envió la solicitud.
destination.port integer El puerto upstream al que la instancia del Proxy web seguro está enviando tráfico.
host() string El valor del host que se usa para la resolución de DNS y las conexiones ascendentes. Esto no incluye el puerto. El valor se determina a través de lo siguiente:
  • Solicitudes HTTP sin procesar: el encabezado Host
  • Solicitudes de CONNECT HTTP de túnel de proxy: El objetivo de CONNECT
source.matchTag(SECURE_TAG) booleano

True si la fuente está asociada con SECURE_TAG

El argumento es el ID permanente de la etiqueta segura, como source.matchTag('tagValues/123456')

source.matchServiceAccount(SERVICE_ACCOUNT) booleano True si la fuente está asociada con SERVICE_ACCOUNT, como source.matchServiceAccount('x@my-project.iam.gserviceaccount.com')
inUrlList(HOST_OR_URL, NAMED_LIST) booleano

True si HOST_OR_URL está presente en la lista con nombre proporcionada NAMED_LIST Por ejemplo:

  • inUrlList(host(), 'projects/1234/locations/us-east1/urlLists/allowed-repos')
  • inUrlList(request.url(), 'projects/1234/locations/us-east1/urlLists/allowed-repos')

Cuando se compara un patrón UrlList con valores sin un barra diagonal (/), como en host(), solo se muestra el dominio del patrón coincide. Para obtener más información sobre la interpretación de UrlList, consulta Cómo UrlList interpreta entradas.

inIpRange(IP_ADDRESS,
IP_RANGE)
booleano True si se contiene IP_ADDRESS dentro de IP_RANGE, como inIpRange(source.ip, '1.2.3.0/24') Las máscaras de subred para las direcciones IPv6 no pueden ser mayores que /64.

Atributos disponibles solo para ApplicationMatcher

En la siguiente tabla, se describen los atributos que se aplican solo a ApplicationMatcher

Atributo Tipo de atributo Descripción
request.headers mapa Es un mapa de cadena a cadena de los encabezados de solicitud HTTP. Si un encabezado contiene varios valores, el valor en este mapa es un símbolo separado por comas de todos los valores del encabezado. Las claves de este mapa son todas minúsculas.
request.method string El método de solicitud HTTP, como GET o POST
request.host string

Conveniencia equivalente a request.headers['host'].

Recomendamos usar host() en la mayoría de los casos.

request.path string La ruta de URL HTTP solicitada.
request.query string

La consulta de URL HTTP en el formato de name1=value&name2=value2, como aparece en la primera línea de la solicitud HTTP.

No se realiza ninguna decodificación.

request.scheme string El esquema de la URL HTTP, como HTTP o HTTPS Valores de este atributo estén todas en minúsculas.
request.url() string

Comodidad para host() + request.path.

No incluye el puerto y usa un valor de host que puede diferir del encabezado del host.

request.useragent() string Conveniencia equivalente a request.headers['user-agent'].

Operadores

El Proxy web seguro admite varios operadores que pueden usarse para crear para usar expresiones lógicas a partir de sentencias de expresiones simples. El Proxy web seguro es compatible operadores lógicos, como &&, ||, y !, y manipulación de cadenas operadores, como x.contains('y').

Los operadores lógicos te permiten verificar múltiples variables en un condicional expresión. Por ejemplo: request.method == 'GET' && host().matches('.*\.example.com') se une a dos y requiere que ambas sean True para producir una resultado general de True.

Los operadores de manipulación de cadenas coinciden con cadenas o subcadenas que definas, y te permiten desarrollar reglas para controlar el acceso a los recursos sin enumerar cada combinación posible.

Operadores lógicos

En la siguiente tabla, se describen los operadores lógicos que admite el proxy web seguro.

Expresión de ejemplo Descripción
x == "foo" Muestra True si x es igual a la constante. literal de cadena.
x == R"fo'o" Muestra True si x es igual al valor sin procesar especificado. un literal de string que no interpreta secuencias de escape. Cadena sin procesar literales son convenientes para expresar cadenas que el código debe para escapar los caracteres de la secuencia.
x == y Muestra True si x es igual a y
x != y Muestra True si x no es igual a y
x && y Muestra True si x y y son True.
x || y Muestra True si x, y o ambos son True.
!x Muestra True si el valor booleano x es False, o muestra False si el valor booleano x es True.
m['k'] Si la clave k está presente, muestra el valor en la clave. k en el mapa de cadena a cadena m. Tecla If k no está presente, muestra un error que hace que la regla que se está evaluando no coincida.

Operadores de manipulación de cadenas

La siguiente tabla describe los operadores de manipulación de cadenas que El Proxy web seguro es compatible.

Expresión Descripción
x.contains(y) Muestra True si la string x contiene la la subcadena y.
x.startsWith(y) Muestra True si la string x comienza con el la subcadena y.
x.endsWith(y) Muestra True si la cadena x termina con la substring y.
x.matches(y)

Muestra True si la cadena x coincide con el patrón RE2 y especificado.

El patrón RE2 se compila con la opción RE2::Latin1 que inhabilita las funciones de Unicode.

x.lower() Muestra el valor de la cadena x en minúsculas.
x.upper() Muestra el valor de la string x en mayúsculas.
x + y Muestra la string concatenada xy.
int(x) Convierte el resultado de cadena de x en un int. el tipo de letra. La cadena convertida se puede usar para la comparación de números enteros con operadores aritméticos estándar, como > y <=. Esto solo funciona para valores que pueden ser números enteros.