Especificación del nivel de acceso personalizado

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.

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

Ejemplo:


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.

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 booleano
Descripción

Usuario autenticado con una contraseña

Ejemplo:


request.auth.claims.crd_str.pwd == true

claims.crd_str.push
Tipo booleano
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 booleano
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 booleano
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 booleano
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 booleano
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 booleano
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 booleano
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.

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 booleano
Descripción

Si el administrador de dominio aprobó el dispositivo.

Ejemplo:


device.is_admin_approved_device == true

is_corp_owned_device
Tipo booleano
Descripción

Si el dispositivo pertenece a la organización.

Ejemplo:


device.is_corp_owned_device == true

is_secured_with_screenlock
Tipo booleano
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 mapas<string, Vendor> proveedores;
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

verified_chrome_os
Tipo booleano
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.

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 booleano
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 booleano
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 booleano
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 booleano
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 booleano
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"]) == true

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 (Par de tipo de dispositivo) -> número entero
Descripción

Comprueba si el certificado de cliente asociado con el origen coincide con el dispositivo y, luego, 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

Prueba si el operando de string comienza con el argumento del prefijo.

Ejemplo:


"Sample string".startsWith("Sample")

origin.ip.startsWith("217.43.")

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

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

Ejemplo:


"Sample string".endsWith("string")

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

Muestra la huella digital del certificado asociado con el origen. Puedes usar esto en macros para probar los certificados de dispositivos.

Ejemplo:


device.certificates.exists(cert, cert.is_valid && cert.cert_fingerprint == origin.clientCertFingerprint()) ; Checks if the enterprise certificate associated with the origin matches the device.

Macros para expresiones CEL

Puedes usar las siguientes macros en las expresiones CEL para los niveles de acceso personalizados:

Macro Descripción
has(e.f) Prueba 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 retiene todos los elementos de una lista e o claves de un mapa e. Aquí, x es un identificador que se usará en p, que se vincula al elemento o la clave. La macro all() combina los resultados de predicados por elemento con el operador and (&&), por lo que si cualquier predicado se evalúa como falso, la macro se evalúa como falsa y se ignoran los errores de otros predicados. Ejemplo:

Esto muestra falso porque no todos los elementos son mayores que 1:
[1,2,3].all(x, x > 1) ;

e.exists(x, p) Como la macro all(), pero combina los resultados del predicado con el operador or (||). Ejemplo:

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

Verifica si el certificado empresarial 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) Como la macro exists(), pero se evalúa como verdadera 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 falsa y cualquier error de predicado hace que la macro genere un error. Ejemplo:

Esto muestra 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.