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
Use atributos de sessão e de aplicativo ao definir políticas do Secure Web Proxy 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, hosts e intervalo de IP. Os atributos
do aplicativo, descritos por ApplicationMatcher, se aplicam a atributos do aplicativo, como cabeçalhos, método e caminho.
Atributos disponíveis para 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 | Endereço IP do cliente que enviou a solicitação. | 
| source.port | integer | Porta do cliente que enviou a solicitação. | 
| destination.port | integer | Porta upstream para a qual a instância do Secure Web Proxy envia o tráfego. | 
| host() | string | Valor do host usado para resolução de DNS e conexões upstream.
        Isso não inclui a porta.
        O valor de **host()** é determinado por: 
 | 
| source.matchTag(SECURE_TAG) | booleano | 
 O argumento é o ID permanente da tag segura, como
           | 
| source.matchServiceAccount(SERVICE_ACCOUNT) | booleano | True, se a origem estiver associada aSERVICE_ACCOUNT, comosource.matchServiceAccount('x@my-project.iam.gserviceaccount.com'). | 
| inUrlList(HOST_OR_URL, NAMED_LIST) | booleano | 
 
 Quando um padrão  | 
| inIpRange(IP_ADDRESS, | booleano | True, seIP_ADDRESSestiver contido
        noIP_RANGE, comoinIpRange(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 | Mapa de string a string dos cabeçalhos de solicitação. Se um cabeçalho tiver vários valores, o valor neste mapa será uma string separada por vírgulas com todos os valores do cabeçalho. Todas as chaves neste mapa estão em minúsculas. | 
| request.method | string | Método de solicitação, como GET ou POST. | 
| request.host | string | Conveniência equivalente a  Recomendamos que você use  | 
| request.path | string | Caminho do URL solicitado. | 
| request.query | string | Consulta de URL no formato
         Nenhuma decodificação é executada. | 
| request.scheme | string | Esquema de URL, como HTTP ou HTTPS. Todos os valores desse atributo são em letras minúsculas. | 
| request.url() | string | Conveniência para  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 Secure Web Proxy 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 Truesexfor igual ao argumento
        literal de string constante. | 
| x == R"fo'o" | Retorna Truesexfor 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 Truesexfor igual ay. | 
|  x != y  | Retorna Truesexnão for igual ay. | 
|  x && y  | Retorna TruesexeyforemTrue. | 
|  x || y  | Retorna Truesex,you ambos
        foremTrue. | 
|  !x  | Retorna Truese o valor booleanoxforFalse. Caso contrário, ela retornaráFalsese o
        valor booleanoxforTrue. | 
|  m['k']  | Se a chave kestiver presente, vai retornar o valor na chavekno mapa string a stringm. Se a chaveknão estiver presente, ele vai retornar 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 aceitos pelo Secure Web Proxy.
| Expressão | Descrição | 
|---|---|
|  x.contains(y)  | Retorna Truese a stringxcontiver a
        substringy. | 
|  x.startsWith(y)  | Retorna Truese a stringxcomeçar com a
        substringy. | 
|  x.endsWith(y)  | Retorna Truese a stringxterminar com a
        substringy. | 
|  x.matches(y)  | Retorna  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 xem um tipoint. É possível usar a string convertida para comparar números inteiros com
        operadores aritméticos padrão, como>e<=. Isso funciona apenas para valores inteiros. |