Riferimento al linguaggio del matcher CEL

CEL (Common Expression Language) è una un linguaggio completo open source non Turing che implementa la semantica comune per e 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, una condizione consiste in una o più istruzioni unite da valori logici operatori (&&, || o !). Ogni istruzione esprime un'espressione regola di controllo che si applica all'associazione del ruolo e determina infine se sia consentito l'accesso.

Attributi

Gli attributi sessione e gli attributi applicazione vengono utilizzati per definire i criteri del proxy web sicuro per descrivere gli attributi sessione o gli attributi applicazione a cui si applica un criterio.

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

Attributi disponibili in SessionMatcher e ApplicationMatcher

La tabella seguente descrive gli attributi che si applicano sia a SessionMatcher che 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 del client che ha inviato la richiesta.
destination.port integer La porta a monte a cui l'istanza di Secure Web Proxy invia 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 CONNECT HTTP del 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, come 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 viene trovata una corrispondenza tra un pattern UrlList e valori senza un barra obliqua (/), ad esempio in host(), solo la la porzione di dominio del pattern corrisponde. Per ulteriori informazioni sull'interpretazione di UrlList, vedi Come UrlList interpreta le voci.

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

Attributi disponibili solo per ApplicationMatcher

Nella tabella seguente vengono descritti 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 è separato da virgole stringa di tutti i valori dell'intestazione. Le chiavi in questa mappa sono tutte minuscole.
request.method string Il metodo di richiesta HTTP, ad esempio GET o POST.
request.host string

Comodo come 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 appare 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 per questo attributo sono tutti in minuscolo.
request.url() string

Comodità per host() + request.path.

Non è inclusa la porta e viene utilizzato un valore host che potrebbe essere diverso dall'intestazione host.

request.useragent() string Comodo come request.headers['user-agent'].

Operatori

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

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

Gli operatori di manipolazione delle stringhe corrispondono a stringhe o sottostringhe che definisci e ti consentono di sviluppare regole per controllare l'accesso alle risorse senza elencare ogni combinazione possibile.

Operatori logici

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

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

Operatori di manipolazione delle stringhe

La tabella seguente descrive 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 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 disattiva 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 di stringa di x in un tipo int. La stringa convertita può essere utilizzata per il confronto di numeri interi con operatori aritmetici standard come > e <=. Questo metodo funziona solo per i valori che possono essere numeri interi.