Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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.
Contient des attributs qui décrivent l'appareil à l'origine de 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 génère une erreur. 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 au lieu d'effectuer une comparaison de chaînes.
Exemple :
inIpRange(origin.ip,["203.0.113.24"])
region_code
Type
chaîne
Description
Code ISO 3166-1 alpha-2 du pays ou de la région d'où provient la requête. Si le code régional ne peut pas être déterminé, origin.region_code génère une erreur.
Cette section répertorie les attributs compatibles avec l'objet request.auth.
Attributs
principal
Type
chaîne, liste (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 respecter le format suivant : https://accounts.google.com/UUID
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.
Lorsque vous les utilisez, les conditions du niveau d'accès spécifié doivent également répondre aux exigences de votre niveau d'accès personnalisé.
Exemple :
levels.allow_corp_ips
Où 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 génèrent une erreur.
Attributs
encryption_status
Type
enum
Description
Décrit l'état de chiffrement de l'appareil.
Valeurs enum :
enumDeviceEncryptionStatus{// 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;}
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 installé sur l'appareil.
Valeurs enum :
enumOsType{// 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;}
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.
Pour référencer l'état de l'appareil, utilisez le format key-acme, où acme correspond à l'ID client de l'organisation. Vous pouvez obtenir le numéro client à partir de l'URL GET https://www.googleapis.com/admin/directory/v1/customers/my_customer. Le champ "ID" de la réponse contient le numéro client commençant par la lettre C. Utilisez la chaîne après la lettre C, en excluant la lettre C, pour l'ID client.
Valeurs enum :
// Health score of the device as provided by the vendor (possibly third party).enumDeviceHealthScore{// 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;}
Indique si la requête provient d'un appareil avec 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.
Voici les états de gestion Chrome disponibles :
État
MANAGED
Le navigateur ou le profil sont gérés par le client.
UNMANAGED
Le navigateur ou le profil n'est géré par aucun client.
MANAGED_BY_OTHER_DOMAIN
Le navigateur ou le profil sont gérés par un autre client.
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
(Peer, DeviceType) -> entier
Description
Vérifie si le certificat client associé à l'origine correspond à l'appareil et renvoie l'état.
L'état renvoyé par la fonction peut être l'un des suivants :
Teste si l'opérande de chaîne commence par l'argument de préfixe.
Exemple :
"Sample string".startsWith("Sample")
endsWith()
Type
string.(string) -> bool
Description
Teste si l'opérande de chaîne se termine par l'argument de suffixe.
Exemple :
"Sample string".endsWith("string")
origin.clientCertFingerprint()
Type
Origin.() -> string
Description
Renvoie l'empreinte digitale du certificat associé à l'origine. Vous pouvez l'utiliser dans des macros pour tester les certificats d'appareil.
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)
Teste si un champ est disponible. Pour en savoir plus, consultez Sélection de champs. Exemple :
Teste si un prédicat est vrai pour tous les éléments d'une liste e ou 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 renvoie la valeur "false", la macro renvoie la valeur "false", en ignorant les erreurs des autres prédicats. Exemple :
Cette fonction renvoie "false" (faux), car tous les éléments ne sont pas supérieurs à 1 : [1,2,3].all(x, x > 1)
e.exists(x, p)
Identique à la macro all(), mais combine les résultats du prédicat avec l'opérateur or (||). Exemple :
Cette fonction renvoie la valeur "true" car la liste contient 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)
Comme la macro exists(), mais renvoie la valeur "true" uniquement si le prédicat d'un seul élément ou d'une seule clé renvoie la valeur "true", et le reste la valeur "false". Toute autre combinaison de résultats booléens est évaluée comme "false", et toute erreur de prédicat entraîne une erreur de la macro. Exemple :
Cette fonction renvoie "false" (faux), 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.
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.
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.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/04 (UTC)."],[[["\u003cp\u003eThis document outlines four primary objects—\u003ccode\u003eorigin\u003c/code\u003e, \u003ccode\u003erequest.auth\u003c/code\u003e, \u003ccode\u003elevels\u003c/code\u003e, and \u003ccode\u003edevice\u003c/code\u003e—used to construct Common Expression Language (CEL) expressions for Access Context Manager, each containing specific attributes to evaluate access levels.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eorigin\u003c/code\u003e object offers attributes like \u003ccode\u003eip\u003c/code\u003e and \u003ccode\u003eregion_code\u003c/code\u003e to define the request's source, allowing checks like whether a user is within a specific IP range or region, and supports the use of \u003ccode\u003einIpRange\u003c/code\u003e to compare ip addresses.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003erequest.auth\u003c/code\u003e object verifies user authentication, identifying the user's ID (\u003ccode\u003eprincipal\u003c/code\u003e) and the method used for authentication, such as password, push notification, or security key, via \u003ccode\u003eclaims.crd_str\u003c/code\u003e attributes.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003edevice\u003c/code\u003e object provides detailed information about the requesting device, including its encryption status, admin approval, ownership, OS type, and device-specific attributes for third-party vendor data, and the use of security protocols.\u003c/p\u003e\n"],["\u003cp\u003eThe document also includes function and macro details for defining CEL expressions, such as \u003ccode\u003einIpRange\u003c/code\u003e, \u003ccode\u003edevice.versionAtLeast\u003c/code\u003e, \u003ccode\u003ecertificateBindingState\u003c/code\u003e, \u003ccode\u003ehas\u003c/code\u003e, and \u003ccode\u003ee.all\u003c/code\u003e , \u003ccode\u003ee.exists\u003c/code\u003e and \u003ccode\u003ee.exists_one\u003c/code\u003e for constructing complex access control rules.\u003c/p\u003e\n"]]],[],null,["# Custom access level specification\n\nThis page details the objects and attributes that are used to the build the\n[Common Expression Language](https://opensource.google.com/projects/cel) (CEL)\nexpressions for custom access levels. Examples are included.\n\nTo learn more about CEL, see the\n[CEL language definition](https://github.com/google/cel-spec/blob/master/doc/langdef.md).\n| **Note:** For [CEL macros](https://github.com/google/cel-spec/blob/master/doc/langdef.md#macros), custom access levels only support [those documented on this page](#macros).\n\nObjects\n-------\n\nAccess Context Manager provides four objects that contain access level attributes.\n\n### `origin` attributes\n\nThis section lists the attributes supported by the `origin` object.\n\n### `request.auth` attributes\n\nThis section lists the attributes supported by the `request.auth` object.\n\nFor more information about credential strength policy, see [Configuring a credential strength policy](https://cloud.google.com/access-context-manager/docs/create-credential-strength-policy).\n\n### `levels` attribute\n\nThis section lists the attributes supported by the `levels` object.\n\n### `device` attribute\n\nThis section lists the attributes supported by the `device` object. If no device\nassociated to the identifiers in the request is found, all of the following\nattributes will evaluate to an error.\n\nFunctions\n---------\n\nAccess Context Manager provides the following functions for use in the CEL\nexpressions for custom access levels.\n\nMacros for CEL expressions\n--------------------------\n\nYou can use the following macros in the CEL expressions for custom access levels:\n\nExample CEL expressions\n-----------------------\n\nThis section includes examples of CEL expressions used to create custom access\nlevels.\n\n### Example 1\n\n```protobuf\ndevice.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in [\"US\"] || device.is_admin_approved_device)\n```\n\nThis example represents an access level that requires the following conditions\nbe met in order to allow a request:\n\n- The device that the request originated from is encrypted.\n\n- One or more of the following is true:\n\n - The request originated in the United States.\n\n - The device that the request originated from is approved by the\n domain administrator.\n\n### Example 2\n\n```protobuf\n(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\"))\n```\n\nThis example represents an access level that requires the following conditions\nbe met in order to allow a request:\n\n- One of the following is true:\n\n - The device that the request originated from uses a desktop Windows\n operating system and is owned by your organization.\n\n - The device that the request originated from uses a desktop Mac\n operating system, is approved by the domain administrator, and is\n using at least MacOS 10.11.\n\n### Example 3\n\n```protobuf\n(certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE)\n```\n\nThis example represents an access level that requires the following condition\nbe met in order to allow a request:\n\n- The `certificateBindingState` extension function determines that the certificate presented at request time matches one of the device certificates that was registered when the device was enrolled in [endpoint verification](https://support.google.com/a/answer/9007320)."]]