Référence du langage du moteur de correspondance CEL

Le Common Expression Language (CEL) est un langage Open Source non Turing-complet qui implémente une sémantique commune pour l'évaluation des expressions. Le proxy Web sécurisé utilise un sous-ensemble de conditions CEL pour prendre des décisions d'autorisation booléennes basées sur des données d'attribut. En général, une expression de condition contient une ou plusieurs instructions qui sont combinées par des opérateurs logiques (&&, || ou !). Chaque instruction exprime une règle de contrôle basée sur des attributs qui s'applique à la liaison de rôle et détermine fondamentalement si l'accès est autorisé ou non.

Attributs

Utilisez des attributs de session et des attributs d'application lorsque vous définissez des règles de proxy Web sécurisé pour décrire les attributs de session ou les attributs d'application auxquels une règle s'applique.

Les attributs de session, décrits par SessionMatcher, s'appliquent aux attributs spécifiques à la session, tels que l'adresse IP source ou de destination, les hôtes ou la plage d'adresses IP. Les attributs d'application, décrits par ApplicationMatcher, s'appliquent aux attributs d'application, tels que les en-têtes de requête, la méthode de requête ou le chemin de requête.

Attributs disponibles pour SessionMatcher et ApplicationMatcher

Le tableau suivant décrit les attributs qui s'appliquent à la fois à SessionMatcher et à ApplicationMatcher.

Attribut Type d'attribut Description
source.ip chaîne Adresse IP du client qui a envoyé la requête.
source.port entier Port client ayant envoyé la requête.
destination.port entier Port en amont auquel votre instance de proxy Web sécurisé envoie le trafic.
host() chaîne Valeur hôte utilisée pour la résolution DNS et les connexions en amont. Le port n'est pas inclus. La valeur de **host()** est déterminée comme suit :
  • Requêtes HTTP brutes: en-tête d'hôte
  • Requêtes HTTP CONNECT du tunnel proxy: cible CONNECT
source.matchTag(SECURE_TAG) booléen

True si la source est associée à SECURE_TAG.

L'argument est l'ID permanent du tag sécurisé, tel que source.matchTag('tagValues/123456').

source.matchServiceAccount(SERVICE_ACCOUNT) booléen True si la source est associée à SERVICE_ACCOUNT, par exemple source.matchServiceAccount('x@my-project.iam.gserviceaccount.com').
inUrlList(HOST_OR_URL, NAMED_LIST) booléen

True si HOST_OR_URL est présent dans la liste nommée NAMED_LIST fournie. Exemple :

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

Lorsqu'un format UrlList est mis en correspondance avec des valeurs sans barre oblique (/), comme dans host(), seule la partie domaine du format est mise en correspondance. Pour en savoir plus sur l'interprétation de UrlList, consultez la section Comment UrlList interprète les entrées.

inIpRange(IP_ADDRESS,
IP_RANGE)
booléen True si IP_ADDRESS est contenu dans IP_RANGE, par exemple inIpRange(source.ip, '1.2.3.0/24'). Les masques de sous-réseau des adresses IPv6 ne peuvent pas excéder /64.

Attributs disponibles uniquement pour ApplicationMatcher

Le tableau suivant décrit les attributs qui ne s'appliquent qu'à ApplicationMatcher.

Attribut Type d'attribut Description
request.headers carte Mappage chaîne à chaîne des en-têtes de requête. Si un en-tête contient plusieurs valeurs, la valeur de ce mappage est une chaîne comportant toutes les valeurs de l'en-tête séparées par une virgule. Toutes les clés de ce mappage sont en minuscules.
request.method chaîne Méthode de requête, telle que GET ou POST.
request.host chaîne

Équivaut à request.headers['host'].

Dans la plupart des cas, nous vous recommandons d'utiliser host().

request.path chaîne Chemin d'URL demandé.
request.query chaîne

Requête d'URL au format name1=value&name2=value2, telle qu'elle apparaît sur la première ligne de la requête.

Aucun décodage n'est effectué

request.scheme chaîne Schéma d'URL, tel que HTTP ou HTTPS. Toutes les valeurs de cet attribut sont en minuscules.
request.url() chaîne

Facilité d'utilisation pour host() + request.path.

Le port n'est pas inclus et une valeur d'hôte peut différer de l'en-tête d'hôte.

request.useragent() chaîne Équivaut à request.headers['user-agent'].

Opérateurs

Le proxy Web sécurisé prend en charge plusieurs opérateurs qui peuvent être utilisés pour créer des expressions logiques complexes à partir d'instructions d'expression simples. Le proxy Web sécurisé est compatible avec les opérateurs logiques, tels que &&, ||, et !, et les opérateurs de manipulation de chaînes, tels que x.contains('y').

Les opérateurs logiques vous permettent de vérifier plusieurs variables dans une expression conditionnelle. Par exemple, request.method == 'GET' && host().matches('.*\.example.com') combine deux instructions et requiert que les deux instructions soient True pour produire un résultat global True.

Les opérateurs de manipulation de chaîne correspondent aux chaînes ou sous-chaînes que vous définissez, et vous permettent de développer des règles pour contrôler l'accès aux ressources sans lister toutes les combinaisons possibles.

Opérateurs logiques

Le tableau suivant décrit les opérateurs logiques compatibles avec Secure Web Proxy.

Exemple d'expression Description
x == "foo" Renvoie True si x est égal à l'argument littéral de chaîne constante.
x == R"fo'o" Renvoie True si x est égal au littéral de chaîne brute donné qui n'interprète pas les séquences d'échappement. Les littéraux de chaîne brute sont pratiques pour exprimer des chaînes que le code doit utiliser pour échapper aux caractères de séquence.
x == y Renvoie True si la valeur de x est égale à y.
x != y Renvoie True si la valeur de x n'est pas égale à y.
x && y Renvoie True si x et y sont tous les deux True.
x || y Renvoie True si x, y ou les deux sont True.
!x Renvoie True si la valeur booléenne x est False, ou False si la valeur booléenne x est True.
m['k'] Si la clé k est présente, renvoie la valeur à la clé k dans le mappage chaîne à chaîne m. Si la clé k n'est pas présente, une erreur est renvoyée, ce qui entraîne une non-correspondance de la règle en cours d'évaluation.

Opérateurs de manipulation de chaîne

Le tableau suivant décrit les opérateurs de manipulation de chaîne compatibles avec Secure Web Proxy.

Expression Description
x.contains(y) Renvoie True si la chaîne x contient la sous-chaîne y.
x.startsWith(y) Renvoie True si la chaîne x commence par la sous-chaîne y.
x.endsWith(y) Renvoie True si la chaîne x se termine par la sous-chaîne y.
x.matches(y)

Renvoie True si la chaîne x correspond au modèle RE2 y spécifié.

Le format RE2 est compilé à l'aide de l'option RE2::Latin1 qui désactive les fonctionnalités Unicode.

x.lower() Renvoie la valeur en minuscules de la chaîne x.
x.upper() Renvoie la valeur en majuscules de la chaîne x.
x + y Renvoie la chaîne concaténée xy.
int(x) Convertit le résultat de chaîne de x en type int. La chaîne convertie peut être utilisée pour la comparaison d'entiers avec des opérateurs arithmétiques standards tels que > et <=. Cela ne fonctionne que pour les valeurs pouvant être des entiers.