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:
|
source.matchTag(SECURE_TAG) |
booleano |
El argumento es el ID permanente de la etiqueta segura, como
|
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 |
Cuando se compara un patrón |
inIpRange(IP_ADDRESS, |
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 Te recomendamos que uses |
request.path |
cadena | Ruta de URL solicitada. |
request.query |
cadena | Consulta de URL con el formato
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 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 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. |