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-rangesao 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
--expressionao 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
|