Common Expression Language (CEL) ist eine
Open-Source-Nicht-Turing-Programmiersprache, die eine gemeinsame Semantik für
Auswertung von Ausdrücken. Secure Web Proxy nutzt eine Teilmenge von CEL-Bedingungen,
boolesche Autorisierungsentscheidungen auf Basis von Attributdaten. Im Allgemeinen besteht ein Bedingungsausdruck aus einer oder mehreren Anweisungen, die durch logische Operatoren (&&
, ||
oder !
) verbunden sind. Jede Anweisung drückt eine attributbasierte Steuerungsregel aus, die für die Rollenbindung gilt, und bestimmt letztlich, ob der Zugriff zulässig ist.
Attribute
Sitzungs- und Anwendungsattribute werden beim Definieren von Richtlinien für sichere Webproxys verwendet, um entweder die Sitzungsattribute oder die Anwendungsattribute zu beschreiben, auf die eine Richtlinie angewendet wird.
Sitzungsattribute, beschrieben
nach SessionMatcher
, gelten für sitzungsspezifische Attribute wie die Quelle oder
Ziel-IP-Adresse, Ziel-Hosts oder IP-Bereich. Anwendungsattribute, die durch ApplicationMatcher
beschrieben werden, gelten für Anwendungsattribute wie Anfrageheader, HTTP-Anfragemethode oder Anfragepfad.
Verfügbare Attribute in SessionMatcher
und ApplicationMatcher
In der folgenden Tabelle werden Attribute beschrieben, die sowohl für SessionMatcher
als auch für
ApplicationMatcher
.
Attribut | Attributtyp | Beschreibung |
---|---|---|
source.ip |
String | Die IP-Adresse des Clients, der die Anfrage gesendet hat. |
source.port |
integer | Der Clientport, über den die Anfrage gesendet wurde. |
destination.port |
integer | Der Upstream-Port, an den die Secure Web Proxy-Instanz Traffic sendet. |
host() |
String | Der Hostwert, der für die DNS-Auflösung und Upstream-Verbindungen verwendet wird.
Dies gilt nicht für den Port.
Der Wert wird durch Folgendes bestimmt:
|
source.matchTag(SECURE_TAG) |
boolean |
Das Argument ist die permanente ID des sicheren Tags, z. B. |
source.matchServiceAccount(SERVICE_ACCOUNT) |
boolean | True , wenn die Quelle mit SERVICE_ACCOUNT verknüpft ist, z. B. source.matchServiceAccount('x@my-project.iam.gserviceaccount.com') .
|
inUrlList(HOST_OR_URL, NAMED_LIST) |
boolean |
Wenn ein |
inIpRange(IP_ADDRESS, |
boolean | True , wenn IP_ADDRESS in IP_RANGE enthalten ist, z. B. inIpRange(source.ip, '1.2.3.0/24') . Subnetzmasken für IPv6-Adressen dürfen nicht größer als /64 sein.
|
Nur für ApplicationMatcher
verfügbare Attribute
In der folgenden Tabelle werden Attribute beschrieben, die nur für ApplicationMatcher
gelten.
Attribut | Attributtyp | Beschreibung |
---|---|---|
request.headers |
Karte | Eine String-zu-String-Zuordnung der HTTP-Anfrageheader. Wenn ein Header enthält mehrere Werte, ist der Wert in dieser Zuordnung ein kommagetrennter Wert String aller Werte des Headers. Die Schlüssel in dieser Zuordnung sind alle kleingeschrieben. |
request.method |
String | Die Methode der HTTP-Anfrage, z. B. GET oder POST. |
request.host |
String | Convenience-Funktion, die Wir empfehlen in den meisten Fällen die Verwendung von |
request.path |
String | Der angeforderte HTTP-URL-Pfad. |
request.query |
String | Die HTTP-URL-Abfrage im Format Es wird keine Decodierung durchgeführt. |
request.scheme |
String | Das HTTP-URL-Schema, z. B. HTTP oder HTTPS. Werte für dieses Attribut die alle aus Kleinbuchstaben bestehen. |
request.url() |
String | Convenience für Dies enthält nicht den Port und es wird ein Hostwert verwendet die sich vom Host-Header unterscheiden können. |
request.useragent() |
String | Convenience-Funktion, die request.headers['user-agent'] entspricht. |
Operatoren
Secure Web Proxy unterstützt mehrere Operatoren, mit denen komplexe
logische Ausdrücke aus einfachen Ausdrucksanweisungen. Secure Web Proxy unterstützt
logische Operatoren wie &&
, ||,
und !
sowie Stringbearbeitung
Operatoren wie x.contains('y')
.
Mit den logischen Operatoren können Sie mehrere Variablen in einem Bedingungsausdruck prüfen. Beispiel:
request.method == 'GET' && host().matches('.*\.example.com')
schließt sich zwei an
Außerdem müssen beide Anweisungen True
sein, damit ein
Gesamtergebnis von True
.
Mit den Stringmanipulationsoperatoren können Sie Strings oder Teilstrings abgleichen, die Sie definieren, und Regeln zum Steuern des Zugriffs auf Ressourcen entwickeln, ohne jede mögliche Kombination aufzulisten.
Logische Operatoren
In der folgenden Tabelle werden die logischen Operatoren beschrieben, die vom Secure Web Proxy unterstützt werden.
Beispielausdruck | Beschreibung |
---|---|
x == "foo" |
Gibt True zurück, wenn x gleich der Konstanten ist
String-Literal-Arguments. |
x == R"fo'o" |
Gibt True zurück, wenn x gleich der angegebenen Rohdaten ist
String-Literal, das keine Escape-Sequenzen interpretiert. Raw-String
Literale sind praktisch, um Strings auszudrücken, die der Code
verwenden, um Sequenzzeichen zu maskieren. |
x == y |
Gibt True zurück, wenn x gleich ist
y |
x != y |
Gibt True zurück, wenn x nicht gleich y ist. |
x && y |
Gibt True zurück, wenn sowohl x als auch y gleich True sind. |
x || y |
Gibt True zurück, wenn x , y oder beide True sind. |
!x |
Gibt True zurück, wenn der boolesche Wert x gleich
False oder gibt False zurück, wenn der boolesche Wert
x ist True . |
m['k'] |
Wenn der Schlüssel k vorhanden ist, gibt das String-zu-String-Verzeichnis m den Wert für k zurück. Wenn-Schlüssel
k nicht vorhanden ist, gibt einen Fehler zurück, der
führt dazu, dass die Regel, die geprüft wird, nicht übereinstimmt. |
Operatoren für die Stringbearbeitung
In der folgenden Tabelle werden die von Secure Web Proxy unterstützten Stringmanipulationsoperatoren beschrieben.
Ausdruck | Beschreibung |
---|---|
x.contains(y) |
Gibt True zurück, wenn der String x den Parameter
Teilstring y . |
x.startsWith(y) |
Gibt True zurück, wenn der String x mit dem Teilstring y beginnt. |
x.endsWith(y) |
Gibt True zurück, wenn der String x mit dem Teilstring y endet. |
x.matches(y) |
Gibt Das RE2-Muster wird mithilfe der Option „RE2::Latin1“ kompiliert, die Unicode-Funktionen deaktiviert. |
x.lower() |
Gibt den Kleinbuchstabenwert des Strings x zurück. |
x.upper() |
Gibt den Großbuchstaben des Strings x zurück. |
x + y |
Gibt den verketteten String xy zurück. |
int(x) |
Wandelt das Stringergebnis von x in int um
Typ. Der konvertierte String kann für den ganzzahligen Vergleich mit
Arithmetische Standardoperatoren wie > und
<= . Dies funktioniert nur bei Werten, die Ganzzahlen sein können. |