CEL-Referenz für Matcher

Common Expression Language (CEL) ist eine Open-Source-Sprache ohne Turing-Vollständigkeit, die gängige Semantik für die Ausdrucksbewertung implementiert. Secure Web Proxy verwendet eine Teilmenge von CEL-Bedingungen, um auf Grundlage von Attributdaten boolesche Autorisierungsentscheidungen 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 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, die von SessionMatcher beschrieben werden, gelten für sitzungsspezifische Attribute wie die Quell- oder Ziel-IP-Adresse, Hosts oder IP-Bereiche. 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 gelten.

Attribut Attributtyp Beschreibung
source.ip String Die IP-Adresse des Clients, der die Anfrage gesendet hat.
source.port integer Der Clientport, von dem 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 Anschluss nicht ein. Der Wert wird durch Folgendes bestimmt:
  • Rohe HTTP-Anfragen: Der Host-Header
  • Proxy-Tunnel-HTTP-CONNECT-Anfragen: CONNECT-Ziel
source.matchTag(SECURE_TAG) boolean

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

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 mehrere Werte enthält, ist der Wert in dieser Zuordnung ein kommagetrennter 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-Variante 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 sind alle kleingeschrieben.
request.url() String

Convenience für host() + request.path.

Der Port ist nicht enthalten und es wird ein Hostwert verwendet, der vom Hostheader abweichen kann.

request.useragent() String Convenience-Variante für request.headers['user-agent'].

Operatoren

Secure Web Proxy unterstützt mehrere Operatoren, mit denen sich komplexe Logik-Ausdrücke aus einfachen Ausdrucksanweisungen erstellen lassen. Secure Web Proxy unterstützt logische Operatoren wie &&, ||, und ! sowie Stringmanipulationsoperatoren wie x.contains('y').

Mit den logischen Operatoren können Sie mehrere Variablen in einem Bedingungsausdruck prüfen. Beispiel: In request.method == 'GET' && host().matches('.*\.example.com') werden zwei Anweisungen verknüpft, die beide True sein müssen, damit das Gesamtergebnis True ergibt.

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 dem konstanten Stringliteralargument entspricht.
x == R"fo'o" Gibt True zurück, wenn x dem angegebenen Raw-String-Literal entspricht, das keine Escape-Sequenzen interpretiert. Raw-String-Literale eignen sich gut für die Darstellung von Strings, die im Code mit Escape-Sequenz-Zeichen verwendet werden müssen.
x == y Gibt True zurück, wenn x gleich y ist.
x != y Gibt True zurück, wenn x nicht gleich 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 False ist, oder False, wenn der boolesche Wert x True ist.
m['k'] Wenn der Schlüssel k vorhanden ist, gibt das Attribut den Wert bei Schlüssel k in der String-zu-String-Zuordnung m zurück. Wenn der Schlüssel k nicht vorhanden ist, wird ein Fehler zurückgegeben, der dazu führt, dass die zu prüfende Regel nicht übereinstimmt.

Operatoren zur Stringmanipulation

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 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 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ß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 einen Ganzzahlvergleich mit standardmäßigen arithmetischen Operatoren wie > und <= verwendet werden. Dies funktioniert nur bei Werten, die ganze Zahlen sein können.