Il CEL (Common Expression Language) è 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 gli attributi dell'applicazione vengono utilizzati quando si definiscono i criteri Secure Web Proxy per descrivere gli attributi di sessione o gli attributi dell'applicazione a cui si applica un criterio.
Gli attributi della 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 ad attributi dell'applicazione, come le intestazioni della richiesta, il metodo di richiesta HTTP o il percorso della richiesta.
Attributi disponibili in SessionMatcher
e ApplicationMatcher
La seguente tabella 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 upstream 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:
|
source.matchTag(SECURE_TAG) |
boolean |
L'argomento è l'ID permanente del tag sicuro, come
|
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 |
Quando viene trovata una corrispondenza di un pattern |
inIpRange(IP_ADDRESS, |
boolean | True se IP_ADDRESS si trova all'interno di IP_RANGE , ad esempio
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 seguente tabella 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 minuscole. |
request.method |
string | Il metodo di richiesta HTTP, ad esempio GET o POST. |
request.host |
string | Comodità equivalente a Ti consigliamo di utilizzare |
request.path |
string | Il percorso URL HTTP richiesto. |
request.query |
string | La query URL HTTP nel formato 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 Questa porta 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 utilizzati per creare espressioni logiche complesse da semplici istruzioni di espressione. Secure Web Proxy supporta operatori logici come &&
, ||,
e !
e operatori di manipolazione di 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
Nella tabella seguente vengono descritti gli operatori logici supportati da Secure Web Proxy.
Espressione di esempio | Descrizione |
---|---|
x == "foo" |
Restituisce True se x è uguale all'argomento del valore 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 stringa non elaborata sono comodi per esprimere le 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 oppure restituisce False se il valore booleano
x è True . |
m['k'] |
Se la chiave k è presente, 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 Il pattern RE2 viene compilato utilizzando l'opzione RE2::Latin1 che disabilita le caratteristiche 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 di 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. |