Spécification de niveaux d'accès personnalisés

Cette page détaille les objets et les attributs utilisés pour créer des expressions Common Expression Language (CEL) pour les niveaux d'accès personnalisés. Des exemples sont fournis.

Pour en savoir plus sur le CEL, consultez la définition du langage CEL.

Objets

Access Context Manager fournit quatre objets contenant des attributs de niveau d'accès.

Objets
origin Contient des attributs qui identifient l'origine de la requête.
request.auth Contient des attributs qui identifient les aspects d'authentification et d'autorisation de la requête.
levels Contient des attributs pour définir la dépendance vis-à-vis d'autres niveaux d'accès.
device Contient des attributs qui décrivent l'appareil d'où provient la requête.

Attributs origin

Cette section répertorie les attributs compatibles avec l'objet origin.

Attributs
ip
Type chaîne
Description

Adresse IP d'origine de la requête. Si l'adresse IP ne peut pas être déterminée, origin.ip renvoie une erreur. Plutôt que de comparer des chaînes, nous vous recommandons d'utiliser inIpRange pour vérifier si l'adresse IP d'origine se trouve dans une plage d'adresses IP spécifique.

Exemple :


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

region_code
Type chaîne
Description

Code alpha-2 ISO 3166-1 du pays ou de la région d'où provient la requête. Si le code de la région ne peut pas être déterminé, origin.region_code renvoie une erreur.

Exemple :


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

Attributs request.auth

Cette section répertorie les attributs compatibles avec l'objet request.auth.

Attributs
principal
Type string, list(chaîne)
Description

ID unique de l'utilisateur qui a émis la requête.

La valeur de request.auth.principal doit être un ou plusieurs ID d'utilisateur uniques. Les UUID peuvent être obtenus à l'aide de l'API Admin SDK Directory.

La valeur doit être au format suivant : https://accounts.google.com/UUID

UUID est l'UUID d'un utilisateur.

Exemple :


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
Type boolean
Description

Utilisateur authentifié à l'aide d'un mot de passe.

Exemple :


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

claims.crd_str.push
Type boolean
Description

Utilisateur authentifié à l'aide d'une notification push sur l'appareil mobile.

Exemple :


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

claims.crd_str.sms
Type boolean
Description

Utilisateur authentifié à l'aide d'un code envoyé par SMS ou par appel téléphonique.

Exemple :


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

claims.crd_str.swk
Type boolean
Description

La validation en deux étapes a utilisé une clé logicielle, par exemple un téléphone, comme clé de sécurité.

Exemple :


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

claims.crd_str.hwk
Type boolean
Description

La validation en deux étapes a utilisé une clé matérielle telle que la clé Google Titan.

Exemple :


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

claims.crd_str.otp
Type boolean
Description

Utilisateur authentifié à l'aide de méthodes à base de mot de passe à usage unique (Google Authenticator et codes de secours).

Exemple :


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

claims.crd_str.mfa
Type boolean
Description

Utilisateur authentifié avec l'une des méthodes de cette table, à l'exception de pwd.

Exemple :


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

Pour en savoir plus sur la règle concernant le niveau de complexité des identifiants, consultez la section Configurer une règle concernant le niveau de complexité des identifiants.

Attribut levels

Cette section répertorie les attributs compatibles avec l'objet levels.

Attributs
level name
Type boolean
Description

level name correspond au nom d'un niveau d'accès existant.

En cas d'utilisation, les conditions du niveau d'accès spécifié doivent également être remplies en plus des autres conditions requises pour votre niveau d'accès personnalisé.

Exemple :


levels.allow_corp_ips

allow_corp_ips est le nom d'un niveau d'accès.

Attribut device

Cette section répertorie les attributs compatibles avec l'objet device. Si aucun appareil associé aux identifiants de la requête n'est trouvé, tous les attributs suivants seront évalués comme une erreur.

Attributs
encryption_status
Type enum
Description

Décrit l'état de chiffrement de l'appareil.

Valeurs d'énumération:


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;
}

Exemple :


device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
Type boolean
Description

Indique si l'appareil a été approuvé par l'administrateur du domaine.

Exemple :


device.is_admin_approved_device == true

is_corp_owned_device
Type boolean
Description

Indique si l'appareil appartient à l'organisation.

Exemple :


device.is_corp_owned_device == true

is_secured_with_screenlock
Type boolean
Description

Indique si la fonction de verrouillage de l'écran est activée sur l'appareil.

Exemple :


device.is_secured_with_screenlock == true

os_type
Type enum
Description

Identifie le système d'exploitation utilisé par l'appareil.

Valeurs d'énumération:


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;
}

Exemple :


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

vendors
Type map<string, Vendor> vendor;
Description

L'objet vendors permet d'accéder aux données fournies par des fournisseurs tiers de sécurité et de gestion des points de terminaison. Chaque fournisseur peut renseigner trois attributs de premier niveau partagés : is_compliant_device, is_managed_device et device_health_score.

De plus, les fournisseurs peuvent fournir leurs propres clés et valeurs référencées à l'aide de l'attribut data. Les clés disponibles pour l'attribut data varient d'un fournisseur à l'autre. Assurez-vous de rester cohérent lorsque vous comparez la valeur de clé dans votre expression de règle. Par exemple, si vous vous attendez à ce que la valeur de la clé soit une chaîne ou une valeur booléenne, veillez à la comparer à une chaîne ou à une valeur booléenne dans l'expression de règle correspondante. Notez que lorsque la valeur est un entier, vous devez la comparer avec un nombre double dans l'expression de la règle.

Valeurs d'énumération:


// 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;
}

Exemples :


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
Type boolean
Description

Indique si l'état du démarrage validé Android est green.

Exemple :


device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
Type boolean
Description

Indique si l'appareil est conforme à la conformité du profil CTS.

Exemple :


device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Type boolean
Description

Indique si la fonctionnalité Vérifier les applications de Google Play Protect est activée sur l'appareil.

Exemple :


device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
Type boolean
Description

Indique si des applications potentiellement dangereuses ont été détectées sur l'appareil.

Exemple :


device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
Type boolean
Description

Indique si l'appareil iOS a été jailbreaké.

Exemple :


device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
Type boolean
Description

Indique si la requête provient d'un appareil doté d'un système Chrome OS validé.

Exemple :


device.verified_chrome_os == true

chrome.management_state
Type chaîne
Description

Le navigateur est-il géré, au niveau du navigateur ou du profil, et par l'entreprise dans le domaine approprié.

Un navigateur est considéré comme géré si les règles sont gérées et transférées de manière centralisée, et si le domaine du navigateur ou du profil géré correspond au domaine attendu côté serveur.

Exemple :


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
Type chaîne
Description

La version du navigateur est-elle supérieure à une certaine version minimale ?

Exemple :


device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Type boolean
Description

Le connecteur de vérification d'URL en temps réel est-il activé ?

Exemple :


device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
Type boolean
Description

Le connecteur d'analyse d'importation de fichiers est-il activé ?

Exemple :


device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Type boolean
Description

Le connecteur d'analyse de téléchargement de fichiers est-il activé ?

Exemple :


device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
Type boolean
Description

Le connecteur d'analyse groupée de texte (collé) est-il activé ?

Exemple :


device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
Type boolean
Description

Le connecteur de rapports d'événements de sécurité est-il activé ?

Exemple :


device.chrome.is_security_event_analysis_enabled == true | false

Functions

Access Context Manager fournit les fonctions suivantes à utiliser dans les expressions CEL pour les niveaux d'accès personnalisés.

Fonctions
inIpRange(address, [subnets])
Type (chaîne, liste(chaîne)) -< booléen
Description

Vérifie si une adresse IP appartient à l'un des sous-réseaux donnés.

Exemple :


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

device.versionAtLeast(minVersion)
Type DeviceType.(string) -> boolean
Description

Vérifie si la version du système d'exploitation de l'appareil vaut au moins une version donnée. Nous vous recommandons d'utiliser cette fonction avec l'attribut device.os_type.

Exemple :


device.versionAtLeast("10.0") == true

certificateBindingState(origin, device)
Type (Pair, DeviceType) -> entier
Description

Vérifie si le certificat client associé à l'origine correspond à l'appareil et signale l'état.

L'état renvoyé par la fonction peut être l'un des suivants:

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

Exemple :


certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
Type string.(string) -> valeur booléenne
Description

Teste si l'opérande de chaîne commence par l'argument préfixe.

Exemple :


"Sample string".startsWith("Sample")

endsWith()
Type string.(string) -> valeur booléenne
Description

Détermine si l'opérande de chaîne se termine par l'argument "suffix".

Exemple :


"Sample string".endsWith("string")

origin.clientCertFingerprint()
Type Origin.() -> chaîne
Description

Renvoie l'empreinte du certificat associé à l'origine. Vous pouvez l'utiliser dans les macros pour tester les certificats des appareils.

Exemple :


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

Macros pour les expressions CEL

Vous pouvez utiliser les macros suivantes dans les expressions CEL pour les niveaux d'accès personnalisés:

Macro Description
has(e.f) Vérifie si un champ est disponible. Pour en savoir plus, consultez la section Sélection des champs. Exemple :

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

e.all(x, p) Vérifie si un prédicat vaut pour tous les éléments d'une liste e ou pour les clés d'une carte e. Ici, x est un identifiant à utiliser dans p qui est lié à l'élément ou à la clé. La macro all() combine les résultats du prédicat par élément avec l'opérateur and (&&). Par conséquent, si un prédicat prend la valeur "false", la macro prend la valeur "false", en ignorant toute erreur provenant d'autres prédicats. Exemple :

La valeur renvoyée est "false", car tous les éléments ne sont pas supérieurs à 1:
[1,2,3].all(x, x > 1)

e.exists(x, p) Semblable à la macro all(), mais elle combine les résultats du prédicat avec l'opérateur or (||). Exemple :

La valeur renvoyée est "true", car la liste comprend au moins un élément supérieur à 1:
[1,2,3].exists(x, x > 1)

Vérifie si le certificat d'entreprise associé à l'appareil correspond à l'émetteur:
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) Semblable à la macro exists(), mais ne renvoie la valeur "true" que si le prédicat d'un seul élément ou d'une clé prend la valeur "true", et le reste est défini sur "false". Toute autre combinaison de résultats booléens renvoie la valeur "false", et toute erreur de prédicat entraîne la génération d'une erreur par la macro. Exemple :

La valeur renvoyée est "false", car plusieurs éléments sont supérieurs à 1:
[1,2,3].exists_one(x, x > 1)

Exemples d'expressions CEL

Cette section contient des exemples d'expressions CEL utilisées pour créer des niveaux d'accès personnalisés.

Exemple 1

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

Cet exemple représente un niveau d'accès qui nécessite que les conditions suivantes soient remplies pour autoriser une requête :

  • L'appareil à l'origine de la requête est chiffré.

  • Une ou plusieurs des affirmations suivantes sont vraies :

    • La requête provient des États-Unis.

    • L'appareil à l'origine de la requête est approuvé par l'administrateur de domaine.

Exemple 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"))

Cet exemple représente un niveau d'accès qui nécessite que les conditions suivantes soient remplies pour autoriser une requête :

  • L'une des affirmations suivantes est vraie :

    • L'appareil à l'origine de la requête est détenu votre organisation et utilise un système d'exploitation Windows pour ordinateur de bureau.

    • L'appareil à l'origine de la requête utilise un système d'exploitation Mac pour ordinateur de bureau, est approuvé par l'administrateur de domaine et utilise au minimum la version MacOS 10.11.

Exemple 3

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

Cet exemple représente un niveau d'accès qui nécessite que la condition suivante soit remplie pour autoriser une requête :

  • La fonction d'extension certificateBindingState détermine que le certificat présenté au moment de la requête correspond à l'un des certificats d'appareil enregistrés lors de l'inscription de l'appareil à la validation des points de terminaison.