Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En esta página, se detallan los objetos y atributos que se usan a fin de compilar las expresiones de Common Expression Language (CEL) para niveles de acceso personalizados. Se incluyen ejemplos.
Contiene atributos que describen el dispositivo desde el que se originó la solicitud.
Atributos de origin
En esta sección, se enumeran los atributos que admite el objeto origin.
Atributos
ip
Tipo
string
Descripción
La dirección IP desde la que se originó la solicitud Si no se puede determinar la dirección IP, origin.ip se evalúa como un error. Te recomendamos que uses inIpRange para verificar si la dirección IP de origen se encuentra en un rango de direcciones IP específico en lugar de realizar una comparación de cadenas.
Ejemplo:
inIpRange(origin.ip, ["203.0.113.24"])
region_code
Tipo
string
Descripción
El código ISO 3166-1 alpha-2 para el país o la región en la que se originó la solicitud. Si no se puede determinar el código regional, origin.region_code se evalúa como un error.
Ejemplo:
origin.region_code == "GB"
origin.region_code in ["US", "FR", "JP"]
Atributos de request.auth
En esta sección, se enumeran los atributos que admite el objeto request.auth.
Atributos
principal
Tipo
cadena, lista(cadena)
Descripción
El ID único del usuario que emitió la solicitud.
El valor de request.auth.principal debe ser uno o más ID de usuario únicos. Los UUID se pueden obtener mediante la API de Directorio del SDK de Admin.
El valor debe tener el siguiente formato: https://accounts.google.com/UUID
En el ejemplo anterior, UUID es el UUID de un usuario.
Ejemplo:
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
Tipo
boolean
Descripción
Usuario autenticado con una contraseña
Ejemplo:
request.auth.claims.crd_str.pwd == true
claims.crd_str.push
Tipo
boolean
Descripción
Usuario autenticado con una notificación push en el dispositivo móvil.
Ejemplo:
request.auth.claims.crd_str.push == true
claims.crd_str.sms
Tipo
boolean
Descripción
Usuario autenticado mediante un código enviado a SMS o a través de una llamada telefónica.
Ejemplo:
request.auth.claims.crd_str.sms == true
claims.crd_str.swk
Tipo
boolean
Descripción
La 2SV usó una clave de software, como un teléfono, como llave de seguridad.
Ejemplo:
request.auth.claims.crd_str.swk == true
claims.crd_str.hwk
Tipo
boolean
Descripción
La 2SV usó una clave de hardware, como Google Titan Key.
Ejemplo:
request.auth.claims.crd_str.hwk == true
claims.crd_str.otp
Tipo
boolean
Descripción
Usuario autenticado con métodos de contraseña de un solo uso (Autenticador de Google y códigos de respaldo).
Ejemplo:
request.auth.claims.crd_str.otp == true
claims.crd_str.mfa
Tipo
boolean
Descripción
Usuario autenticado con cualquiera de los métodos de esta tabla, excepto pwd.
En esta sección, se enumeran los atributos que admite el objeto levels.
Atributos
level name
Tipo
boolean
Descripción
level name corresponde al nombre de un nivel de acceso existente.
Cuando se usa, también se deben cumplir las condiciones del nivel de acceso especificado, además de los otros requisitos del nivel de acceso personalizado.
Ejemplo:
levels.allow_corp_ips
En el ejemplo anterior, allow_corp_ips es el nombre de un nivel de acceso.
Atributo device
En esta sección, se enumeran los atributos que admite el objeto device. Si no se encuentra ningún dispositivo asociado con los identificadores en la solicitud, todos los siguientes atributos se evaluarán como un error.
Atributos
encryption_status
Tipo
enum
Descripción
Describe el estado de encriptación del dispositivo.
Valores enum:
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;
}
Si el administrador de dominio aprobó el dispositivo.
Ejemplo:
device.is_admin_approved_device == true
is_corp_owned_device
Tipo
boolean
Descripción
Si el dispositivo pertenece a la organización.
Ejemplo:
device.is_corp_owned_device == true
is_secured_with_screenlock
Tipo
boolean
Descripción
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 enum:
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;
}
El objeto vendors se usa para acceder a datos proporcionados por proveedores de administración de extremos y seguridad de terceros. Cada proveedor puede propagar tres atributos compartidos de nivel superior: is_compliant_device, is_managed_device y device_health_score.
Además, los proveedores pueden proporcionar sus propias claves y valores a los que se hace referencia con el atributo data.
Las claves disponibles para el atributo data varían de un proveedor a otro. Asegúrate de que sea coherente cuando compares el valor clave de tu expresión de política. Por ejemplo, si esperas que el valor de la clave sea una string o un booleano, asegúrate de compararlo con una string o un booleano en la expresión de la política correspondiente. Ten en cuenta que cuando el valor es un número entero, debes compararlo con un número doble en la expresión de la política.
Valores enum:
// 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;
}
Está administrado por el navegador, a nivel del navegador o a nivel del perfil, y por la empresa del dominio correcto.
Se considera que un navegador está administrado si las políticas se administran y se envían de forma central, y que el dominio del navegador o perfil administrado coincida con el dominio esperado en el servidor.
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
(Intercambio de tráfico, DeviceType) -> número entero
Descripción
Comprueba si el certificado de cliente asociado con el origen
coincide con el dispositivo e informa el estado.
El estado que muestra la función puede ser uno de los siguientes:
Comprueba si el operando de la cadena comienza con el argumento de prefijo.
Ejemplo:
"Sample string".startsWith("Sample")
endsWith()
Tipo
string.(string) -> booleano
Descripción
Comprueba si el operando de la 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 con el origen. Puedes usar esto 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 en CEL para niveles de acceso personalizados:
Macro
Descripción
has(e.f)
Comprueba si un campo está disponible. Consulta Selección de campos para obtener más detalles. Ejemplo:
Prueba si un predicado es válido para todos los elementos de una lista e o para las claves de un mapa e. Aquí, x es un identificador que se debe usar en p, que se vincula al elemento o a la clave. La macro all() combina los resultados del predicado por elemento con el operador and (&&). Por lo tanto, si algún predicado se evalúa como falso, la macro lo evalúa como falso e ignora los errores de otros predicados. Ejemplo:
Se muestra el valor "false" porque no todos los elementos son mayores que 1: [1,2,3].all(x, x > 1)
e.exists(x, p)
Es similar a la macro all(), pero combina los resultados del predicado con el operador or (||). Ejemplo:
Este resultado es verdadero porque hay al menos un elemento en la lista mayor que 1: [1,2,3].exists(x, x > 1)
Comprueba si el certificado empresarial asociado con el dispositivo coincide con la entidad emisora: 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 verdadero solo si el predicado de exactamente un elemento o clave se evalúa como verdadero y el resto como falso. Cualquier otra combinación de resultados booleanos se evalúa como falso y cualquier error de predicado hace que la macro genere un error. Ejemplo:
Se muestra el valor "false" porque más de un elemento es mayor que 1: [1,2,3].exists_one(x, x > 1)
Expresiones de CEL de ejemplo
En esta sección, se incluyen ejemplos de expresiones CEL que se usan para crear niveles de acceso personalizados.
Ejemplo 1
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ["US"] || device.is_admin_approved_device)
En este ejemplo, se representa un nivel de acceso que requiere que se cumplan las siguientes condiciones para permitir una solicitud:
El dispositivo desde el que se originó la solicitud está encriptado.
Una o más de las siguientes afirmaciones es verdadera:
La solicitud se originó en los Estados Unidos.
El administrador del dominio aprueba el dispositivo desde el que se originó la solicitud.
En este ejemplo, se representa 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 desde el cual se originó la solicitud usa un sistema operativo Windows de escritorio y es propiedad de tu organización.
El dispositivo que originó la solicitud usa una computadora con sistema operativo Mac, el administrador del dominio lo aprueba, y tiene, al menos, MacOS 10.11.
En este ejemplo, se representa 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 que se presenta en el momento de la solicitud coincide con uno de los certificados de dispositivo que se registró cuando el dispositivo se inscribió en la verificación de extremos.