Sprachreferenz für CEL-Matcher

Die Common Expression Language (CEL) ist eine Open-Source-Nicht-Turing-Komplettsprache, die eine gemeinsame Semantik für die Ausdrucksauswertung implementiert. Secure Web Proxy verwendet eine Teilmenge von CEL-Bedingungen, um boolesche Autorisierungsentscheidungen auf der Grundlage von Attributdaten zu treffen. Im Allgemeinen besteht ein Bedingungsausdruck aus einer oder mehreren Anweisungen, die durch logische Operatoren (&&, || oder !) verbunden sind. Jede Anweisung drückt eine attributbasierte Kontrollregel aus, die für die Rollenbindung gilt und letztendlich bestimmt, ob der Zugriff zulässig ist.

Attribute

Sitzungsattribute und Anwendungsattribute werden beim Definieren von Secure Web Proxy-Richtlinien verwendet, um entweder die Sitzungsattribute oder die Anwendungsattribute zu beschreiben, für die eine Richtlinie gilt.

Die durch SessionMatcher beschriebenen Sitzungsattribute gelten für sitzungsspezifische Attribute wie die Quell- oder Ziel-IP-Adresse, Hosts oder den IP-Bereich. Die in ApplicationMatcher beschriebenen Anwendungsattribute 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 gelten.

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 schließt den Port nicht ein. Der Wert wird folgendermaßen bestimmt:
  • Raw-HTTP-Anfragen: Host-Header
  • Proxy-Tunnel-HTTP CONNECT-Anfragen: Das CONNECT-Ziel
source.matchTag(SECURE_TAG) boolean

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

Das Argument ist die dauerhafte 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 enthalten 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-Interpretation finden Sie unter Einträge von UrlList interpretieren.

inIpRange(IP_ADDRESS,
IP_RANGE)
boolean True, wenn IP_ADDRESS im 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.

Attribute nur für ApplicationMatcher verfügbar

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 mehrere Werte enthält, ist der Wert in dieser Zuordnung ein durch Kommas getrennter 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

Praktisches Äquivalent für request.headers['host'].

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. Die Werte für dieses Attribut werden alle kleingeschrieben.
request.url() String

Günstig für host() + request.path.

Dies enthält den Port nicht und verwendet einen Hostwert, der sich vom Host-Header unterscheiden kann.

request.useragent() String Praktisches Äquivalent für request.headers['user-agent'].

Operatoren

Secure Web Proxy unterstützt mehrere Operatoren, mit denen komplexe logische Ausdrücke aus einfachen Ausdrucksanweisungen erstellt werden können. Secure Web Proxy unterstützt logische Operatoren wie &&, ||, und ! sowie Operatoren zur Stringbearbeitung wie x.contains('y').

Mit den logischen Operatoren können Sie mehrere Variablen in einem bedingten Ausdruck prüfen. request.method == 'GET' && host().matches('.*\.example.com') verknüpft beispielsweise zwei Anweisungen. Beide Anweisungen müssen True sein, damit das Gesamtergebnis True generiert wird.

Die Stringbearbeitungsoperatoren gleichen Strings oder Teilstrings ab, die Sie definieren, und ermöglichen Ihnen, Regeln zu entwickeln, um den Zugriff auf Ressourcen zu steuern, ohne jede mögliche Kombination auflisten zu müssen.

Logische Operatoren

In der folgenden Tabelle werden die logischen Operatoren beschrieben, die von Secure Web Proxy unterstützt werden.

Beispielausdruck Beschreibung
x == "foo" Gibt True zurück, wenn x dem konstanten Stringliteralargument entspricht.
x == R"fo'o" Gibt True zurück, wenn x dem angegebenen Rohstringliteral entspricht, das keine Escape-Sequenzen interpretiert. Raw-String-Literale eignen sich sehr gut zum Ausdruck von Strings, die im Code als Escape-Zeichen für Sequenzzeichen verwendet werden müssen.
x == y Gibt True zurück, wenn x gleich y ist.
x != y Gibt True zurück, wenn x ungleich y ist.
x && y Gibt True zurück, wenn sowohl x als auch y 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 ist, oder False, wenn der boolesche Wert x True ist.
m['k'] Wenn der Schlüssel k vorhanden ist, wird der Wert beim Schlüssel k in der String-zu-String-Zuordnung m zurückgegeben. Wenn der Schlüssel k nicht vorhanden ist, wird ein Fehler zurückgegeben, der dazu führt, dass die Regel, die gerade ausgewertet wird, nicht übereinstimmt.

Operatoren zur Stringbearbeitung

In der folgenden Tabelle werden die Operatoren zur Stringbearbeitung beschrieben, die von Secure Web Proxy unterstützt werden.

Ausdruck Beschreibung
x.contains(y) Gibt True zurück, wenn der String x den Teilstring y enthält.
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 angegebenen RE2-Muster y übereinstimmt.

Das RE2-Muster wird mit der Option RE2::Latin1 kompiliert, die Unicode-Funktionen deaktiviert.

x.lower() Gibt den Kleinbuchstaben des Strings x zurück.
x.upper() Gibt den Großbuchstabenwert des Strings x zurück.
x + y Gibt den verketteten String xy zurück.
int(x) Wandelt das Stringergebnis von x in einen int-Typ um. Der konvertierte String kann für den Ganzzahlvergleich mit standardmäßigen arithmetischen Operatoren wie > und <= verwendet werden. Dies funktioniert nur bei Werten, die Ganzzahlen sein können.