Sprachreferenz für CEL-Matcher

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:
  • HTTP-Rohanfragen: der Host-Header
  • Proxy-Tunnel-HTTP-CONNECT-Anfragen: CONNECT-Ziel
source.matchTag(SECURE_TAG) boolean

True, wenn die Quelle verknüpft ist mit SECURE_TAG.

Das Argument ist die permanente ID des sicheren Tags, z. B. source.matchTag('tagValues/123456').

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

True, wenn HOST_OR_URL in der angegebenen benannten Liste NAMED_LIST vorhanden ist. Beispiel:

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

Wenn ein UrlList-Muster mit Werten ohne Schrägstrich (/) abgeglichen wird, z. B. in host(), wird nur der Domainteil des Musters abgeglichen. Weitere Informationen zur UrlList-Auswertung finden Sie unter So werden Einträge von UrlList ausgewertet.

inIpRange(IP_ADDRESS,
IP_RANGE)
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 request.headers['host'] entspricht.

Wir empfehlen in den meisten Fällen die Verwendung von host().

request.path String Der angeforderte HTTP-URL-Pfad.
request.query String

Die HTTP-URL-Abfrage im Format name1=value&name2=value2, wie sie in der ersten Zeile der HTTP-Anfrage angezeigt wird.

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 host() + request.path.

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 True zurück, wenn der String x mit dem angegeben RE2-Muster y.

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.