Le Common Expression Language (CEL) est un langage Open Source non complet de Turing 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 se compose d'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
Les attributs de session et les attributs d'application sont utilisés lors de la définition des règles du proxy Web sécurisé pour décrire les attributs de session ou les attributs d'application auxquels une règle s'applique.
Attributs de session, décrits
par SessionMatcher
, s'appliquent aux attributs spécifiques à la session, tels que la source
l'adresse IP 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 HTTP ou le chemin de requête.
Attributs disponibles dans 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 qui a envoyé la requête. |
destination.port |
entier | Port en amont vers lequel l'instance du proxy Web sécurisé envoie du trafic. |
host() |
chaîne | Valeur "host" utilisée pour la résolution DNS et les connexions en amont.
Le port n'est pas inclus.
La valeur est déterminée comme suit :
|
source.matchTag(SECURE_TAG) |
booléen |
L'argument est l'ID permanent du tag sécurisé, tel que |
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 |
Lorsqu'un modèle |
inIpRange(IP_ADDRESS, |
booléen | True si IP_ADDRESS est contenu
dans les IP_RANGE , par exemple
inIpRange(source.ip, '1.2.3.0/24') Masques de sous-réseau pour IPv6
les adresses ne peuvent pas être supérieures à /64.
|
Attributs disponibles uniquement pour ApplicationMatcher
Le tableau suivant décrit les attributs qui ne s'appliquent qu'aux
ApplicationMatcher
Attribut | Type d'attribut | Description |
---|---|---|
request.headers |
carte | Mappage chaîne à chaîne des en-têtes de requête HTTP. Si un en-tête contient plusieurs valeurs, les valeurs de ce mappage doivent être séparées par une virgule chaîne de toutes les valeurs de l'en-tête. Les clés de ce mappage sont toutes en minuscules. |
request.method |
chaîne | Méthode de requête HTTP, telle que GET ou POST. |
request.host |
chaîne | Équivaut à Dans la plupart des cas, nous vous recommandons d'utiliser |
request.path |
chaîne | Chemin d'URL HTTP demandé. |
request.query |
chaîne | La requête d'URL HTTP au format
Aucun décodage n'est effectué |
request.scheme |
chaîne | Schéma d'URL HTTP, tel que HTTP ou HTTPS Les valeurs de cet attribut sont toutes en minuscules. |
request.url() |
chaîne | Facilité d'utilisation pour 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 | Pratique équivalente à 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 une combinaison possible.
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. Chaîne brute
les littéraux sont pratiques pour exprimer les chaînes que le code doit
pour échapper les 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 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, la valeur au niveau de la clé est affichée.
k dans le mappage chaîne à chaîne m . Si la clé
k n'est pas présent, renvoie une erreur 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 le
sous-chaîne y . |
x.matches(y) |
Renvoie 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. |