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 de lenguaje 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.
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 del país o región en el 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 compatibles con 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"]

Atributo levels

En esta sección, se enumeran los atributos compatibles con 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 compatibles con 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

Si el administrador del dominio aprobó el dispositivo.

Ejemplo:


device.is_admin_approved_device == true

is_corp_owned_device
Tipo boolean
Descripción

Indica 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 que proporcionan los proveedores de administración de extremos y seguridad de terceros. 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 con el atributo data. Las claves disponibles para el atributo data varían de un proveedor a otro.

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

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

Funciones

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

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

Verifica si una dirección IP pertenece a una de las subredes dadas.

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

Ejemplos de expresiones CEL

En esta sección, se incluyen ejemplos de expresiones CEL usadas 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 del 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 de donde se originó la solicitud es 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"))

Este ejemplo representa un nivel de acceso que requiere que se cumplan las siguientes condiciones para permitir una solicitud:

  • Debe cumplirse 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 desde el que se originó la solicitud usa un sistema operativo Mac de escritorio, está aprobado por el administrador del dominio y usa 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 presentado en el momento de la solicitud coincide con uno de los certificados de dispositivo que se registró cuando se registró el dispositivo en la verificación del extremo.