Especificación del nivel de acceso personalizado

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.

Para obtener más información sobre CEL, consulta la definición del lenguaje de CEL.

Objetos

Access Context Manager proporciona cuatro objetos que contienen atributos de nivel de acceso.

Objetos
origin Contiene atributos que identifican el origen de la solicitud.
request.auth Contiene atributos que identifican aspectos de autenticación y autorización de la solicitud.
levels Contiene atributos para definir la dependencia en otros niveles de acceso.
device 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.

Ejemplo:


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

Para obtener más información sobre la política de seguridad de credenciales, consulta Configura una política de seguridad de credenciales.

Atributo levels

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

Ejemplo:


device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
Tipo boolean
Descripción

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

Ejemplo:


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

vendors
Tipo proveedores de mapas<string, Vendor>;
Descripción

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

Ejemplos:


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
Tipo boolean
Descripción

Indica si el estado del inicio verificado de Android es green.

Ejemplo:


device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
Tipo boolean
Descripción

Indica si el dispositivo cumple con el perfil de CTS.

Ejemplo:


device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Tipo boolean
Descripción

Si el dispositivo tiene habilitada la función Verificar aplicaciones de Google Play Protect

Ejemplo:


device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
Tipo boolean
Descripción

Si se encontraron apps potencialmente dañinas en el dispositivo

Ejemplo:


device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
Tipo boolean
Descripción

Si se detectó que el dispositivo iOS tiene jailbreak.

Ejemplo:


device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
Tipo boolean
Descripción

Indica si la solicitud proviene de un dispositivo con un Sistema operativo Chrome verificado.

Ejemplo:


device.verified_chrome_os == true

chrome.management_state
Tipo string
Descripción

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.

Ejemplo:


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
Tipo string
Descripción

Es el navegador superior a una versión mínima.

Ejemplo:


device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Tipo boolean
Descripción

Es el conector de verificación de URL en tiempo real habilitado.

Ejemplo:


device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
Tipo boolean
Descripción

Es el conector de análisis de carga de archivos habilitado.

Ejemplo:


device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Tipo boolean
Descripción

Es el conector de análisis de descarga de archivos habilitado.

Ejemplo:


device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
Tipo boolean
Descripción

¿Está habilitado el conector de análisis de texto masivo (pegar)?

Ejemplo:


device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
Tipo boolean
Descripción

Es el conector de informes de eventos de seguridad habilitado.

Ejemplo:


device.chrome.is_security_event_analysis_enabled == true | false

Funciones

Access Context Manager proporciona las siguientes funciones para usar en las expresiones CEL en los niveles de acceso personalizados.

Funciones
inIpRange(address, [subnets])
Tipo (string, lista(string)) -< booleano
Descripción

Comprueba si una dirección IP pertenece a una de las subredes determinadas.

Ejemplo:


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

device.versionAtLeast(minVersion)
Tipo DeviceType.(string) -> boolean
Descripción

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:

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

Ejemplo:


certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
Tipo string.(string) -> booleano
Descripción

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:

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

e.all(x, p) 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.

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

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.

Ejemplo 3

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

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.