Configurar atributos de linguagem de regras personalizadas

Cada regra de política de segurança do Google Cloud Armor tem uma prioridade, uma condição de correspondência e uma ação. O Cloud Armor executa a ação da regra de maior prioridade que corresponde a uma solicitação. As regras com prioridade menor do que a regra de correspondência de maior prioridade não são avaliadas, mesmo que tenham as mesmas condições de correspondência.

Cada regra de política de segurança aceita dois tipos de condições de correspondência:

  • Uma condição de correspondência básica contém listas de endereços IP ou de intervalos de endereços IP. As condições básicas de correspondência são definidas usando a flag --src-ip-ranges ao criar uma regra com a CLI do Google Cloud.
  • Uma condição de correspondência avançada contém uma expressão com até cinco subexpressões que podem corresponder a diversos atributos de uma solicitação recebida. As condições de correspondência avançada são definidas usando a flag --expression ao criar uma regra com a CLI do Google Cloud.

Esta página aborda as condições de correspondência avançadas e a linguagem de regras personalizadas do Cloud Armor, usada para escrever expressões nas condições de correspondência avançadas das regras de políticas de segurança. A linguagem de regras personalizadas do Cloud Armor é um subconjunto da Common Expression Language (CEL). As expressões escritas na linguagem de regras personalizadas do Cloud Armor precisam de dois componentes:

  • O atributo: os dados a serem inspecionados
  • A operação: como usar os dados

Por exemplo, a expressão a seguir usa os atributos origin.ip e 198.51.100.0/24 na operação inIpRange. Nesse caso, a expressão retornará como verdadeira se origin.ip estiver dentro do intervalo de endereços IP de 198.51.100.0/24.

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

Mesmo que a expressão do exemplo anterior corresponda apenas ao endereço IP do cliente, ao usá-la em uma regra de política de segurança do Cloud Armor, essa regra seria considerada em uma condição de correspondência avançada pela perspectiva de cotas. Para mais informações, consulte Cotas e limites do Cloud Armor.

Operações

A referência a seguir descreve os operadores que podem ser usados com atributos (representados por x, y e k) para definir expressões de regra.

Operações Expressões Descrição
Igualdade x == y Vai retornar verdadeiro se x for igual a y.
Igualdade, literal de string x == "foo" Vai retornar verdadeiro se x for igual à literal de string constante fornecida.
Igualdade, literal de string bruta x == R"fo'o" Vai retornar verdadeiro se x for igual à literal de string bruta fornecida que não interpreta sequências de escape. As literais de string bruta são convenientes para expressar strings que precisam usar caracteres de sequência de escape.
NOT lógico !x Vai retornar verdadeiro se o valor booleano x for falso, ou falso se o valor booleano x for verdadeiro.
Desigualdade x != y Vai retornar verdadeiro se x não for igual a y.
Concatenação x + y Vai retornar a string concatenada xy.
AND lógico x && y Vai retornar verdadeiro se x e y forem verdadeiros.
OR lógico x || y Vai retornar verdadeiro se x, y ou os dois forem verdadeiros.
Contém a substring x.contains(y) Vai retornar verdadeiro se a string x contiver a substring y.
Começa com a substring x.startsWith(y) Vai retornar verdadeiro se a string x começar com a substring y.
Termina com a substring x.endsWith(y) Retorna verdadeiro se a string x terminar com a substring y.
Correspondência de expressão regular x.matches(y) Vai retornar verdadeiro se a string x corresponder parcialmente ao padrão RE2 especificado y. O padrão RE2 é compilado usando a opção RE2::Latin1 que desativa os recursos Unicode.
Endereço IP dentro do intervalo inIpRange(x, y) Vai retornar verdadeiro se o endereço IP x estiver dentro do intervalo IP y.
Letras minúsculas x.lower() Retorna o valor em minúsculas da string x.
Letras maiúsculas x.upper() Retorna o valor em maiúsculas da string x.
Valor decodificado em Base64 x.base64Decode() Retorna o valor de x decodificado em Base64. O sublinhado (_) e o hífen (-) são substituídos primeiro por barra (/) e sinal de adição (+) respectivamente. Retorna "" (string vazia) se x não for um valor base64 válido.
Valor do mapa de atalhos m['k'] Vai retornar o valor na chave k no mapa string a string m se k estiver disponível, caso contrário, vai retornar um erro. A abordagem recomendada é verificar a disponibilidade usando "has(m['k'])==true".
Verificar a disponibilidade de chaves em um mapa has(m['k']) Vai retornar como verdadeiro se a chave k estiver disponível no mapa m.
Converter para número inteiro int(x) Converte o resultado da string de x em um tipo int. Ele pode ser usado para fazer uma comparação de números inteiros usando operadores aritméticos padrão, como > e <=. Isso funciona apenas para valores que precisam ser inteiros.
Comprimento size(x) Retorna o comprimento da string x.
Decodificar URL x.urlDecode() Retorna o valor decodificado de URL de x. As sequências de caracteres no formato %## são substituídas por equivalentes não ASCII, e + é substituído por um espaço. As codificações inválidas retornam no estado em que se encontram.
Decodificar URL (Unicode) x.urlDecodeUni() Retorna o valor decodificado de URL de x. Além de urlDecode() e também processa sequências de caracteres Unicode no formato %u###. As codificações inválidas retornam no estado em que se encontram.
Converter utf8 em Unicode x.utf8ToUnicode() Retorna a representação Unicode de letras minúsculas de um x codificado em UTF-8.

Atributos

Os atributos representam informações de uma solicitação recebida, como o endereço IP do cliente ou o caminho do URL solicitado.

Campo Tipo Descrição do campo
origin.ip string O endereço IP do cliente que iniciou a solicitação.
origin.user_ip string O endereço IP do cliente de origem, incluído em HTTP-HEADER por um proxy upstream. Antes de usar esse atributo, configure a opção userIpRequestHeaders[] no campo advancedOptionsConfig da política de segurança para corresponder a uma origem como True-Client-IP, X-Forwarded-For ou X-Real-IP. Para mais informações, consulte