Configura los atributos del lenguaje de reglas personalizadas

Cada regla de política de seguridad de Google Cloud Armor tiene una prioridad, una condición de coincidencia y una acción. Cloud Armor realiza la acción de la regla de mayor prioridad que coincide con una solicitud. No se evalúan las reglas con una prioridad más baja que la regla coincidente de mayor prioridad, incluso si tienen las mismas condiciones de coincidencia.

Cada regla de política de seguridad admite dos tipos de condiciones de coincidencia:

  • Una condición de coincidencia básica contiene listas de direcciones IP o listas de rangos de direcciones IP. Las condiciones de coincidencia básicas se definen con la marca --src-ip-ranges cuando se crea una regla con Google Cloud CLI.
  • Una condición de coincidencia avanzada contiene una expresión con hasta cinco subexpresiones que pueden coincidir con una variedad de atributos de una solicitud entrante. Las condiciones de coincidencia avanzadas se definen con la marca --expression cuando se crea una regla con Google Cloud CLI.

En esta página, se analizan las condiciones de coincidencia avanzadas y el lenguaje de reglas personalizadas de Cloud Armor que se usa para escribir expresiones en las condiciones de coincidencia avanzadas de las reglas de políticas de seguridad. El lenguaje de reglas personalizadas de Cloud Armor es un subconjunto del Common Expression Language (CEL). Las expresiones escritas en el lenguaje de reglas personalizadas de Cloud Armor requieren dos componentes:

  • El atributo: Los datos que se inspeccionarán
  • La operación: cómo usar los datos

Por ejemplo, en la siguiente expresión, se usan los atributos origin.ip198.51.100.0/24 en la operación inIpRange. En este caso, la expresión muestra un valor verdadero si origin.ip está dentro del rango de direcciones IP 198.51.100.0/24.

inIpRange(origin.ip, '198.51.100.0/24')

Aunque la expresión del ejemplo anterior solo coincide con la dirección IP del cliente, cuando usas la expresión de ejemplo en una regla de política de seguridad de Cloud Armor, la regla se considera una regla con condiciones de coincidencia avanzadas desde una perspectiva de cuota. Para obtener más información, consulta Cuotas y límites de Cloud Armor.

Operaciones

En la siguiente referencia, se describen los operadores que puedes usar con atributos (representados por xyk) para definir expresiones de reglas.

Operaciones Expresiones Descripción
Igualdad x == y Muestra TRUE si x es igual que y.
Igualdad, literal de cadena x == "foo" El resultado es verdadero si x es igual al literal de string constante determinado.
Igualdad, literal de cadena sin procesar x == R"fo'o" El resultado es verdadero si x es igual al literal de string sin procesar determinado que no interpreta las secuencias de escape. Los literales de string sin procesar son convenientes para expresar strings que deben usar caracteres de secuencia de escape.
NOT lógico !x El resultado es verdadero si el valor booleano x es falso. En cambio, el resultado es falso si el valor booleano x es verdadero.
Desigualdad x != y Muestra TRUE si x no es igual que y.
Concatenación x + y El resultado es la string concatenada xy.
AND lógico x && y El resultado es verdadero si tanto xcomo y son verdaderos.
OR lógico x || y El resultado es verdadero si x, y, o ambos son verdaderos.
Contiene subcadena x.contains(y) El resultado es verdadero si la string x contiene la substring y.
Comienza con la subcadena x.startsWith(y) El resultado es verdadero si la string x comienza con la substring y.
Termina con una subcadena x.endsWith(y) El resultado es verdadero si la string x termina con la substring y.
Coincidencia de expresión regular x.matches(y) El resultado es verdadero si la string x coincide parcialmente con el patrón RE2 y especificado. El patrón RE2 se compila con la opción RE2::Latin1 que inhabilita las funciones de Unicode.
Dirección IP dentro del rango inIpRange(x, y) Devuelve verdadero si la dirección IP x está incluida en el rango de IP y.
Minúscula x.lower() Muestra el valor de la string x en minúsculas.
Uppercase x.upper() Muestra el valor de la string x en mayúsculas.
Valor decodificado en Base64 x.base64Decode() Devuelve el valor decodificado en Base64 de x. El guion bajo (_) y el guion (-) se reemplazan primero por la barra diagonal (/) y el signo más (+), respectivamente. Devuelve "" (cadena vacía) si x no es un valor en Base64 válido.
Valor de mapa de teclas m['k'] Muestra el valor de la clave k en el mapa de cadena a cadena m si k está disponible; de lo contrario, muestra un error. El enfoque recomendado es verificar primero la disponibilidad con "has(m['k'])==true".
Cómo verificar la disponibilidad de una llave en un mapa has(m['k']) El resultado es verdadero si la clave k está disponible en el mapa m.
Convertir en número entero int(x) Convierte el resultado de la string de x en un tipo de int. Luego, se puede usar con el fin de hacer una comparación de números enteros mediante operadores aritméticos estándar como > y <=. Esto funciona solo para valores que deben ser enteros.
Longitud size(x) Devuelve la longitud de la cadena x.
Decodificar URL x.urlDecode() Devuelve el valor decodificado en URL de x; las secuencias de caracteres en formato %## se reemplazan por los equivalentes que no son ASCII y + se reemplaza por un espacio. Las codificaciones no válidas se devuelven tal como están.
Decodificar URL (Unicode) x.urlDecodeUni() Devuelve el valor decodificado en URL de x; además de urlDecode(), esto también controla secuencias de caracteres Unicode en formato %u###. Las codificaciones no válidas se devuelven tal como están.
Convierte de UTF8 a Unicode x.utf8ToUnicode() Devuelve la representación Unicode en minúsculas de un x codificado en UTF-8.

Atributos

Los atributos representan información de una solicitud entrante, como la dirección IP del cliente o la ruta de URL solicitada.

Campo Tipo Descripción del campo
origin.ip cadena Es la dirección IP del cliente que inició la solicitud.