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:
|
source.matchTag(SECURE_TAG) |
boolean |
Das Argument ist die dauerhafte 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 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 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 werden alle kleingeschrieben. |
request.url() |
String | Günstig für 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 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. |