Common Expression Language (CEL) es una
Lenguaje completo de código abierto que no es de Turing y que implementa semánticas comunes para
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 políticas de proxy web seguro para describir los atributos de sesión o los atributos de 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 describe ApplicationMatcher
, se aplican a los atributos de la aplicación, como los encabezados de solicitud, el método de solicitud HTTP o la ruta de 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 | Es 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 según lo siguiente:
|
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 con
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 para 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 | 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 Recomendamos usar |
request.path |
string | La ruta de URL HTTP solicitada. |
request.query |
string | La consulta de URL HTTP en el formato de
No se realiza ninguna decodificación. |
request.scheme |
string | El esquema de la URL HTTP, como HTTP o HTTPS Todos los valores de este atributo están en minúsculas. |
request.url() |
string | Comodidad para No incluye el puerto y usa un valor de host que puede diferir del encabezado de 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 sentencias 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 varias variables en una expresión
condicional. Por ejemplo, request.method == 'GET' && host().matches('.*\.example.com')
une dos sentencias y requiere que ambas sean True
para producir un 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 usa el Proxy web seguro admite.
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. Los literales de cadena sin procesar son convenientes para expresar cadenas que el código debe usar para escapar 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 muestra 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 . 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 cadena x contiene la substring y . |
x.startsWith(y) |
Muestra True si la string x comienza con el
la subcadena y . |
x.endsWith(y) |
Muestra True si la string x termina con el
la subcadena y . |
x.matches(y) |
Muestra El patrón RE2 se compila usando 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 de la string x en mayúsculas. |
x + y |
Muestra la cadena concatenada xy . |
int(x) |
Convierte el resultado de la cadena de x en un tipo de int . La cadena convertida se puede usar para comparar números enteros
operadores aritméticos estándar como > y
<= Esto solo funciona para valores que pueden ser números enteros. |