Benutzerdefinierte Spezifikation der Zugriffsebene

Auf dieser Seite werden die Objekte und Attribute beschrieben, mit denen die CEL-Ausdrücke (Common Expression Language) für benutzerdefinierte Zugriffsebenen erstellt werden. Beispiele sind enthalten.

Weitere Informationen zu CEL finden Sie in der CEL-Sprachdefinition.

Objekte

Access Context Manager stellt vier Objekte mit Zugriffsebenenattributen bereit.

Objekte
origin Enthält Attribute, die den Ursprung der Anfrage identifizieren.
request.auth Enthält Attribute, die Authentifizierungs- und Autorisierungsaspekte der Anfrage identifizieren.
levels Enthält Attribute, um die Abhängigkeit von anderen Zugriffsebenen zu definieren.
device Enthält Attribute, die das Gerät beschreiben, von dem die Anfrage stammt.

origin-Attribute

In diesem Abschnitt werden die vom origin-Objekt unterstützten Attribute aufgeführt.

Attribute
ip
Typ String
Beschreibung

Die IP-Adresse, von der die Anfrage stammt. Wenn die IP-Adresse nicht ermittelt werden kann, wird origin.ip als Fehler ausgegeben. Wir empfehlen, mit inIpRange zu prüfen, ob sich die ursprüngliche IP-Adresse in einem bestimmten IP-Adressbereich befindet, anstatt einen Stringvergleich durchzuführen.

Example:


inIpRange(origin.ip, ["203.0.113.24"])

region_code
Typ String
Beschreibung

Der Alpha-2-Code nach ISO 3166-1 für das Land oder die Region, aus der die Anfrage stammt. Wenn der Regionscode nicht ermittelt werden kann, wird origin.region_code als Fehler ausgegeben.

Example:


origin.region_code == "GB"
origin.region_code in ["US", "FR", "JP"]

request.auth-Attribute

In diesem Abschnitt werden die vom request.auth-Objekt unterstützten Attribute aufgeführt.

Attribute
principal
Typ string, list(string)
Beschreibung

Die eindeutige ID des Nutzers, der die Anfrage gesendet hat.

Der Wert für request.auth.principal muss mindestens eindeutige Nutzer-ID sein. Die UUIDs können mit der Admin SDK Directory API abgerufen werden.

Der Wert muss das folgende Format haben: https://accounts.google.com/UUID.

Dabei ist UUID die UUID eines Nutzers.

Example:


request.auth.principal == "https://accounts.google.com/1134924314572461055"
request.auth.principal in ["https://accounts.google.com/1134924314572461055", "https://accounts.google.com/3134824314572461115"]

claims.crd_str.pwd
Typ boolean
Beschreibung

Mit einem Passwort authentifizierter Nutzer.

Example:


request.auth.claims.crd_str.pwd == true

claims.crd_str.push
Typ boolean
Beschreibung

Nutzer, der mit einer Push-Benachrichtigung an das Mobilgerät authentifiziert wurde

Example:


request.auth.claims.crd_str.push == true

claims.crd_str.sms
Typ boolean
Beschreibung

Nutzer werden mit einem Code authentifiziert, der an eine SMS oder einen Telefonanruf gesendet wird.

Example:


request.auth.claims.crd_str.sms == true

claims.crd_str.swk
Typ boolean
Beschreibung

Bei der 2SV-Methode wurde ein Softwareschlüssel wie ein Smartphone als Sicherheitsschlüssel verwendet.

Example:


request.auth.claims.crd_str.swk == true

claims.crd_str.hwk
Typ boolean
Beschreibung

Für die 2SV-Methode wurde ein Hardwareschlüssel wie der Google Titan Key verwendet.

Example:


request.auth.claims.crd_str.hwk == true

claims.crd_str.otp
Typ boolean
Beschreibung

Nutzer, der mit einmaligen Passwortmethoden (Google Authenticator und Back-up-Codes) authentifiziert wurden.

Example:


request.auth.claims.crd_str.otp == true

claims.crd_str.mfa
Typ boolean
Beschreibung

Nutzer hat sich mit einer der Methoden in dieser Tabelle außer pwd authentifiziert.

Example:


request.auth.claims.crd_str.mfa == true

Weitere Informationen zur Richtlinie für die Anmeldedatenstärke finden Sie unter Richtlinie für die Anmeldedatenstärke konfigurieren.

levels Attribut

In diesem Abschnitt werden die vom levels-Objekt unterstützten Attribute aufgeführt.

Attribute
level name
Typ boolean
Beschreibung

level name entspricht dem Namen einer vorhandenen Zugriffsebene.

Zusätzlich zu den anderen Anforderungen Ihrer benutzerdefinierten Zugriffsebene müssen die Bedingungen für die angegebene Zugriffsebene ebenfalls erfüllt sein.

Example:


levels.allow_corp_ips

Dabei ist allow_corp_ips der Name einer Zugriffsebene.

device Attribut

In diesem Abschnitt werden die vom device-Objekt unterstützten Attribute aufgeführt. Wenn kein mit den IDs in der Anfrage verknüpftes Gerät gefunden wird, werden alle folgenden Attribute als Fehler ausgewertet.

Attribute
encryption_status
Typ enum
Beschreibung

Beschreibt den Verschlüsselungsstatus des Geräts.

Enum-Werte:


enum DeviceEncryptionStatus {
  // The encryption status of the device is not specified or not known.
  ENCRYPTION_UNSPECIFIED == 0;
  // The device does not support encryption.
  ENCRYPTION_UNSUPPORTED == 1;
  // The device supports encryption, but is currently unencrypted.
  UNENCRYPTED == 2;
  // The device is encrypted.
  ENCRYPTED == 3;
}

Example:


device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
Typ boolean
Beschreibung

Gibt an, ob das Gerät vom Domainadministrator genehmigt wurde.

Example:


device.is_admin_approved_device == true

is_corp_owned_device
Typ boolean
Beschreibung

Gibt an, ob das Gerät der Organisation gehört.

Example:


device.is_corp_owned_device == true

is_secured_with_screenlock
Typ boolean
Beschreibung

Gibt an, ob die Displaysperre aktiviert ist.

Example:


device.is_secured_with_screenlock == true

os_type
Typ enum
Beschreibung

Ermittelt, welches Betriebssystem das Gerät verwendet.

Enum-Werte:


enum OsType {
  // The operating system of the device is not specified or not known.
  OS_UNSPECIFIED == 0;
  // A desktop Mac operating system.
  DESKTOP_MAC == 1;
  // A desktop Windows operating system.
  DESKTOP_WINDOWS == 2;
  // A desktop Linux operating system.
  DESKTOP_LINUX == 3;
  // An Android operating system.
  ANDROID == 4;
  // An iOS operating system.
  IOS == 5;
  // A desktop ChromeOS operating system.
  DESKTOP_CHROME_OS == 6;
}

Example:


device.os_type == OsType.DESKTOP_MAC
device.os_type != OsType.OS_UNSPECIFIED

vendors
Typ Map<string, Vendor>-Anbieter;
Beschreibung

Das Objekt vendors wird verwendet, um auf Daten zuzugreifen, die von Drittanbietern für Sicherheit und Endpunktverwaltung bereitgestellt werden. Jeder Anbieter kann drei gemeinsame Attribute der obersten Ebene ergänzen: is_compliant_device, is_managed_device und device_health_score.

Darüber hinaus können Anbieter ihre eigenen Schlüssel und Werte angeben, auf die im Attribut data verwiesen wird. Die für das Attribut data verfügbaren Schlüssel unterscheiden sich je nach Anbieter. Überprüfen Sie, ob der Schlüsselwert in Ihrem Richtlinienausdruck verglichen wird. Wenn Sie beispielsweise davon ausgehen, dass der Schlüsselwert ein String oder boolesch ist, müssen Sie ihn mit einem String oder einem booleschen Wert im Richtlinienausdruck vergleichen. Wenn der Wert eine Ganzzahl ist, sollten Sie ihn im Richtlinienausdruck mit einer doppelten Zahl vergleichen.

Enum-Werte:


// Health score of the device as provided by the vendor (possibly third party).
enum DeviceHealthScore {
  // The health score for the device is not specified or unknown.
  DEVICE_HEALTH_SCORE_UNSPECIFIED = 0;
  // The health of the device is very poor.
  VERY_POOR = 1;
  // The health of the device is poor.
  POOR = 2;
  // The health of the device is ok.
  NEUTRAL = 3;
  // The health of the device is good.
  GOOD = 4;
  // The health of the device is very good.
  VERY_GOOD = 5;
}

Beispiele:


device.vendors["some_vendor"].is_compliant_device == true


device.vendors["some_vendor"].is_managed_device == true


device.vendors["some_vendor"].device_health_score == DeviceHealthScore.VERY_GOOD


device.vendors["some_vendor"].data["is_device_compromised"] == true


device.vendors["some_vendor"].data["some_num"] == 1.0

android_device_security.verified_boot
Typ boolean
Beschreibung

Gibt an, ob der Status von Android Verified Boot green ist.

Example:


device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
Typ boolean
Beschreibung

Gibt an, ob das Gerät die CTS-Profil-Compliance erfüllt.

Example:


device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Typ boolean
Beschreibung

Gibt an, ob die Funktion zur Überprüfung von Apps mit Google Play Protect auf dem Gerät aktiviert ist.

Example:


device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
Typ boolean
Beschreibung

Gibt an, ob potenziell schädliche Apps auf dem Gerät gefunden wurden.

Example:


device.android_device_security.has_potentially_harmful_apps == true
verified_chrome_os
Typ boolean
Beschreibung

Gibt an, ob die Anfrage von einem Gerät mit einem verifizierten Chrome OS stammt.

Example:


device.verified_chrome_os == true

chrome.management_state
Typ String
Beschreibung

Wird der Browser auf Browser- oder Profilebene und vom Unternehmen unter der richtigen Domain verwaltet?

Ein Browser gilt als verwaltet, wenn die Richtlinien zentral verwaltet und übertragen werden und die Domain des verwalteten Browsers oder des verwalteten Profils mit der erwarteten Domain auf der Serverseite übereinstimmt.

Example:


device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_MANAGED_BY_OTHER_DOMAIN | 
ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED |
ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED |
ChromeManagementState.CHROME_MANAGEMENT_STATE_UNMANAGED

chrome.versionAtLeast
Typ String
Beschreibung

der Browser eine bestimmte Mindestversion überschreitet.

Example:


device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Typ boolean
Beschreibung

Ist der Connector für Echtzeit-URL-Prüfungen aktiviert.

Example:


device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
Typ boolean
Beschreibung

Ist der Analyse-Connector für Dateiuploads aktiviert.

Example:


device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Typ boolean
Beschreibung

Ist der Analyse-Connector für Dateidownloads aktiviert.

Example:


device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
Typ boolean
Beschreibung

Ist der Analyse-Connector für Bulk-Text-(einfügen) aktiviert.

Example:


device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
Typ boolean
Beschreibung

Ist der Berichtsconnector für das Sicherheitsereignis aktiviert.

Example:


device.chrome.is_security_event_analysis_enabled == true | false

Functions

Access Context Manager bietet die folgenden Funktionen zur Verwendung in CEL-Ausdrücken für benutzerdefinierte Zugriffsebenen.

Funktionen
inIpRange(address, [subnets])
Typ (string, list(string)) -< boolesch
Beschreibung

Prüft, ob eine IP-Adresse zu einem der angegebenen Subnetze gehört.

Example:


inIpRange(origin.ip, ["192.0.2.0/24", "198.51.100.0/24", "203.0.113.0/24"])

device.versionAtLeast(minVersion)
Typ DeviceType.(string) -> boolean
Beschreibung

Prüft, ob das Betriebssystem des Geräts mindestens eine bestimmte Version hat. Wir empfehlen, diese Funktion mit dem Attribut device.os_type zu verwenden.

Example:


device.versionAtLeast("10.0") == true

certificateBindingState(origin, device)
Typ (Peer, DeviceType) -> Ganzzahl
Beschreibung

Prüft, ob das mit dem Ursprung verknüpfte Clientzertifikat mit dem Gerät übereinstimmt und den Status meldet.

Die von der Funktion zurückgegebene Status kann einen der folgenden Status haben:

  • CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
  • CertificateBindingState.CERT_NOT_MATCHING_EXISTING_DEVICE
  • CertificateBindingState.CERT_STATE_UNKNOWN

Example:


certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
Typ string.(string) -> boolesch
Beschreibung

Prüft, ob der String-Operand mit dem Präfixargument beginnt.

Example:


"Sample string".startsWith("Sample")

endsWith()
Typ string.(string) -> boolesch
Beschreibung

Prüft, ob der String-Operand mit dem Suffix-Argument endet.

Example:


"Sample string".endsWith("string")

origin.clientCertFingerprint()
Typ Origin.() -> String
Beschreibung

Gibt den Fingerabdruck des Zertifikats zurück, das mit der Quelle verknüpft ist Sie können sie in Makros verwenden, um Gerätezertifikate zu testen.

Example:


// Checks if the enterprise certificate associated with the origin matches the device.
device.certificates.exists(cert, cert.is_valid && cert.cert_fingerprint == origin.clientCertFingerprint())

Makros für CEL-Ausdrücke

Sie können die folgenden Makros in den CEL-Ausdrücken für benutzerdefinierte Zugriffsebenen verwenden:

Makro Beschreibung
has(e.f) Testet, ob ein Feld verfügbar ist. Weitere Informationen finden Sie unter Feldauswahl. Beispiel:

has({"key": "value"}.key) has(device.vendors.some_vendor)

e.all(x, p) Testet, ob ein Prädikat für alle Elemente einer Liste (e) oder die Schlüssel einer Zuordnung (e) gilt. Hier ist x eine Kennung, die in p verwendet werden soll und an das Element oder den Schlüssel gebunden wird. Das all()-Makro kombiniert die Prädikatenergebnisse pro Element mit dem Operator and (&&). Wenn also ein Prädikat als falsch ausgewertet wird, wird das Makro als falsch ausgewertet und alle Fehler aus anderen Prädikaten werden ignoriert. Beispiel:

Es wird „false“ zurückgegeben, da nicht alle Elemente größer als 1 sind:
[1,2,3].all(x, x > 1)

e.exists(x, p) Wie das all()-Makro, kombiniert die Prädikatsergebnisse jedoch mit dem or-Operator (||). Beispiel:

Es wird „true“ zurückgegeben, da mindestens ein Element in der Liste größer als 1 ist:
[1,2,3].exists(x, x > 1)

Prüft, ob das mit dem Gerät verknüpfte Unternehmenszertifikat mit dem Aussteller übereinstimmt:
device.certificates.exists(cert, cert.is_valid && cert.issuer == "EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN")

e.exists_one(x, p) Wie das exists()-Makro, wird jedoch nur dann als „true“ ausgewertet, wenn das Prädikat von genau einem Element oder Schlüssel als wahr und dem Rest als falsch ausgewertet wird. Jede andere Kombination von booleschen Ergebnissen wird als falsch ausgewertet und jeder Prädikatfehler löst einen Fehler aus. Beispiel:

Es wird „false“ zurückgegeben, da mehr als ein Element größer als 1 ist:
[1,2,3].exists_one(x, x > 1)

Beispiel-CEL-Ausdrücke

Dieser Abschnitt enthält Beispiele für CEL-Ausdrücke, die zum Erstellen benutzerdefinierter Zugriffsebenen verwendet werden.

Beispiel 1

device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ["US"] || device.is_admin_approved_device)

Dieses Beispiel stellt eine Zugriffsebene dar, für die die folgenden Bedingungen erfüllt sein müssen, um eine Anfrage zuzulassen:

  • Das Gerät, von dem die Anfrage stammt, ist verschlüsselt.

  • Mindestens eines der folgenden stimmt:

    • Die Anfrage stammt aus den USA.

    • Das Gerät, von dem die Anfrage stammt, wurde vom Domainadministrator genehmigt.

Beispiel 2

(device.os_type == OsType.DESKTOP_WINDOWS && device.is_corp_owned_device) || (device.os_type == OsType.DESKTOP_MAC && device.is_admin_approved_device && device.versionAtLeast("10.11.0"))

Dieses Beispiel stellt eine Zugriffsebene dar, für die die folgenden Bedingungen erfüllt sein müssen, um eine Anfrage zuzulassen:

  • Eine der folgenden Aussagen ist richtig:

    • Das Gerät, von dem die Anfrage stammt, verwendet ein Desktop-Windows-Betriebssystem und gehört Ihrer Organisation.

    • Das Gerät, von dem die Anfrage stammt, verwendet ein Mac-Desktop-Betriebssystem, ist vom Domainadministrator genehmigt und verwendet mindestens  MacOS10.11.

Beispiel 3

(certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE)

Dieses Beispiel stellt eine Zugriffsebene dar, für die die folgende Bedingung erfüllt sein müssen, um eine Anfrage zuzulassen:

  • Die Erweiterungsfunktion certificateBindingState bestimmt, dass das bei der Anfrage angegebene Zertifikat mit einem der Gerätezertifikate übereinstimmt, die bei der Registrierung des Geräts in der Endpunktprüfung registriert wurden.