Especificação do nível de acesso personalizado

Esta página detalha os objetos e os atributos que são usados para criar as expressões do Idioma de expressão comum (IEC) para níveis de acesso personalizados. Exemplos incluídos.

Para saber mais sobre o IEC, consulte a definição do idioma IEC.

Objetos

O Gestor de acesso sensível ao contexto fornece quatro objetos que contêm atributos de nível de acesso.

Objetos
origin Contém atributos que identificam a origem do pedido.
request.auth Contém atributos que identificam aspetos de autenticação e autorização do pedido.
levels Contém atributos para definir a dependência de outros níveis de acesso.
device Contém atributos que descrevem o dispositivo de origem do pedido.

Atributos de origin

Esta secção apresenta os atributos suportados pelo objeto origin.

Atributos
ip
Tipo de string
Descrição

O endereço IP de origem do pedido. Se não for possível determinar o endereço IP, origin.ip é avaliado como um erro. Recomendamos que use inIpRange para verificar se o endereço IP de origem está num intervalo de endereços IP específico em vez de fazer uma comparação de strings.

Exemplo:

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

region_code
Tipo de string
Descrição

O código ISO 3166-1 alfa-2 para o país ou a região de origem do pedido. Se não for possível determinar o código de região, origin.region_code é avaliado como um erro.

Exemplo:

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

Atributos de request.auth

Esta secção apresenta os atributos suportados pelo objeto request.auth.

Atributos
principal
Tipo string, list(string)
Descrição

O ID exclusivo do utilizador que enviou o pedido.

O valor de request.auth.principal tem de ser um ou mais IDs dos utilizadores exclusivos. Os UUIDs podem ser obtidos através da API Directory do SDK de administrador.

O valor tem de estar no seguinte formato: https://accounts.google.com/UUID

Onde UUID é o UUID de um utilizador.

Exemplo:

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
Descrição

O utilizador foi autenticado com uma palavra-passe.

Exemplo:

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

claims.crd_str.push
Tipo booleano
Descrição

O utilizador foi autenticado com uma notificação push para o dispositivo móvel.

Exemplo:

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

claims.crd_str.sms
Tipo booleano
Descrição

O utilizador foi autenticado através de um código enviado por SMS ou através de uma chamada telefónica.

Exemplo:

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

claims.crd_str.swk
Tipo booleano
Descrição

A 2SV usou uma chave de software, como um telemóvel, como chave de segurança.

Exemplo:

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

claims.crd_str.hwk
Tipo booleano
Descrição

A 2SV usou uma chave de hardware, como a chave Titan da Google.

Exemplo:

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

claims.crd_str.otp
Tipo booleano
Descrição

O utilizador foi autenticado com métodos de palavra-passe de utilização única (Google Authenticator e códigos de segurança).

Exemplo:

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

claims.crd_str.mfa
Tipo booleano
Descrição

O utilizador foi autenticado com qualquer um dos métodos nesta tabela, exceto pwd.

Exemplo:

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

Para mais informações sobre a política de robustez das credenciais, consulte o artigo Configurar uma política de robustez das credenciais.

Atributo levels

Esta secção apresenta os atributos suportados pelo objeto levels.

Atributos
level name
Tipo booleano
Descrição

level name corresponde ao nome de um nível de acesso existente.

Quando usado, as condições do nível de acesso especificado também têm de ser cumpridas, além dos outros requisitos do seu nível de acesso personalizado.

Exemplo:

levels.allow_corp_ips

Em que allow_corp_ips é o nome de um nível de acesso.

Atributo device

Esta secção apresenta os atributos suportados pelo objeto device. Se não for encontrado nenhum dispositivo associado aos identificadores no pedido, todos os seguintes atributos são avaliados como um erro.

Atributos
encryption_status
Tipo enum
Descrição

Descreve o estado de encriptação do dispositivo.

Valores de enumeração:

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

Exemplo:

device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
Tipo booleano
Descrição

Indica se o dispositivo foi aprovado pelo administrador do domínio.

Exemplo:

device.is_admin_approved_device == true

is_corp_owned_device
Tipo booleano
Descrição

Indica se o dispositivo é propriedade da organização.

Exemplo:

device.is_corp_owned_device == true

is_secured_with_screenlock
Tipo booleano
Descrição

Se o dispositivo tem a função de bloqueio de ecrã ativada.

Exemplo:

device.is_secured_with_screenlock == true

os_type
Tipo enum
Descrição

Identifica o sistema operativo que o dispositivo está a usar.

Valores de enumeração:

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

Exemplo:

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

vendors
Tipo map<string, Vendor> vendors;
Descrição

O objeto vendors é usado para aceder aos dados fornecidos por fornecedores de segurança e gestão de pontos finais externos. Cada fornecedor pode preencher três atributos partilhados de nível superior: is_compliant_device, is_managed_device e device_health_score.

Além disso, os fornecedores podem fornecer as suas próprias chaves e valores que são referenciados através do atributo data. As chaves disponíveis para o atributo data variam consoante o fornecedor. Certifique-se de que é consistente quando compara o valor da chave na expressão da política. Por exemplo, se esperar que a chave-valor seja uma string ou um valor booleano, certifique-se de que a compara com uma string ou um valor booleano na expressão da política, respetivamente. Tenha em atenção que, quando o valor é um número inteiro, deve compará-lo com um número duplo na expressão da política.

Para fazer referência ao estado do dispositivo, use o formato key-acme, em que acme é o ID de cliente da organização. Pode obter o ID de cliente a partir do GET https://www.googleapis.com/admin/directory/v1/customers/my_customerURL. O campo ID na resposta contém o ID de cliente que começa com a letra C. Use a string após a letra C, excluindo a letra C, para o ID de cliente.

Valores de enumeração:

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

Exemplos:

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 booleano
Descrição

Se o estado do arranque validado do Android é green.

Exemplo:

device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
Tipo booleano
Descrição

Indica se o dispositivo está em conformidade com o perfil do CTS.

Exemplo:

device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Tipo booleano
Descrição

Se o dispositivo tem a funcionalidade Validar apps do Google Play Protect ativada.

Exemplo:

device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
Tipo booleano
Descrição

Se foram encontradas apps potencialmente prejudiciais no dispositivo.

Exemplo:

device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
Tipo booleano
Descrição

Indica se o dispositivo iOS foi considerado desbloqueado por jailbreak.

Exemplo:

device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
Tipo booleano
Descrição

Se o pedido é proveniente de um dispositivo com um Chrome OS validado.

Exemplo:

device.verified_chrome_os == true

chrome.management_state
Tipo de string
Descrição

O navegador é gerido ao nível do navegador ou do perfil e pela empresa no domínio correto.

Um navegador é considerado gerido se as políticas forem geridas e enviadas centralmente, e se o domínio do navegador ou do perfil gerido corresponder ao domínio esperado no lado do servidor.

Seguem-se os estados de gestão do Chrome disponíveis:

Estado
MANAGED O navegador ou o perfil é gerido pelo cliente.
UNMANAGED O navegador ou o perfil não é gerido por nenhum cliente.
MANAGED_BY_OTHER_DOMAIN O navegador ou o perfil é gerido por outro cliente.
PROFILE_MANAGED O perfil é gerido pelo cliente.
BROWSER_MANAGED O navegador é gerido pelo cliente.

Exemplo:

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

chrome.versionAtLeast
Tipo de string
Descrição

O navegador está acima de uma determinada versão mínima.

Exemplo:

device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Tipo booleano
Descrição

O conetor de verificação de URLs em tempo real está ativado.

Exemplo:

device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
Tipo booleano
Descrição

O conetor de análise de carregamento de ficheiros está ativado.

Exemplo:

device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Tipo booleano
Descrição

O conetor de análise de transferências de ficheiros está ativado.

Exemplo:

device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
Tipo booleano
Descrição

O conetor de análise de texto em massa (colar) está ativado.

Exemplo:

device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
Tipo booleano
Descrição

O conetor de relatórios de eventos de segurança está ativado.

Exemplo:

device.chrome.is_security_event_analysis_enabled == true | false

Funções

O Gestor de acesso sensível ao contexto oferece as seguintes funções para utilização nas expressões CEL para níveis de acesso personalizados.

Funções
inIpRange(address, [subnets])
Tipo (string, list(string)) -< boolean
Descrição

Verifica se um endereço IP pertence a uma das sub-redes indicadas.

Exemplo:

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
Descrição

Verifica se o sistema operativo do dispositivo tem, pelo menos, uma determinada versão. Recomendamos que use esta função com o atributo device.os_type.

Exemplo:

device.versionAtLeast("10.0") == true

certificateBindingState(origin, device)
Tipo (Peer, DeviceType) -> integer
Descrição

Verifica se o certificado de cliente associado à origem corresponde ao dispositivo e comunica o estado.

O estado devolvido pela função pode ser um dos seguintes:

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

Exemplo:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
Tipo string.(string) -> bool
Descrição

Testa se o operando de string começa com o argumento de prefixo.

Exemplo:

"Sample string".startsWith("Sample")

endsWith()
Tipo string.(string) -> bool
Descrição

Testa se o operando de string termina com o argumento de sufixo.

Exemplo:

"Sample string".endsWith("string")

origin.clientCertFingerprint()
Tipo Origin.() -> string
Descrição

Devolve a impressão digital do certificado associado à origem. Pode usar isto em macros para testar certificados de dispositivos.

Exemplo:

// 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 expressões de IEC

Pode usar as seguintes macros nas expressões do IEC para níveis de acesso personalizados:

Macro Descrição
has(e.f) Testa se um campo está disponível. Consulte a secção Seleção de campos para ver mais detalhes. Exemplo:

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

e.all(x, p) Testa se um predicado é válido para todos os elementos de uma lista e ou chaves de um mapa e. Aqui, x é um identificador a ser usado em p, que está associado ao elemento ou à chave. A macro all() combina os resultados dos predicados por elemento com o operador and (&&), pelo que, se qualquer predicado for avaliado como falso, a macro é avaliada como falsa, ignorando quaisquer erros de outros predicados. Exemplo:

Isto devolve falso porque nem todos os elementos são superiores a 1:
[1,2,3].all(x, x > 1)

e.exists(x, p) Semelhante à macro all(), mas combina os resultados do predicado com o operador or (||). Exemplo:

Isto devolve o valor verdadeiro porque existe, pelo menos, um elemento na lista superior a 1:
[1,2,3].exists(x, x > 1)

Verifica se o certificado empresarial associado ao dispositivo corresponde ao emissor:
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) Semelhante à macro exists(), mas é avaliada como verdadeira apenas se o predicado de exatamente um elemento ou chave for avaliado como verdadeiro e o resto como falso. Qualquer outra combinação de resultados booleanos é avaliada como falsa, e qualquer erro de predicado faz com que a macro apresente um erro. Exemplo:

Isto devolve falso porque mais do que um elemento é superior a 1:
[1,2,3].exists_one(x, x > 1)

Exemplos de expressões de IEC

Esta secção inclui exemplos de expressões CEL usadas para criar níveis de acesso personalizados.

Exemplo 1

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

Este exemplo representa um nível de acesso que requer o cumprimento das seguintes condições para permitir um pedido:

  • O dispositivo a partir do qual o pedido foi originado está encriptado.

  • Uma ou mais das seguintes afirmações é verdadeira:

    • O pedido teve origem nos Estados Unidos.

    • O dispositivo a partir do qual o pedido teve origem está aprovado pelo administrador do domínio.

Exemplo 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 exemplo representa um nível de acesso que requer o cumprimento das seguintes condições para permitir um pedido:

  • Uma das seguintes afirmações é verdadeira:

    • O dispositivo a partir do qual o pedido foi originado usa um sistema operativo Windows de computador e é propriedade da sua organização.

    • O dispositivo a partir do qual o pedido foi originado usa um sistema operativo Mac para computador, é aprovado pelo administrador do domínio e usa, pelo menos, o MacOS 10.11.

Exemplo 3

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

Este exemplo representa um nível de acesso que requer o cumprimento da seguinte condição para permitir um pedido:

  • A função de extensão certificateBindingState determina que o certificado apresentado no momento do pedido corresponde a um dos certificados do dispositivo que foi registado quando o dispositivo foi inscrito na validação de pontos finais.