Referencia de lenguaje del comparador CEL

Common Expression Language (CEL) es un lenguaje completo de código abierto que no es de Turing y que implementa una semántica común para la evaluación de expresiones. El Proxy web seguro usa un subconjunto de condiciones CEL para tomar decisiones de autorización booleanas en función de los datos de atributos. En general, una expresión de condición consta de una o más declaraciones unidas por operadores lógicos (&&, || o !). Cada declaración expresa una regla de control basada en atributos que se aplica a la vinculación de función y, en última instancia, determina si se permite el acceso.

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 sesión o los atributos de la aplicación a los que se aplica una política.

Los atributos de sesión, descritos por SessionMatcher, se aplican a atributos específicos de la sesión, como la dirección IP de origen o de destino, los hosts o el rango de IP. Los atributos de la aplicación, que se describen en ApplicationMatcher, se aplican a los atributos de la aplicación, como los encabezados de la 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 envía 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 de la siguiente manera:
  • Solicitudes HTTP sin procesar: el encabezado del host
  • Solicitudes CONNECT de HTTP del túnel proxy: El destino CONNECT
source.matchTag(SECURE_TAG) boolean

Es 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) boolean Es True si la fuente está asociada con SERVICE_ACCOUNT, como source.matchServiceAccount('x@my-project.iam.gserviceaccount.com').
inUrlList(HOST_OR_URL, NAMED_LIST) boolean

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 una barra diagonal (/), como en host(), solo se hace coincidir la parte del dominio del patrón. Para obtener más información sobre la interpretación de UrlList, consulta Cómo interpreta UrlList las entradas.

inIpRange(IP_ADDRESS,
IP_RANGE)
boolean Es True si IP_ADDRESS se encuentra 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 de este mapa es una cadena separada por comas de todos los valores del encabezado. Las claves en este mapa están en 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

Es la consulta de URL HTTP en el formato 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 URL HTTP, como HTTP o HTTPS. Los valores de este atributo están en minúsculas.
request.url() string

Conveniente para host() + request.path.

Esto 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 se pueden usar para compilar expresiones lógicas complejas a partir de declaraciones de expresión simples. El Proxy web seguro admite operadores lógicos, como &&, ||, y !, y operadores de manipulación de cadenas, como x.contains('y').

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

Los operadores de manipulación de cadenas coinciden con las cadenas o subcadenas que defines y te permiten desarrollar reglas para controlar el acceso a los recursos sin enumerar todas las combinaciones posibles.

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 al argumento de literal de string constante.
x == R"fo'o" Muestra True si x es igual al literal de string sin procesar determinado que no interpreta secuencias de escape. Los literales de string sin procesar son convenientes para expresar strings que el código debe usar a fin de escapar de los caracteres de 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 False si el valor booleano x es True.
m['k'] Si la clave k está presente, muestra el valor de la clave k en el mapa de cadena a cadena m. Si la clave k no está presente, muestra un error que hace que la regla en evaluación no coincida.

Operadores de manipulación de cadenas

En la siguiente tabla, se describen los operadores de manipulación de cadenas que admite el Proxy web seguro.

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

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

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

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