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 evalúa un error. Te recomendamos que uses inIpRange para verificar si la dirección IP de origen está en un rango 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 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 el código regional no se puede determinado, origin.region_code evalúa a 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 string, lista (string)
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 que 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 que 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 hay ningún dispositivo asociados con los identificadores en la solicitud, todos los siguientes atributos se evaluará como un error.

Atributos
encryption_status
Tipo enum
Descripción

Describe el estado de encriptación del dispositivo.

Valores de enumeración

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 de enumeración

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 map<string, Vendor> vendors
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 de enumeración

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

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 pasa el cumplimiento del perfil de CTS.

Ejemplo:

device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Tipo boolean
Descripción

Indica 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

Indica si se detectó jailbreak en el dispositivo iOS.

Ejemplo:

device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
Tipo boolean
Descripción

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.

Los siguientes son los estados de administración de Chrome disponibles:

Estado
MANAGED El cliente administra el navegador o perfil.
UNMANAGED Ningún cliente administra el navegador o el perfil.
MANAGED_BY_OTHER_DOMAIN Otro cliente administra el navegador o el perfil.
PROFILE_MANAGED El cliente administra el perfil.
BROWSER_MANAGED El cliente administra el navegador.

Ejemplo:

device.chrome.management_state in
    [
        ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED,
        ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED,
    ]

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, list(string)) -< boolean
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 (Peer, DeviceType) -> integer
Descripción

Verifica si el certificado de cliente asociado con el origen coincide con el dispositivo y si 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) -> bool
Descripción

Prueba si el operando de cadena comienza con el argumento de prefijo.

Ejemplo:

"Sample string".startsWith("Sample")

endsWith()
Tipo string.(string) -> bool
Descripción

Prueba si el operando de cadena termina con el argumento de sufijo.

Ejemplo:

"Sample string".endsWith("string")

origin.clientCertFingerprint()
Tipo Origin.() -> cadena
Descripción

Muestra la huella digital del certificado asociado con el origen. Puedes usarla 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 los 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 información. Ejemplo:

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

e.all(x, p) Comprueba si un predicado es válido para todos los elementos de una e de lista o las claves de un e de mapa. Aquí, x es un identificador que se usará en p y que se vincula al elemento o la clave. La macro all() combina los resultados de predicado por elemento con el operador and (&&), de modo que, si algún predicado se evalúa como falso, la macro se evalúa como falso y se ignoran los errores de otros predicados. Ejemplo:

El resultado es falso 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:

Esto muestra un valor verdadero porque hay al menos un elemento en la lista mayor que 1:
[1,2,3].exists(x, x > 1)

Verifica si el certificado empresarial asociado con el 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 verdadero solo si el predicado de exactamente un elemento o una clave se evalúa como verdadero y el resto como falso. 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:

El resultado es falso 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.