Common Expression Language (CEL) è un linguaggio open source non Turing completo che implementa la 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 è costituita da una o più istruzioni unite da operatori logici (&&
, ||
o !
). Ogni istruzione esprime una regola di controllo basata sugli attributi che si applica all'associazione del ruolo e determina infine se l'accesso è consentito.
Attributi
Utilizza gli attributi della sessione e gli attributi dell'applicazione durante la definizione dei criteri del proxy web sicuro per descrivere gli attributi della sessione o gli attributi dell'applicazione a cui si applica un criterio.
Gli attributi della sessione, descritti da SessionMatcher
, si applicano agli attributi specifici della sessione, come l'indirizzo IP di origine, gli host e l'intervallo IP. Gli attributi
dell'applicazione, descritti da ApplicationMatcher
, si applicano agli attributi
dell'applicazione come le intestazioni di richiesta, il metodo di richiesta e il percorso della richiesta.
Attributi disponibili per 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 | Indirizzo IP del client che ha inviato la richiesta. |
source.port |
integer | Porta del client che ha inviato la richiesta. |
destination.port |
integer | Porta a monte a cui l'istanza di Secure Web Proxy invia il traffico. |
host() |
string | Valore host utilizzato per la risoluzione DNS e le connessioni upstream.
Non è inclusa la porta.
Il valore di **host()** è determinato da quanto segue:
|
source.matchTag(SECURE_TAG) |
boolean |
L'argomento è l'ID permanente del tag sicuro, ad esempio
|
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 un pattern |
inIpRange(IP_ADDRESS, |
boolean | True , se IP_ADDRESS è contenuto
in 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 | Mappa stringa-stringa delle intestazioni delle richieste. Se un'intestazione contiene più valori, il valore in questa mappa è una stringa separata da virgole di tutti i valori dell'intestazione. Tutte le chiavi in questa mappa sono in minuscolo. |
request.method |
string | Metodo di richiesta, ad esempio GET o POST. |
request.host |
string | Comodo come Ti consigliamo di utilizzare |
request.path |
string | Percorso dell'URL richiesto. |
request.query |
string | Query sull'URL nel formato
Non viene eseguita alcuna decodifica. |
request.scheme |
string | Schema URL, ad esempio HTTP o HTTPS. Tutti i valori di questo attributo sono in minuscolo. |
request.url() |
string | Comodità per 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 gli operatori logici, come &&
, ||,
e !
, e gli operatori di manipolazione di 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')
unisce due
affermazioni e richiede che entrambe siano True
per produrre un
risultato complessivo di 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 valore letterale della stringa non elaborata specificato 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 non è uguale a
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 . In caso contrario, restituisce False se il valore booleano x è True . |
m['k'] |
Se la chiave k è presente, restituisce il valore associato alla chiave
k nella mappa stringa-stringa m . Se la chiave
k non è presente, viene restituito un errore che
causa la mancata corrispondenza della regola in fase di valutazione. |
Operatori di manipolazione di 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 la
sottostringa y . |
x.matches(y) |
Restituisce 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 di stringa di x in un tipo int . Puoi utilizzare la stringa convertita per confrontare numeri interi con
operatori aritmetici standard come > e
<= . Questa opzione funziona solo per i valori interi. |