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. Secure Web Proxy usa un subconjunto de condiciones de CEL para tomar decisiones de autorización booleanas basadas en datos de atributos. Por lo general, una expresión de condición consta de una o varias instrucciones unidas por operadores lógicos (&&, || o !). Cada instrucción expresa una regla de control basada en atributos que se aplica a la vinculación de roles y, en última instancia, determina si se permite el acceso.

Atributos

Usa atributos de sesión y de aplicación al definir políticas de proxy web seguro para describir los atributos de sesión o de 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, los hosts y el intervalo de IP. Los atributos de aplicación, descritos por ApplicationMatcher, se aplican a atributos de aplicación como los encabezados, el método y la ruta de la solicitud.

Atributos disponibles para 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 cadena Dirección IP del cliente que ha enviado la solicitud.
source.port entero Puerto del cliente que ha enviado la solicitud.
destination.port entero Puerto de upstream al que tu instancia de proxy web seguro envía el tráfico.
host() cadena Valor de host usado para la resolución de DNS y las conexiones upstream. No se incluye el puerto. El valor de **host()** se determina de la siguiente manera:
  • Solicitudes HTTP sin formato: encabezado Host
  • Solicitudes HTTP CONNECT de túnel proxy: destino CONNECT
source.matchTag(SECURE_TAG) booleano

True, si la fuente está asociada a 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 a 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 una barra diagonal (/), como en host(), solo se compara la parte del dominio del patrón. Para obtener más información, consulta cómo interpreta UrlList las entradas.

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

Atributos disponibles solo para ApplicationMatcher

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

Atributo Tipo de atributo Descripción
request.headers mapa Mapa de cadena a cadena de los encabezados de la solicitud. Si un encabezado contiene varios valores, el valor de este mapa es una cadena con todos los valores del encabezado separados por comas. Todas las claves de este mapa están en minúsculas.
request.method cadena Método de solicitud, como GET o POST.
request.host cadena

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

Te recomendamos que uses host() en la mayoría de los casos.

request.path cadena Ruta de URL solicitada.
request.query cadena

Consulta de URL con el formato name1=value&name2=value2, tal como aparece en la primera línea de la solicitud.

No se realiza ninguna descodificación.

request.scheme cadena Esquema de URL, como HTTP o HTTPS. Todos los valores de este atributo están en minúsculas.
request.url() cadena

Comodidad para host() + request.path.

No incluye el puerto y usa un valor de host que puede ser diferente de la cabecera Host.

request.useragent() cadena Comodidad equivalente a request.headers['user-agent'].

Operadores

Secure Web Proxy admite varios operadores que se pueden usar para crear expresiones lógicas complejas a partir de instrucciones de expresiones sencillas. 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 varias 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 definas y te permiten desarrollar reglas para controlar el acceso a los recursos sin tener que enumerar todas las combinaciones posibles.

Operadores lógicos

En la siguiente tabla se describen los operadores lógicos que admite Secure Web Proxy.

Expresión de ejemplo Descripción
x == "foo" Devuelve True si x es igual al argumento de cadena constante.
x == R"fo'o" Devuelve True si x es igual al literal de cadena sin formato que se ha proporcionado y que no interpreta secuencias de escape. Los literales de cadena sin procesar son útiles para expresar cadenas que el código debe usar para aplicar el formato de escape a los caracteres de secuencia.
x == y Devuelve True si x es igual a y.
x != y Devuelve True si x no es igual a y.
x && y Devuelve True si tanto x como y son True.
x || y Devuelve True si x, y o ambos son True.
!x Devuelve True si el valor booleano x es False. De lo contrario, devuelve False si el valor booleano x es True.
m['k'] Si la clave k está presente, devuelve el valor de la clave k en el mapa de cadenas m. Si no está presente, devuelve un error que provoca que la regla que se está evaluando no coincida.k

Operadores de manipulación de cadenas

En la siguiente tabla se describen los operadores de manipulación de cadenas que admite Secure Web Proxy.

Expresión Descripción
x.contains(y) Devuelve True si la cadena x contiene la subcadena y.
x.startsWith(y) Devuelve True si la cadena x empieza por la subcadena y.
x.endsWith(y) Devuelve True si la cadena x termina con la subcadena y.
x.matches(y)

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

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

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