Organízate con las colecciones
Guarda y clasifica el contenido según tus preferencias.
En esta página se detallan los objetos y atributos que se usan para crear expresiones del lenguaje de expresión común (CEL) para los niveles de acceso personalizados. Se incluyen ejemplos.
Contiene atributos que describen el dispositivo del que procede la solicitud.
Atributos de origin
En esta sección se enumeran los atributos admitidos por el objeto origin.
Atributos
ip
Tipo
cadena
Descripción
La dirección IP desde la que se ha originado la solicitud. Si no se puede determinar la dirección IP, origin.ip devuelve un error. Te recomendamos que uses inIpRange para comprobar si la dirección IP de origen se encuentra en un intervalo de direcciones IP específico en lugar de hacer una comparación de cadenas.
Ejemplo:
inIpRange(origin.ip,["203.0.113.24"])
region_code
Tipo
cadena
Descripción
El código ISO 3166-1 alfa-2 del país o la región desde donde se ha enviado la solicitud. Si no se puede determinar el código de región, origin.region_code se evalúa como un error.
En esta sección se enumeran los atributos admitidos por el objeto request.auth.
Atributos
principal
Tipo
cadena, lista(cadena)
Descripción
El ID único del usuario que ha enviado la solicitud.
El valor de request.auth.principal debe ser uno o varios IDs de usuario únicos. Los UUIDs se pueden obtener mediante la API Directory del SDK de administrador.
El valor debe tener el siguiente formato:
https://accounts.google.com/UUID
En esta sección se enumeran los atributos admitidos por el objeto levels.
Atributos
level name
Tipo
booleano
Descripción
level name corresponde al nombre de un nivel de acceso que ya tengas.
Cuando se utilicen, las condiciones del nivel de acceso especificado también se deben cumplir, además de los demás requisitos de tu nivel de acceso personalizado.
Ejemplo:
levels.allow_corp_ips
Donde allow_corp_ips es el nombre de un nivel de acceso.
Atributo device
En esta sección se enumeran los atributos admitidos por el objeto device. Si no se encuentra ningún dispositivo asociado a los identificadores de la solicitud, todos los atributos siguientes se evaluarán como un error.
Atributos
encryption_status
Tipo
enum
Descripción
Describe el estado del cifrado del dispositivo.
Valores de enumeración:
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;}
Si el administrador del dominio ha aprobado el dispositivo.
Ejemplo:
device.is_admin_approved_device==true
is_corp_owned_device
Tipo
booleano
Descripción
Si el dispositivo es propiedad de la organización.
Ejemplo:
device.is_corp_owned_device==true
is_secured_with_screenlock
Tipo
booleano
Descripción
Indica si el dispositivo tiene habilitada la función de bloqueo de pantalla.
Ejemplo:
device.is_secured_with_screenlock==true
os_type
Tipo
enum
Descripción
Identifica el sistema operativo que usa el dispositivo.
Valores de enumeración:
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;}
El objeto vendors se usa para acceder a los datos proporcionados por proveedores externos de seguridad y gestión de endpoints. Cada proveedor puede rellenar tres atributos de nivel superior compartidos: is_compliant_device, is_managed_device y device_health_score.
Además, los proveedores pueden proporcionar sus propias claves y valores, que se referencian mediante el atributo data.
Las claves disponibles para el atributo data varían de un proveedor a otro. Asegúrate de que el valor de la clave sea coherente al comparar la expresión de la política. Por ejemplo, si esperas que el valor de la clave sea una cadena o un valor booleano, asegúrate de compararlo con una cadena o un valor booleano en la expresión de la política. Tenga en cuenta que, si el valor es un número entero, debe compararlo con un número decimal en la expresión de la política.
Para hacer referencia al estado del dispositivo, usa el formato key-acme, donde acme es el ID de cliente de la organización. Puede obtener el ID de cliente de la GET https://www.googleapis.com/admin/directory/v1/customers/my_customerURL. El campo ID de la respuesta contiene el ID de cliente, que empieza por la letra C. Usa la cadena que hay después de la letra C, sin incluirla, para el ID de cliente.C
Valores de enumeración:
// 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;}
El navegador está gestionado a nivel de navegador o de perfil, y la empresa tiene el dominio correcto.
Un navegador se considera gestionado si las políticas se gestionan y se envían de forma centralizada, y si el dominio del navegador o del perfil gestionado coincide con el dominio esperado en el lado del servidor.
A continuación se indican los estados de gestión de Chrome disponibles:
Estado
MANAGED
El navegador o el perfil los gestiona el cliente.
UNMANAGED
Ningún cliente gestiona el navegador o el perfil.
MANAGED_BY_OTHER_DOMAIN
El navegador o el perfil están gestionados por otro cliente.
Comprueba si el sistema operativo del dispositivo es al menos una versión determinada. Te recomendamos que uses esta función con el atributo device.os_type.
Ejemplo:
device.versionAtLeast("10.0")==true
certificateBindingState(origin, device)
Tipo
(Peer, DeviceType) -> integer
Descripción
Comprueba si el certificado de cliente asociado al origen coincide con el dispositivo e informa del estado.
El estado devuelto por la función puede ser uno de los siguientes:
Comprueba si el operando de cadena empieza por el argumento de prefijo.
Ejemplo:
"Sample string".startsWith("Sample")
endsWith()
Tipo
string.(string) -> booleano
Descripción
Comprueba si el operando de cadena termina con el argumento de sufijo.
Ejemplo:
"Sample string".endsWith("string")
origin.clientCertFingerprint()
Tipo
Origin.() -> string
Descripción
Devuelve la huella digital del certificado asociado al origen. Puedes usarlo en macros para probar certificados de dispositivos.
Ejemplo:
// 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 para expresiones CEL
Puedes usar las siguientes macros en las expresiones CEL de los niveles de acceso personalizados:
Macro
Descripción
has(e.f)
Comprueba si un campo está disponible. Para obtener más información, consulta Selección de campos. Ejemplo:
Comprueba si un predicado se cumple para todos los elementos de una lista e o las claves de un mapa e. Aquí, x es un identificador que se usará en p, que se vincula al elemento o a la clave. La macro all() combina resultados de predicados por elemento con el operador and (&&), por lo que, si algún predicado se evalúa como falso, la macro se evalúa como falsa y se ignoran los errores de otros predicados. Ejemplo:
Devuelve false porque no todos los elementos son mayores que 1: [1,2,3].all(x, x > 1)
e.exists(x, p)
Al igual que la macro all(), pero combina los resultados del predicado con el operador or (||). Ejemplo:
Devuelve true porque hay al menos un elemento en la lista que es mayor que 1: [1,2,3].exists(x, x > 1)
Comprueba si el certificado de empresa asociado al dispositivo coincide con el emisor: 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)
Es similar a la macro exists(), pero se evalúa como true solo si el predicado de exactamente un elemento o clave se evalúa como true y el resto como false. Cualquier otra combinación de resultados booleanos se evalúa como falsa y cualquier error de predicado provoca que la macro genere un error. Ejemplo:
Esta expresión devuelve "false" porque más de un elemento es mayor que 1: [1,2,3].exists_one(x, x > 1)
Ejemplos de expresiones CEL
En esta sección se incluyen ejemplos de expresiones CEL que se usan para crear niveles de acceso personalizados.
En este ejemplo se muestra un nivel de acceso que requiere que se cumplan las siguientes condiciones para permitir una solicitud:
Se cumple una de las siguientes condiciones:
El dispositivo del que procede la solicitud usa un sistema operativo Windows de escritorio y es propiedad de tu organización.
El dispositivo desde el que se originó la solicitud usa un sistema operativo Mac de escritorio, el administrador del dominio lo ha aprobado y usa al menos macOS 10.11.
En este ejemplo se muestra un nivel de acceso que requiere que se cumpla la siguiente condición para permitir una solicitud:
La función de extensión certificateBindingState determina que el certificado presentado en el momento de la solicitud coincide con uno de los certificados del dispositivo que se registró cuando el dispositivo se inscribió en la verificación de endpoints.
[[["Es fácil de entender","easyToUnderstand","thumb-up"],["Me ofreció una solución al problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Es difícil de entender","hardToUnderstand","thumb-down"],["La información o el código de muestra no son correctos","incorrectInformationOrSampleCode","thumb-down"],["Me faltan las muestras o la información que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-08-21 (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)."]]