Configure atributos de idioma de regras personalizadas

Cada regra da 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 prioridade mais elevada que corresponde a um pedido. As regras com uma prioridade inferior à da regra de correspondência de prioridade mais elevada não são avaliadas, mesmo que tenham as mesmas condições de correspondência.

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

  • Uma condição de correspondência básica contém listas de endereços IP ou listas de intervalos de endereços IP. As condições de correspondência básicas são definidas através da flag --src-ip-ranges quando cria uma regra com a CLI Google Cloud.
  • Uma condição de correspondência avançada contém uma expressão com até cinco subexpressões que podem corresponder a uma variedade de atributos de um pedido recebido. As condições de correspondência avançadas são definidas através da flag --expression quando cria uma regra através da 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 que usa para escrever expressões nas condições de correspondência avançadas das regras da política de segurança. A linguagem das regras personalizadas do Cloud Armor é um subconjunto do Idioma de expressão comum (IEC). As expressões escritas na linguagem de regras personalizadas do Cloud Armor requerem dois componentes:

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

Por exemplo, a expressão seguinte usa os atributos origin.ip e 9.9.9.0/24 na operação inIpRange(). Neste caso, a expressão devolve verdadeiro se origin.ip estiver no intervalo de endereços IP 9.9.9.0/24.

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

Embora a expressão do exemplo anterior só corresponda ao endereço IP do cliente, quando usa a expressão do exemplo numa regra da política de segurança do Cloud Armor, a regra é considerada uma regra com condições de correspondência avançadas do ponto de vista da quota. Para mais informações, consulte as quotas e os limites do Cloud Armor.

Operações

A referência seguinte descreve os operadores que pode usar com atributos (representados por x, y e k) para definir expressões de regras.

Operações Expressões Descrição
Igualdade x == y Devolve true se x for igual a y.
Igualdade, literal de string x == "foo" Devolve true se x for igual à string literal constante fornecida.
Igualdade, literal de string não processada x == R"fo'o" Devolve true se x for igual ao literal de string não processada fornecido que não interpreta sequências de escape. Os literais de strings não processadas são úteis para expressar strings que, por si só, têm de usar carateres de sequência de escape.
NÃO lógico !x Devolve o valor true se o valor booleano x for falso ou devolve o valor false se o valor booleano x for verdadeiro.
Desigualdade x != y Devolve true se x não for igual a y.
Concatenação x + y Devolve a string concatenada xy.
E lógico x && y Devolve true se x e y forem verdadeiros.
OU lógico x || y Devolve true se x, y ou ambos forem verdadeiros.
Contém substring x.contains(y) Devolve true se a string x contiver a substring y.
Começa com a substring x.startsWith(y) Devolve true se a string x começar com a substring y.
Termina com substring x.endsWith(y) Devolve true se a string x terminar com a substring y.
Correspondência de expressão regular x.matches(y) Devolve true se a string x for parcialmente correspondida pelo padrão y especificado de RE2. O padrão RE2 é compilado através da opção RE2::Latin1 que desativa as funcionalidades Unicode.
Endereço IP dentro do intervalo inIpRange(x, y) Devolve true se o endereço IP x estiver contido no intervalo de IPs y.
Minúsculas x.lower() Devolve o valor em letras minúsculas da string x.
Maiúsculas x.upper() Devolve o valor em maiúsculas da string x.
Valor descodificado em Base64 x.base64Decode() Devolve o valor descodificado em base64 de x; os carateres _ - são primeiro substituídos por / +, respetivamente. Devolve "" (string vazia) se x não for um valor base64 válido.
Valor do mapa de teclas m['k'] Devolve o valor na chave k no mapa de string para string m se k estiver disponível; caso contrário, devolve um erro. A abordagem recomendada é verificar primeiro a disponibilidade através de "has(m['k'])==true".
Verifique a disponibilidade de chaves num mapa has(m['k']) Devolve true se a chave k estiver disponível no mapa m.
Converter em número inteiro int(x) Converte o resultado da string de x num tipo int. Em seguida, pode usar este valor para fazer uma comparação de números inteiros através de operadores aritméticos padrão, como > e <=. Isto só funciona para valores que devem ser números inteiros.
Comprimento size(x) Devolve o comprimento da string x.
Descodificar URL x.urlDecode() Devolve o valor com descodificação de URL de x; as sequências de carateres no formato %## são substituídas pelos equivalentes não ASCII e + é substituído por um espaço. As codificações inválidas são devolvidas tal como estão.
Descodificar URL (Unicode) x.urlDecodeUni() Devolve o valor descodificado do URL de x; além de urlDecode(), também processa sequências de carateres Unicode no formato %u###. As codificações inválidas são devolvidas tal como estão.
Converter UTF8 em Unicode x.utf8ToUnicode() Devolve a representação Unicode em minúsculas de um x codificado em UTF-8.

Atributos

Os atributos representam informações de um pedido recebido, como o endereço IP do cliente ou o caminho do URL pedido.

Campo Tipo Descrição do campo
origin.ip de string O endereço IP do cliente que iniciou o pedido.
origin.user_ip de string O endereço IP do cliente de origem, que está incluído no HTTP-HEADER por um proxy a montante. Antes de usar este atributo, tem de configurar 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 o artigo Vista geral dos endereços IP dos utilizadores.

Se não configurar a opção userIpRequestHeaders[], se o cabeçalho configurado contiver valores de endereço IP inválidos ou se o cabeçalho configurado não estiver presente, origin.user_ip é predefinido como origin.ip. Para mais informações, consulte a referência do recurso securityPolicy.

origin.tls_ja4_fingerprint de string Impressão digital JA4 TLS/SSL se o cliente se ligar através de HTTPS, HTTP/2 ou HTTP/3. Se não estiver disponível, é devolvida uma string vazia.
origin.tls_ja3_fingerprint de string Impressão digital JA3 TLS/SSL se o cliente se ligar através de HTTPS, HTTP/2 ou HTTP/3. Se não estiver disponível, é devolvida uma string vazia.
request.headers mapa Um mapa de string para string dos cabeçalhos de pedidos HTTP. Se um cabeçalho contiver vários valores, o valor neste mapa seria uma string separada por vírgulas de todos os valores do cabeçalho. As chaves neste mapa estão todas em minúsculas. Todos os cabeçalhos aceites pelos equilibradores de carga de aplicações externos são inspecionados e aplicam-se as mesmas limitações de cabeçalhos.

A abordagem recomendada é verificar primeiro a disponibilidade através de has(), como has(request.headers['header-key']) && request.headers['header-key'] != 'header-value'.

request.method de string O método de pedido HTTP.
request.path de string O caminho de URL HTTP pedido. Quando escreve regras que correspondem a request.path, recomendamos que normalize o caminho para facilitar a sintaxe de correspondência em caso de codificação de URL, variações de maiúsculas e minúsculas ou barras invertidas. Para mais informações e exemplos, consulte Deslocamento e normalização de caminhos.
request.scheme de string O esquema do URL HTTP, como http ou https. Os valores para este atributo estão todos em minúsculas.
request.query de string A consulta do URL HTTP no formato de name1=value&name2=value2, conforme aparece na primeira linha do pedido HTTP. Não é feita nenhuma descodificação.
origin.region_code de string O código do país Unicode associado ao IP do cliente, como US. Se estiver a criar uma regra ou uma expressão que use códigos de países ou regiões ISO 3166-1 alfa 2, o Cloud Armor trata cada código de forma independente. As regras e as expressões do Cloud Armor usam explicitamente esses códigos de região para permitir ou negar pedidos.
origin.asn número inteiro O número do sistema autónomo (ASN) associado ao endereço IP do cliente. O ASN globalmente exclusivo é determinado com base no operador de rede que suporta os prefixos de endereço IP que contêm o endereço IP do cliente.

Atributos do reCAPTCHA

Esta secção apresenta atributos que só se aplicam a tokens do reCAPTCHA ou cookies de isenção. Uma subexpressão baseada nestes atributos devolve false se o token do reCAPTCHA ou o cookie de isenção a avaliar não estiver disponível ou for inválido por um dos seguintes motivos:

  • O token está mal formado e não pode ser descodificado.
  • O token contém atributos inválidos. Por exemplo, o token foi gerado usando uma chave do reCAPTCHA que não corresponde às chaves do reCAPTCHA associadas à regra.
  • O token expirou.