Ogni regola delle policy di sicurezza di Google Cloud Armor ha una priorità, una condizione di corrispondenza e un'azione. Cloud Armor esegue l'azione della regola con la priorità più alta che corrisponde a una richiesta. Le regole con una priorità inferiore a quella della regola di corrispondenza con la priorità più alta non vengono valutate, anche se hanno le stesse condizioni di corrispondenza.
Ogni regola delle policy di sicurezza supporta due tipi di condizioni di corrispondenza:
- Una condizione di corrispondenza di base contiene elenchi di indirizzi IP o elenchi di intervalli di indirizzi IP. Le condizioni di corrispondenza di base vengono definite utilizzando il
flag
--src-ip-rangesdurante la creazione di una regola utilizzando Google Cloud CLI. - Una condizione di corrispondenza avanzata contiene un'espressione con un massimo di cinque
sottoespressioni che possono corrispondere a una serie di attributi di una richiesta in entrata.
Le condizioni di corrispondenza avanzate vengono definite utilizzando il flag
--expressionquando si crea una regola utilizzando Google Cloud CLI.
Questa pagina descrive le condizioni di corrispondenza avanzate e il linguaggio delle regole personalizzate di Cloud Armor che utilizzi per scrivere espressioni nelle condizioni di corrispondenza avanzate delle regole delle policy di sicurezza. Il linguaggio delle regole personalizzate di Cloud Armor è un sottoinsieme del Common Expression Language (CEL). Le espressioni scritte nel linguaggio delle regole personalizzate di Cloud Armor richiedono due componenti:
- L'attributo: i dati da esaminare
- L'operazione: come utilizzare i dati
Ad esempio, la seguente espressione utilizza gli attributi origin.ip e
9.9.9.0/24 nell'operazione inIpRange(). In questo caso, l'espressione
restituisce true se origin.ip è compreso nell'intervallo di indirizzi IP 9.9.9.0/24.
inIpRange(origin.ip, '9.9.9.0/24')
Anche se l'espressione dell'esempio precedente corrisponde solo all'indirizzo IP client, quando utilizzi l'espressione di esempio in una regola delle policy di sicurezza di Cloud Armor, la regola è considerata una regola con condizioni di corrispondenza avanzate dal punto di vista della quota. Per maggiori informazioni, consulta Quote e limiti di Cloud Armor.
Operazioni
Il seguente riferimento descrive gli operatori che puoi utilizzare con gli attributi
(rappresentati da x, y e k) per definire le espressioni delle regole.
| Operazioni | Espressioni | Descrizione |
|---|---|---|
| Uguaglianza | x == y |
Restituisce true se x è uguale a y. |
| Uguaglianza, valore letterale stringa | x == "foo" |
Restituisce true se x è uguale al valore letterale stringa costante specificato. |
| Uguaglianza, valore letterale di stringa non elaborata | x == R"fo'o" |
Restituisce true se x è uguale al valore letterale della stringa non elaborata specificata che non interpreta le sequenze di escape. I valori letterali stringa non elaborata sono utili per esprimere stringhe che devono utilizzare caratteri di sequenza di escape. |
| NOT logico | !x |
Restituisce true se il valore booleano x è false oppure restituisce false se il valore booleano x è true. |
| Disuguaglianza | x != y |
Restituisce true se x è diverso da y. |
| Concatenazione | x + y |
Restituisce la stringa concatenata xy. |
| AND logico | x && y |
Restituisce true se x e y sono entrambi true. |
| OR logico | x || y |
Restituisce true se x, y o entrambi sono true. |
| Contiene la sottostringa | x.contains(y) |
Restituisce true se la stringa x contiene la sottostringa y. |
| Inizia con la sottostringa | x.startsWith(y) |
Restituisce true se la stringa x inizia con la sottostringa y. |
| Termina con la sottostringa | x.endsWith(y) |
Restituisce true se la stringa x termina con la sottostringa y. |
| Corrispondenza mediante espressione regolare | x.matches(y) |
Restituisce true se la stringa x corrisponde parzialmente al pattern y RE2 specificato. Il pattern RE2 viene compilato utilizzando l'opzione RE2::Latin1 che disabilita le funzionalità Unicode. |
| Indirizzo IP compreso nell'intervallo | inIpRange(x, y) |
Restituisce true se l'indirizzo IP x è contenuto nell'intervallo IP y. |
| Minuscolo | x.lower() |
Restituisce il valore in minuscolo della stringa x. |
| Maiuscolo | x.upper() |
Restituisce il valore in maiuscolo della stringa x. |
| Valore decodificato Base64 | x.base64Decode() |
Restituisce il valore con codifica Base64 di x; i caratteri
_ - vengono prima sostituiti rispettivamente con / +.
Restituisce "" (stringa vuota) se x non è un valore base64 valido. |
| Valore della mappa delle chiavi | m['k'] |
Restituisce il valore della chiave k nella mappa stringa-stringa m se
k è disponibile; altrimenti, restituisce un errore. L'approccio consigliato è
verificare prima la disponibilità utilizzando "has(m['k'])==true". |
| Controlla la disponibilità delle chiavi in una mappa | has(m['k']) |
Restituisce true se la chiave k è disponibile nella mappa m. |
| Converti in numero intero | int(x) |
Converte il risultato della stringa di x in un tipo int. Può
quindi essere utilizzato per eseguire un confronto tra numeri interi utilizzando operatori
aritmetici standard come > e <=. Questa operazione funziona solo per i valori che
devono essere numeri interi. |