Riferimento per i linguaggi matcher CEL

Il Common Expression Language (CEL) è un linguaggio completo open source non Turing che implementa una semantica comune per la valutazione delle espressioni. Secure Web Proxy utilizza un sottoinsieme di condizioni CEL per prendere decisioni di autorizzazione booleane in base ai dati degli attributi. In generale, un'espressione di condizione è composta da una o più istruzioni unite da operatori logici (&&, || o !). Ogni istruzione esprime una regola di controllo basata su attributi che si applica all'associazione del ruolo e determina, in ultima analisi, se l'accesso è consentito.

Attributi

Gli attributi di sessione e quelli dell'applicazione vengono utilizzati durante la definizione dei criteri per Secure Web Proxy per descrivere gli attributi di sessione o dell'applicazione a cui si applica un criterio.

Gli attributi di sessione, descritti da SessionMatcher, si applicano ad attributi specifici della sessione, come l'indirizzo IP di origine o di destinazione, gli host o l'intervallo IP. Gli attributi dell'applicazione, descritti da ApplicationMatcher, si applicano agli attributi dell'applicazione, come intestazioni delle richieste, metodo della richiesta HTTP o percorso della richiesta.

Attributi disponibili in SessionMatcher e ApplicationMatcher

La tabella seguente descrive gli attributi che si applicano sia a SessionMatcher sia a ApplicationMatcher.

Attributo Tipo di attributo Descrizione
source.ip string L'indirizzo IP del client che ha inviato la richiesta.
source.port integer La porta client che ha inviato la richiesta.
destination.port integer La porta a monte a cui l'istanza Secure Web Proxy invia il traffico.
host() string Il valore host utilizzato per la risoluzione DNS e le connessioni upstream. Non è inclusa la porta. Il valore è determinato da quanto segue:
  • Richieste HTTP non elaborate: l'intestazione Host
  • Richieste HTTP CONNECT per tunnel proxy: destinazione CONNECT
source.matchTag(SECURE_TAG) boolean

True se l'origine è associata a SECURE_TAG.

L'argomento è l'ID permanente del tag sicuro, ad esempio source.matchTag('tagValues/123456').

source.matchServiceAccount(SERVICE_ACCOUNT) boolean True se l'origine è associata a SERVICE_ACCOUNT, ad esempio source.matchServiceAccount('x@my-project.iam.gserviceaccount.com').
inUrlList(HOST_OR_URL, NAMED_LIST) boolean

True se HOST_OR_URL è presente nell'elenco denominato fornito NAMED_LIST. Ad esempio:

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

Quando un pattern UrlList viene confrontato con valori privi di una barra (/), ad esempio in host(), viene soddisfatta solo la parte del dominio del pattern. Per maggiori informazioni sull'interpretazione di UrlList, consulta la sezione In che modo UrlList interpreta le voci.

inIpRange(IP_ADDRESS,
IP_RANGE)
boolean True se IP_ADDRESS è contenuto all'interno di IP_RANGE come inIpRange(source.ip, '1.2.3.0/24'). Le subnet mask per gli indirizzi IPv6 non possono superare /64.

Attributi disponibili solo per ApplicationMatcher

La tabella seguente descrive gli attributi che si applicano solo a ApplicationMatcher.

Attributo Tipo di attributo Descrizione
request.headers mappa Una mappa stringa-stringa delle intestazioni delle richieste HTTP. Se un'intestazione contiene più valori, il valore in questa mappa è una stringa separata da virgole di tutti i valori dell'intestazione. Le chiavi in questa mappa sono tutte in minuscolo.
request.method string Il metodo di richiesta HTTP, ad esempio GET o POST.
request.host string

Comodità equivalente a request.headers['host'].

Ti consigliamo di utilizzare host() nella maggior parte dei casi.

request.path string Il percorso URL HTTP richiesto.
request.query string

La query URL HTTP nel formato name1=value&name2=value2, come viene visualizzato nella prima riga della richiesta HTTP.

Non viene eseguita alcuna decodifica.

request.scheme string Lo schema URL HTTP, ad esempio HTTP o HTTPS. I valori di questo attributo sono tutti in minuscolo.
request.url() string

Comodità per host() + request.path.

Questo valore non include la porta e utilizza un valore host che potrebbe essere diverso dall'intestazione dell'host.

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

Operatori

Secure Web Proxy supporta diversi operatori che possono essere usati per creare espressioni logiche complesse da semplici istruzioni di espressione. Secure Web Proxy supporta gli operatori logici come &&, ||, e ! e gli operatori di manipolazione delle stringhe come x.contains('y').

Gli operatori logici consentono di verificare più variabili in un'espressione condizionale. Ad esempio, request.method == 'GET' && host().matches('.*\.example.com') unisce due istruzioni e richiede che entrambe siano True per produrre un risultato complessivo di True.

Gli operatori di manipolazione delle stringhe associano le stringhe o le sottostringhe da te definite e ti consentono di sviluppare regole per controllare l'accesso alle risorse senza elencare ogni possibile combinazione.

Operatori logici

La seguente tabella descrive gli operatori logici supportati da Secure Web Proxy.

Espressione di esempio Descrizione
x == "foo" Restituisce True se x è uguale all'argomento letterale stringa costante.
x == R"fo'o" Restituisce True se x è uguale al valore letterale della stringa non elaborata specificato che non interpreta le sequenze di escape. I valori letterali di stringa non elaborata sono utili per esprimere stringhe che il codice deve utilizzare per l'escape dei caratteri della sequenza.
x == y Restituisce True se x è uguale a y.
x != y Restituisce True se x è diverso da y.
x && y Restituisce True se x e y sono entrambi True.
x || y Restituisce True se x, y o entrambi sono True.
!x Restituisce True se il valore booleano x è False o restituisce False se il valore booleano x è True.
m['k'] Se è presente la chiave k, restituisce il valore nella chiave k nella mappa stringa-stringa m. Se la chiave k non è presente, restituisce un errore che impedisce la corrispondenza della regola in fase di valutazione.

Operatori di manipolazione delle stringhe

Nella tabella seguente vengono descritti gli operatori di manipolazione delle stringhe supportati da Secure Web Proxy.

Espressione Descrizione
x.contains(y) Restituisce True se la stringa x contiene la sottostringa y.
x.startsWith(y) Restituisce True se la stringa x inizia con la sottostringa y.
x.endsWith(y) Restituisce True se la stringa x termina con la sottostringa y.
x.matches(y)

Restituisce True se la stringa x corrisponde al pattern RE2 y specificato.

Il pattern RE2 viene compilato utilizzando l'opzione RE2::Latin1 che disabilita le funzionalità Unicode.

x.lower() Restituisce il valore minuscolo della stringa x.
x.upper() Restituisce il valore in maiuscolo della stringa x.
x + y Restituisce la stringa concatenata xy.
int(x) Converte il risultato della stringa x in un tipo int. La stringa convertita può essere utilizzata per il confronto di numeri interi con operatori aritmetici standard come > e <=. Funziona solo per i valori che possono essere numeri interi.