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