Le Common Expression Language (CEL) est un langage complet Open Source non-Turing, qui implémente la 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 en fonction des données d'attribut. En général, une expression de condition consiste en une ou plusieurs instructions jointes 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 au final si l'accès est autorisé.
Attributs
Les attributs de session et les attributs d'application sont utilisés lors de la définition de stratégies de proxy Web sécurisé pour décrire les attributs de session ou les attributs de l'application auxquels une stratégie 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 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 auquel l'instance du proxy Web sécurisé envoie le 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 par les éléments suivants :
|
source.matchTag(SECURE_TAG) |
boolean |
L'argument est l'ID permanent du tag sécurisé, par exemple |
source.matchServiceAccount(SERVICE_ACCOUNT) |
boolean | 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) |
boolean |
Lorsqu'un modèle |
inIpRange(IP_ADDRESS, |
boolean | True si IP_ADDRESS est contenu dans l'IP_RANGE (par exemple, inIpRange(source.ip, '1.2.3.0/24') ). Les masques de sous-réseau des adresses IPv6 ne peuvent pas être supérieurs à /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 HTTP. Si un en-tête contient plusieurs valeurs, la valeur de ce mappage est une chaîne de toutes les valeurs de l'en-tête séparées par une virgule. 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 | Pratique équivalente à Nous vous recommandons d'utiliser |
request.path |
chaîne | Chemin d'URL HTTP demandé. |
request.query |
chaîne | 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 | Pratique pour Le port n'est pas inclus et utilise une valeur d'hôte susceptible de 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é accepte plusieurs opérateurs permettant de 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')
joint deux instructions et exige que les deux instructions soient True
pour produire un résultat global de True
.
Les opérateurs de manipulation de chaînes font correspondre les chaînes ou les 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 le proxy Web sécurisé.
Exemple d'expression | Description |
---|---|
x == "foo" |
Renvoie True si x est égal à l'argument de 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 les chaînes que le code doit utiliser pour échapper des caractères de séquence. |
x == y |
Renvoie True si x est égal à y . |
x != y |
Renvoie True si x n'est pas égal à y . |
x && y |
Renvoie True si x et y sont tous deux True . |
x || y |
Renvoie True si la valeur de x , de y ou des deux est True . |
!x |
Renvoie True si la valeur booléenne x est False , ou renvoie False si la valeur booléenne x est True . |
m['k'] |
Si la clé k est présente, renvoie la valeur au niveau de la clé k dans le mappage chaîne à chaîne m . Si la clé k n'est pas présente, renvoie une erreur empêchant la correspondance de la règle en cours d'évaluation. |
Opérateurs de manipulation de chaînes
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 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 un type int . La chaîne convertie peut être utilisée pour la comparaison des entiers avec des opérateurs arithmétiques standards tels que > et <= . Cela ne fonctionne que pour les valeurs pouvant être des entiers. |