Referência do idioma de correspondência de CEL

O Common Expression Language (CEL) é uma linguagem de código aberto não completa que implementa semântica comum para avaliação da expressão. O Secure Web Proxy usa um subconjunto de condições de CEL para fazer decisões booleanas com base nos dados do atributo. Em geral, uma condição A expressão consiste em uma ou mais instruções unidas por elementos (&&, || ou !). Cada instrução expressa uma função de controle de acesso que se aplica à vinculação de papéis e, por fim, determina se é permitido.

Atributos

Os atributos de sessão e de aplicativo são usados na definição As políticas do Secure Web Proxy para descrever os atributos ou os atributos do aplicativo a que uma política se aplica.

Os atributos de sessão, descritos por SessionMatcher, são aplicados a atributos específicos da sessão, como o endereço IP de origem ou de destino, hosts ou intervalo de IP. Atributos do aplicativo, descritos por ApplicationMatcher, se aplicam a atributos do aplicativo, como cabeçalhos de solicitação. método de solicitação HTTP ou caminho de solicitação.

Atributos disponíveis em SessionMatcher e ApplicationMatcher

A tabela a seguir descreve os atributos que se aplicam às APIs SessionMatcher e ApplicationMatcher.

Atributo Tipo de atributo Descrição
source.ip string O endereço IP do cliente que enviou a solicitação.
source.port integer A porta do cliente que enviou a solicitação.
destination.port integer A porta upstream para a qual a instância do Proxy seguro da Web está enviando tráfego.
host() string O valor do host usado para resolução de DNS e conexões upstream. Isso não inclui a porta. O valor é determinado pelo seguinte:
  • Solicitações HTTP brutas: o cabeçalho Host
  • Solicitações HTTP CONNECT do túnel proxy: o destino CONNECT
source.matchTag(SECURE_TAG) booleano

True se a origem estiver associada a SECURE_TAG.

O argumento é o ID permanente da tag segura, como source.matchTag('tagValues/123456'):

source.matchServiceAccount(SERVICE_ACCOUNT) booleano True se a origem estiver associada a SERVICE_ACCOUNT, como source.matchServiceAccount('x@my-project.iam.gserviceaccount.com')
inUrlList(HOST_OR_URL, NAMED_LIST) booleano

True se HOST_OR_URL estiver presente na lista nomeada NAMED_LIST fornecida. Exemplo:

  • inUrlList(host(), 'projects/1234/locations/us-east1/urlLists/allowed-repos')
  • inUrlList(request.url(), 'projects/1234/locations/us-east1/urlLists/allowed-repos')

Quando um padrão UrlList corresponde a valores sem um barra (/), como em host(), apenas o domínio do padrão é correspondida. Para mais informações sobre a interpretação UrlList, consulte Como UrlList interpreta entradas.

inIpRange(IP_ADDRESS,
IP_RANGE)
booleano True se IP_ADDRESS estiver contido no IP_RANGE, como inIpRange(source.ip, '1.2.3.0/24'). Máscaras de sub-rede para IPv6 não podem ser maiores que /64.

Atributos disponíveis apenas para ApplicationMatcher

A tabela a seguir descreve os atributos que se aplicam apenas a ApplicationMatcher:

Atributo Tipo de atributo Descrição
request.headers mapa Um mapa com cada string dos cabeçalhos de solicitação HTTP. Se um cabeçalho contiver vários valores, o valor neste mapa é separado por vírgulas string de todos os valores do cabeçalho. As chaves neste mapa são letras minúsculas.
request.method string O método de solicitação HTTP, como GET ou POST.
request.host string

Conveniência equivalente a request.headers['host'].

Recomendamos o uso de host() na maioria dos casos.

request.path string O caminho do URL de HTTP solicitado.
request.query string

A consulta de URL HTTP no formato de name1=value&name2=value2, como aparece na primeira linha da solicitação HTTP.

Nenhuma decodificação é executada.

request.scheme string O esquema de URL HTTP, como HTTP ou HTTPS. Valores para este atributo são todos minúsculos.
request.url() string

Conveniência para host() + request.path.

Isso não inclui a porta e usa um valor de host. que pode ser diferente do cabeçalho do host.

request.useragent() string Conveniência equivalente a request.headers['user-agent'].

Operadores

O Secure Web Proxy dá suporte a vários operadores que podem ser usados para criar expressões lógicas de instruções de expressões simples. O Secure Web Proxy dá suporte operadores lógicos, como &&, ||, e !, e manipulação de string operadores, como x.contains('y').

Os operadores lógicos permitem verificar diversas variáveis em uma condição expressão. Por exemplo: request.method == 'GET' && host().matches('.*\.example.com') une dois e exige que ambas sejam True para produzir uma resultado geral de True.

Os operadores de manipulação de string fazem a correspondência de strings ou substrings definidas por você. e permitem que você desenvolva regras para controlar o acesso aos recursos sem listar cada uma possível combinação.

Operadores lógicos

A tabela a seguir descreve os operadores lógicos compatíveis com o Secure Web Proxy.

Expressão de exemplo Descrição
x == "foo" Retorna True se x for igual à constante argumento literal de string.
x == R"fo'o" Retorna True se x for igual ao valor bruto informado literal de string que não interpreta sequências de escape. String bruta Os literais são convenientes para expressar strings que o código deve use para escapar caracteres da sequência.
x == y Retorna True se x for igual a y
x != y Retorna True se x não for igual a y
x && y Retorna True se x e y forem True.
x || y Retorna True se x, y ou ambos. são True.
!x Retorna True se o valor booleano x for False ou False se o valor booleano x for True.
m['k'] Se a chave k estiver presente, retorna o valor na chave k no mapa com cada string m. Chave "if" k não está presente, retorna um erro que faz com que a regra em avaliação não corresponda.

Operadores de manipulação de string

A tabela a seguir descreve os operadores de manipulação de string que com suporte ao Secure Web Proxy.

Expressão Descrição
x.contains(y) Retorna True se a string x contém o substring y.
x.startsWith(y) Retorna True se a string x começar com a substring y.
x.endsWith(y) Retorna True se a string x terminar com o substring y.
x.matches(y)

Retorna True se a string x corresponder ao especificado Padrão RE2 y.

O padrão RE2 é compilado usando a opção RE2::LATAM1, que desativa os recursos Unicode.

x.lower() Retorna o valor em minúsculas da string x.
x.upper() Retorna o valor em maiúsculas da string x.
x + y Retorna a string concatenada xy.
int(x) Converte o resultado da string de x em um int não é válido. A string convertida pode ser usada para comparação de números inteiros com operadores aritméticos padrão, como > e <=. Isso funciona apenas para valores que podem ser números inteiros.