Referência da linguagem de correspondência CEL

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

Atributos

Os atributos de sessão e de aplicativo são usados ao definir políticas de proxy seguro da Web para descrever os atributos de sessão ou de 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 destino, hosts ou intervalo de IP. Os atributos do aplicativo, descritos por ApplicationMatcher, são aplicados 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 a 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 por:
  • Solicitações HTTP brutas: o cabeçalho Host
  • Solicitações CONNECT HTTP de túnel de 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 é comparado com valores sem um caractere de barra (/), como em host(), apenas a parte do domínio do padrão é correspondente. Para mais informações sobre a interpretação de 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'). As máscaras de sub-rede para endereços 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 tiver vários valores, o valor neste mapa será uma string separada por vírgulas de todos os valores do cabeçalho. As chaves deste mapa ficam todas em 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 name1=value&name2=value2, conforme aparece na primeira linha da solicitação HTTP.

Nenhuma decodificação é executada.

request.scheme string O esquema de URL HTTP, como HTTP ou HTTPS. Os valores deste atributo são todos em letras minúsculas.
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 oferece suporte a vários operadores que podem ser usados para criar expressões lógicas complexas a partir de instruções de expressão simples. O proxy seguro da Web oferece suporte a operadores lógicos, como &&, ||, e !, e operadores de manipulação de strings, como x.contains('y').

Os operadores lógicos permitem verificar várias variáveis em uma expressão condicional. Por exemplo, request.method == 'GET' && host().matches('.*\.example.com') une duas instruções e exige que ambas sejam True para produzir um resultado geral de True.

Os operadores de manipulação de strings correspondem a strings ou substrings que você define e permitem que você desenvolva regras para controlar o acesso a recursos sem listar todas as combinações possíveis.

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 ao argumento literal de string constante.
x == R"fo'o" Retorna True 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 o código precisa usar para escapar de caracteres de 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 forem 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, vai retornar o valor na chave k no mapa string a string m. Se a chave k não estiver presente, um erro será retornado, o que fará 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 aceitos pelo Secure Web Proxy.

Expressão Descrição
x.contains(y) Retorna True se a string x contiver a 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 a substring y.
x.matches(y)

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

O padrão RE2 é compilado usando a opção RE2::Latin1 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 tipo int. 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.