A Common Expression Language (CEL) é uma
linguagem completa, de código aberto, que não é de Turing e implementa semântica comum para
a 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 papel e determina se o acesso é permitido.
Atributos
Os atributos de sessão e de aplicativo são usados ao definir políticas do 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
, se aplicam a atributos específicos da sessão, como endereço IP de origem ou
destino, hosts ou intervalo de IP. Os atributos de aplicativo, descritos por
ApplicationMatcher
, se aplicam a atributos de aplicativo, como cabeçalhos,
método de solicitação HTTP ou caminho da 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 Secure Web Proxy 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 pelos seguintes fatores:
|
source.matchTag(SECURE_TAG) |
boolean |
O argumento é o ID permanente da tag segura, como |
source.matchServiceAccount(SERVICE_ACCOUNT) |
boolean | True se a origem estiver associada a
SERVICE_ACCOUNT , como
source.matchServiceAccount('x@my-project.iam.gserviceaccount.com') .
|
inUrlList(HOST_OR_URL, NAMED_LIST) |
boolean |
Quando um padrão |
inIpRange(IP_ADDRESS, |
boolean | 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 com todos eles. As chaves desse 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 Recomendamos o uso de |
request.path |
string | O caminho do URL de HTTP solicitado. |
request.query |
string | A consulta de URL HTTP no formato Nenhuma decodificação é executada. |
request.scheme |
string | O esquema de URL HTTP, como HTTP ou HTTPS. Os valores desse atributo são todos minúsculos. |
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 é compatível com 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 é compatível com operadores lógicos, como &&
, ||,
e !
, e operadores de manipulação de string, 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 string combinam strings ou substrings definidas e permitem desenvolver 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" |
Retornará True se x for igual ao literal de string bruta fornecido que não interpreta sequências de escape. Literais de string bruta são convenientes para expressar strings que o código precisa usar para fazer o escape 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, retorna o valor na chave k no mapa de string a string m . Se a chave k não estiver presente, será retornado um erro que fará com que a regra em avaliação não seja correspondente. |
Operadores de manipulação de string
A tabela a seguir descreve os operadores de manipulação de string compatíveis com o 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) |
Retornará 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 inteiros. |