Specifica del livello di accesso personalizzato

Questa pagina descrive in dettaglio gli oggetti e gli attributi utilizzati per creare le espressioni Common Expression Language (CEL) per i livelli di accesso personalizzati. Sono inclusi alcuni esempi.

Per saperne di più su CEL, consulta la definizione del linguaggio CEL.

Oggetti

Gestore contesto accesso fornisce quattro oggetti che contengono attributi del livello di accesso.

Oggetti
origin Contiene attributi che identificano l'origine della richiesta.
request.auth Contiene attributi che identificano gli aspetti di autenticazione e autorizzazione della richiesta.
request.time Contiene attributi basati sul tempo che puoi utilizzare per limitare l'accesso alle risorse in base all'ora del giorno, al giorno della settimana o a un intervallo di date specifico.
levels Contiene attributi per definire la dipendenza da altri livelli di accesso.
device Contiene gli attributi che descrivono il dispositivo da cui ha avuto origine la richiesta.
api Contiene attributi relativi alla chiamata API stessa, distinti da utente, dispositivo o rete.

Attributi origin

Questa sezione elenca gli attributi supportati dall'oggetto origin.

Attributi
ip
Tipo string
Descrizione

L'indirizzo IP da cui ha avuto origine la richiesta. Se non è possibile determinare l'indirizzo IP, origin.ip restituisce un errore. Ti consigliamo di utilizzare inIpRange per verificare se l'indirizzo IP di origine rientra in un intervallo di indirizzi IP specifico, anziché eseguire un confronto di stringhe.

Esempio:

inIpRange(origin.ip, ["203.0.113.24"])

region_code
Tipo string
Descrizione

Il codice ISO 3166-1 alpha-2 per il paese o la regione da cui ha avuto origine la richiesta. Se non è possibile determinare il codice regione, origin.region_code restituisce un errore.

Esempio:

origin.region_code == "GB"
origin.region_code in ["US", "FR", "JP"]

Attributi request.auth

Questa sezione elenca gli attributi supportati dall'oggetto request.auth.

Attributi
principal
Tipo string, list(string)
Descrizione

L'ID univoco dell'utente che ha inviato la richiesta.

Il valore di request.auth.principal deve essere uno o più ID utente univoci. Gli UUID possono essere ottenuti utilizzando l'API Directory dell'SDK Admin.

Il valore deve essere nel seguente formato: https://accounts.google.com/UUID

Dove UUID è l'UUID di un utente.

Esempio:

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
Descrizione

L'utente è stato autenticato con una password.

Esempio:

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

claims.crd_str.push
Tipo boolean
Descrizione

Utente autenticato con una notifica push sul dispositivo mobile.

Esempio:

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

claims.crd_str.sms
Tipo boolean
Descrizione

Utente autenticato utilizzando un codice inviato tramite SMS o chiamata telefonica.

Esempio:

request.auth.claims.crd_str.sms == true

claims.crd_str.swk
Tipo boolean
Descrizione

La V2P ha utilizzato un token di sicurezza software, ad esempio uno smartphone, come token di sicurezza.

Esempio:

request.auth.claims.crd_str.swk == true

claims.crd_str.hwk
Tipo boolean
Descrizione

La V2P utilizzava un token di sicurezza fisico, ad esempio Google Titan Key.

Esempio:

request.auth.claims.crd_str.hwk == true

claims.crd_str.otp
Tipo boolean
Descrizione

Utente autenticato con metodi di password monouso (Google Authenticator e codici di backup).

Esempio:

request.auth.claims.crd_str.otp == true

claims.crd_str.mfa
Tipo boolean
Descrizione

Utente autenticato con uno dei metodi indicati in questa tabella, ad eccezione di pwd.

Esempio:

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

request.auth.oauth.client_id
Tipo OAuthClientID
Descrizione

L'ID client dell'agente AI per consentire o negare l'accesso agli strumenti MCP.

Esempio:

request.auth.oauth.client_id == OAuthClientID

Per saperne di più sulla policy di robustezza delle credenziali, consulta Configurazione di una policy di robustezza delle credenziali.

Attributi request.time

In questa sezione sono elencati gli attributi supportati dall'oggetto request.time.

Attributi
getFullYear()
Tipo string
Descrizione

Recupera l'anno (ad esempio: 2023).

Esempio:

request.time.getFullYear("America/Los_Angeles") == 2024

getMonth()
Tipo string
Descrizione

Recupera il mese, da 0 (gennaio) a 11 (dicembre).

Esempio:

request.time.getMonth("America/Los_Angeles") == 0 (gennaio)

getDate()
Tipo string
Descrizione

Recupera il giorno del mese, da 1 a 31.

Esempio:

request.time.getDate("America/Los_Angeles") == 1

getDayOfMonth()
Tipo string
Descrizione

Recupera il giorno del mese, da 0 a 30 (0 è il primo giorno).

Esempio:

request.time.getDayOfMonth("America/Los_Angeles") == 0 (1° del mese)

getDayOfWeek()
Tipo string
Descrizione

Recupera il giorno della settimana, da 0 (domenica) a 6 (sabato).

Esempio:

request.time.getDayOfWeek("America/Los_Angeles") == 1 (lunedì)

getDayOfYear()
Tipo string
Descrizione

Recupera il giorno dell'anno, da 0 a 365.

Esempio:

request.time.getDayOfYear("America/Los_Angeles") == 0 (1° gennaio)

getHours()
Tipo string
Descrizione

Recupera l'ora del giorno, da 0 (mezzanotte) a 23 (23:00).

Esempio:

request.time.getHours("America/Los_Angeles") == 19 (19:00)

getMinutes()
Tipo string
Descrizione

Recupera il minuto dell'ora, da 0 a 59.

Esempio:

request.time.getMinutes("America/Los_Angeles") == 30

Attributo levels

In questa sezione sono elencati gli attributi supportati dall'oggetto levels.

Attributi
LEVEL_NAME
Tipo boolean
Descrizione

levels.LEVEL_NAME corrisponde al nome di un livello di accesso esistente.

Se utilizzato, le condizioni del livello di accesso specificato devono essere soddisfatte anche in aggiunta agli altri requisiti del livello di accesso personalizzato.

Esempio:

levels.allow_corp_ips

Dove allow_corp_ips è il nome di un livello di accesso.

Attributo device

In questa sezione sono elencati gli attributi supportati dall'oggetto device. Se non viene trovato alcun dispositivo associato agli identificatori nella richiesta, tutti i seguenti attributi genereranno un errore.

Attributi
encryption_status
Tipo enum
Descrizione

Descrive lo stato della crittografia del dispositivo.

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

Esempio:

device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
Tipo boolean
Descrizione

Indica se il dispositivo è stato approvato dall'amministratore di dominio.

Esempio:

device.is_admin_approved_device == true

is_corp_owned_device
Tipo boolean
Descrizione

Se il dispositivo è di proprietà dell'organizzazione.

Esempio:

device.is_corp_owned_device == true

is_secured_with_screenlock
Tipo boolean
Descrizione

Indica se sul dispositivo è attiva la funzione di blocco schermo.

Esempio:

device.is_secured_with_screenlock == true

os_type
Tipo enum
Descrizione

Identifica il sistema operativo utilizzato dal dispositivo.

Valori 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;
  // A Googlebook operating system.
  GOOGLEBOOK_OS == 8;
}

Esempio:

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

vendors
Tipo map<string, Vendor> vendors;
Descrizione

L'oggetto vendors viene utilizzato per accedere ai dati forniti da fornitori di terze parti di sicurezza e gestione degli endpoint. Ogni fornitore può compilare tre attributi condivisi di primo livello: is_compliant_device, is_managed_device e device_health_score.

Inoltre, i fornitori possono fornire le proprie chiavi e i propri valori, a cui viene fatto riferimento utilizzando l'attributo data. Le chiavi disponibili per l'attributo data variano da fornitore a fornitore. Assicurati di mantenere la coerenza quando confronti il valore della chiave nell'espressione dei criteri. Ad esempio, se prevedi che il valore della chiave sia una stringa o un valore booleano, assicurati di confrontarlo con una stringa o un valore booleano nell'espressione della policy corrispondente. Tieni presente che quando il valore è un numero intero, devi confrontarlo con un numero decimale nell'espressione della policy.

Per fare riferimento allo stato del dispositivo, utilizza il formato key-acme, dove acme è l'ID cliente dell'organizzazione. Puoi recuperare l'ID cliente dall'URL di GET https://www.googleapis.com/admin/directory/v1/customers/my_customer. Il campo ID nella risposta contiene l'ID cliente che inizia con la lettera C. Utilizza la stringa dopo la lettera C, esclusa la lettera C, per l'ID cliente.

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

Esempi:

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
Descrizione

Indica se lo stato dell'avvio verificato di Android è green.

Esempio:

device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
Tipo boolean
Descrizione

Se il dispositivo supera i controlli di conformità profilo CTS.

Esempio:

device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Tipo boolean
Descrizione

Se sul dispositivo è attiva la funzionalità Verifica app di Google Play Protect.

Esempio:

device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
Tipo boolean
Descrizione

Se sono state trovate app potenzialmente dannose sul dispositivo.

Esempio:

device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
Tipo boolean
Descrizione

Indica se è stato rilevato il jailbreak del dispositivo iOS.

Esempio:

device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
Tipo boolean
Descrizione

Se la richiesta proviene da un dispositivo con un ChromeOS verificato.

Esempio:

device.verified_chrome_os == true

chrome.management_state
Tipo string
Descrizione

Indica se il browser è gestito, a livello di browser o di profilo, e dall'azienda nel dominio corretto.

Un browser è considerato gestito se i criteri vengono gestiti e applicati centralmente e se il dominio del browser o del profilo gestito corrisponde al dominio previsto sul lato server.

Di seguito sono riportati gli stati di gestione di Chrome disponibili:

Stato
UNMANAGED Il browser o il profilo non è gestito da alcun cliente.
MANAGED_BY_OTHER_DOMAIN Il browser o il profilo è gestito da un altro cliente.
PROFILE_MANAGED Il profilo è gestito dal cliente.
BROWSER_MANAGED Il browser è gestito dal cliente.

Esempio:

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

chrome.versionAtLeast
Tipo string
Descrizione

Se il browser è superiore a una determinata versione minima.

Esempio:

device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Tipo boolean
Descrizione

Indica se il connettore di verifica degli URL in tempo reale è attivato.

Esempio:

device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
Tipo boolean
Descrizione

Indica se il connettore di analisi del caricamento di file è abilitato.

Esempio:

device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Tipo boolean
Descrizione

Indica se il connettore di analisi del download di file è abilitato.

Esempio:

device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
Tipo boolean
Descrizione

Indica se il connettore di analisi del testo collettivo (incolla) è abilitato.

Esempio:

device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
Tipo boolean
Descrizione

Indica se il connettore di reporting degli eventi di sicurezza è abilitato.

Esempio:

device.chrome.is_security_event_analysis_enabled == true | false

device.certificates.exists
Tipo boolean
Descrizione

Un elenco dei certificati aziendali associati al dispositivo. Questo attributo viene utilizzato con le macro per eseguire l'iterazione dei certificati e controllarne le proprietà, ad esempio la validità.

Esempio:

// Checks if the device has at least one valid enterprise certificate.
device.certificates.exists(cert, cert.is_valid == true)

Attributi api

In questa sezione sono elencati gli attributi supportati dall'oggetto api.

Attributi
mcp.is_mcp
Tipo boolean
Descrizione

Indica se la chiamata API viene effettuata da un servizio MCP.

Esempio:

api.mcp.is_mcp == true

mcp.tool.is_read_only
Tipo boolean
Descrizione

Indica se la chiamata dello strumento MCP è in modalità di sola lettura.

Esempio:

api.mcp.tool.is_read_only == true

Funzioni

Gestore contesto accesso fornisce le seguenti funzioni da utilizzare nelle espressioni CEL per i livelli di accesso personalizzati.

Funzioni
inIpRange(address, [SUBNETS])
Tipo (string, list(string)) -> boolean
Descrizione

Controlla se un indirizzo IP appartiene a una delle subnet specificate.

Esempio:

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
Descrizione

Verifica se il sistema operativo del dispositivo è almeno una determinata versione. Ti consigliamo di utilizzare questa funzione con l'attributo device.os_type.

Esempio:

device.versionAtLeast("10.0") == true

certificateBindingState(origin, device)
Tipo (Peer, DeviceType) -> integer
Descrizione

Controlla se il certificato client associato all'origine corrisponde al dispositivo e segnala lo stato.

Lo stato restituito dalla funzione può essere uno dei seguenti:

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

Esempio:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
Tipo string.(string) -> bool
Descrizione

Verifica se l'operando della stringa inizia con l'argomento del prefisso.

Esempio:

"Sample string".startsWith("Sample")

endsWith()
Tipo string.(string) -> bool
Descrizione

Verifica se l'operando stringa termina con l'argomento suffisso.

Esempio:

"Sample string".endsWith("string")

origin.clientCertFingerprint()
Tipo Origin.() -> string
Descrizione

Restituisce l'impronta del certificato associato all'origine. Puoi utilizzarlo nelle macro per testare i certificati dei dispositivi.

Esempio:

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

originatesFromProjects(origin, [PROJECT_LIST])
Tipo (Origin, list(string)) -> boolean
Descrizione

Verifica se la richiesta proviene da un progetto Google Cloud specifico o dai relativi progetti tenant.

Vincoli: sono supportati solo i numeri di progetto (ad esempio "projects/1234567890"). Gli ID progetto alfanumerici non sono consentiti.

Esempio:

Per consentire le richieste solo dal progetto projects/1234567890 o projects/9876543210:

originatesFromProjects(origin, ["projects/1234567890", "projects/9876543210"])

request.auth.matchesNetworkProject(origin)
Tipo Auth.(Origin) -> boolean
Descrizione

Controlla se la richiesta proviene da una rete associata allo stesso progetto Google Cloud o a un progetto tenant associato, che possiede l'identità del workload chiamante. Un'identità del workload è un'identità non umana che appartiene a un progetto Google Cloud , ad esempio un account di servizio, un'identità di federazione delle identità per i workload, un'identità del workload gestita o un'identità dell'agente.

Esempio:

Per consentire le richieste solo quando il progetto di rete di origine (o i progetti tenant associati) corrisponde al progetto my-project, che possiede l'identità del workload chiamante:

request.auth.matchesNetworkProject(origin)

Macro per le espressioni CEL

Puoi utilizzare le seguenti macro nelle espressioni CEL per i livelli di accesso personalizzati:

Macro Descrizione
has(e.f) Verifica se un campo è disponibile. Per ulteriori dettagli, consulta Selezione dei campi. Esempio:

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

e.all(x, p) Verifica se un predicato è valido per tutti gli elementi di un elenco e o per le chiavi di una mappa e. In questo caso, x è un identificatore da utilizzare in p che si associa all'elemento o alla chiave. La macro all() combina i risultati del predicato per ciascun elemento con l'operatore and (&&), quindi se un predicato restituisce false, la macro restituisce false, ignorando eventuali errori di altri predicati. Esempio:

Restituisce false perché non tutti gli elementi sono maggiori di 1:
[1,2,3].all(x, x > 1)

e.exists(x, p) Come la macro all(), ma combina i risultati del predicato con l'operatore or (||). Esempio:

Restituisce true perché nell'elenco è presente almeno un elemento maggiore di 1:
[1,2,3].exists(x, x > 1)

Controlla se il certificato aziendale associato al dispositivo corrisponde all'autorità di certificazione:
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) Come la macro exists(), ma restituisce true solo se il predicato di un solo elemento o chiave restituisce true e il resto false. Qualsiasi altra combinazione di risultati booleani restituisce false e qualsiasi errore del predicato fa sì che la macro generi un errore. Esempio:

Questa restituisce false perché più di un elemento è maggiore di 1:
[1,2,3].exists_one(x, x > 1)

Espressioni CEL di esempio

Questa sezione include esempi di espressioni CEL utilizzate per creare livelli di accesso personalizzati.

Esempio 1

device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ["US"] || device.is_admin_approved_device)

Questo esempio rappresenta un livello di accesso che richiede la conformità alle seguenti condizioni per consentire una richiesta:

  • Il dispositivo da cui ha avuto origine la richiesta è criptato.

  • Una o più delle seguenti condizioni è vera:

    • La richiesta ha avuto origine negli Stati Uniti.

    • Il dispositivo da cui ha avuto origine la richiesta è approvato dall'amministratore di dominio.

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

Questo esempio rappresenta un livello di accesso che richiede la conformità alle seguenti condizioni per consentire una richiesta:

  • Una delle seguenti condizioni è vera:

    • Il dispositivo da cui ha avuto origine la richiesta utilizza un sistema operativo Windows per computer ed è di proprietà della tua organizzazione.

    • Il dispositivo da cui ha avuto origine la richiesta utilizza un sistema operativo Mac desktop, è approvato dall'amministratore di dominio e utilizza almeno macOS 10.11.

Esempio 3

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

Questo esempio rappresenta un livello di accesso che richiede la conformità alla seguente condizione per consentire una richiesta:

  • La funzione di estensione certificateBindingState determina che il certificato presentato al momento della richiesta corrisponde a uno dei certificati del dispositivo registrati quando il dispositivo è stato registrato in Verifica degli endpoint.