Especificación del nivel de acceso personalizado

En esta página, se detallan los objetos y atributos que se usan para compilar las expresiones de Common Expression Language (CEL) para los niveles de acceso personalizados. Se incluyen ejemplos.

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

Esta página contiene las siguientes secciones:

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 una 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 admitidos por 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 admitidos por 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 Directory del SDK de Admin.

El valor debe tener el siguiente formato: accounts.google.com/UUID

En el que UUID es el UUID de un usuario.

Ejemplo:


request.auth.principal == "accounts.google.com/1134924314572461055"
request.auth.principal in ["accounts.google.com/1134924314572461055", "accounts.google.com/3134824314572461115"]

claims.crd_str.pwd
Tipo boolean
Descripción

Usuario autenticado con 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 al dispositivo móvil

Ejemplo:


request.auth.claims.crd_str.push == true

claims.crd_str.sms
Tipo boolean
Descripción

Usuario autenticado con 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 verificación en dos pasos usaba una llave 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 utilizaba 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 (Google Authenticator 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 calidad de las credenciales, consulta Configura una política de calidad de las credenciales.

Atributo levels

En esta sección, se enumeran los atributos admitidos por 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 de tu 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 admitidos por 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 boolean
Descripción

Indica si el administrador del dominio aprobó el dispositivo.

Ejemplo:


device.is_admin_approved_device == true

is_corp_owned_device
Tipo boolean
Descripción

Si el dispositivo es propiedad de la organización

Ejemplo:


device.is_corp_owned_device == true

is_secured_with_screenlock
Tipo boolean
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


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 los datos proporcionados por proveedores externos de seguridad y administración de extremos. Cada proveedor puede propagar 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 a los que se hace referencia mediante el atributo data. Las claves disponibles para el atributo data varían de proveedor a proveedor. Asegúrate de ser coherente cuando compares el valor clave de la expresión de política. Por ejemplo, si esperas que el valor de la clave sea una string o un valor booleano, asegúrate de compararlo con una string o un valor booleano en la expresión de 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.

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

Se administra el navegador, a nivel del perfil o a nivel del perfil, y lo hace la empresa con el dominio correcto.

Se considera que un navegador está administrado si las políticas se administran y se envían de manera centralizada, y que el dominio del navegador o perfil administrado coincide 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

¿El navegador tiene una versión mínima determinada?

Ejemplo:


device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Tipo boolean
Descripción

¿Está habilitado el conector de verificación de URL en tiempo real?

Ejemplo:


device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
Tipo boolean
Descripción

¿Está habilitado el conector de análisis de carga de archivos?

Ejemplo:


device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Tipo boolean
Descripción

¿Está habilitado el conector de análisis de descarga de archivos?

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

¿Está habilitado el conector de informes de eventos de seguridad?

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"]) == 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 (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_MATCHES_EXISTING_DEVICE
  • CertificateBindingState.CERT_STATE_UNKNOWN

Ejemplo:


certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

Expresiones 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 dispositivo desde el que se originó la solicitud está aprobado por el administrador del dominio.

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 se inscribió el dispositivo en la verificación de extremos.