Spesifikasi tingkat akses kustom

Halaman ini menjelaskan objek dan atribut yang digunakan untuk mem-build ekspresi Common Expression Language (CEL) untuk tingkat akses kustom. Contohnya disertakan.

Untuk mempelajari CEL lebih lanjut, lihat definisi bahasa CEL.

Objek

Access Context Manager menyediakan empat objek yang berisi atribut tingkat akses.

Objek
origin Berisi atribut yang mengidentifikasi asal permintaan.
request.auth Berisi atribut yang mengidentifikasi aspek autentikasi dan otorisasi permintaan.
levels Berisi atribut untuk menentukan dependensi pada tingkat akses lainnya.
device Berisi atribut yang mendeskripsikan perangkat tempat permintaan berasal.

Atribut origin

Bagian ini mencantumkan atribut yang didukung oleh objek origin.

Atribut
ip
Jenis string
Deskripsi

Alamat IP tempat permintaan berasal. Jika alamat IP tidak dapat ditentukan, origin.ip akan dievaluasi menjadi error. Sebaiknya gunakan inIpRange untuk memeriksa apakah alamat IP asal berada dalam rentang alamat IP tertentu, bukan melakukan perbandingan string.

Contoh:

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

region_code
Jenis string
Deskripsi

Kode ISO 3166-1 alpha-2 untuk negara atau wilayah tempat permintaan berasal. Jika kode region tidak dapat ditentukan, origin.region_code akan dievaluasi menjadi error.

Contoh:

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

Atribut request.auth

Bagian ini mencantumkan atribut yang didukung oleh objek request.auth.

Atribut
principal
Jenis string, list(string)
Deskripsi

ID unik pengguna yang mengeluarkan permintaan.

Nilai untuk request.auth.principal harus berupa satu atau beberapa ID pengguna yang unik. UUID dapat diperoleh menggunakan Directory API Admin SDK.

Nilai harus dalam format berikut: https://accounts.google.com/UUID

Dengan UUID adalah UUID pengguna.

Contoh:

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
Jenis boolean
Deskripsi

Pengguna diautentikasi dengan sandi.

Contoh:

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

claims.crd_str.push
Jenis boolean
Deskripsi

Pengguna diautentikasi dengan notifikasi push ke perangkat seluler.

Contoh:

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

claims.crd_str.sms
Jenis boolean
Deskripsi

Pengguna diautentikasi menggunakan kode yang dikirim ke SMS atau melalui panggilan telepon.

Contoh:

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

claims.crd_str.swk
Jenis boolean
Deskripsi

2SV menggunakan kunci software, seperti ponsel, sebagai kunci keamanan.

Contoh:

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

claims.crd_str.hwk
Jenis boolean
Deskripsi

2SV menggunakan kunci hardware, seperti Kunci Titan Google.

Contoh:

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

claims.crd_str.otp
Jenis boolean
Deskripsi

Pengguna diautentikasi dengan metode sandi sekali pakai (Google Authenticator dan Kode Cadangan).

Contoh:

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

claims.crd_str.mfa
Jenis boolean
Deskripsi

Pengguna diautentikasi dengan salah satu metode dalam tabel ini kecuali pwd.

Contoh:

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

Untuk informasi selengkapnya tentang kebijakan kekuatan kredensial, lihat Mengonfigurasi kebijakan kekuatan kredensial.

levels atribut

Bagian ini mencantumkan atribut yang didukung oleh objek levels.

Atribut
level name
Jenis boolean
Deskripsi

level name sesuai dengan nama tingkat akses yang ada.

Saat digunakan, kondisi tingkat akses yang ditentukan juga harus dipenuhi selain persyaratan lain dari tingkat akses kustom Anda.

Contoh:

levels.allow_corp_ips

Dengan allow_corp_ips adalah nama tingkat akses.

device atribut

Bagian ini mencantumkan atribut yang didukung oleh objek device. Jika tidak ada perangkat yang terkait dengan ID dalam permintaan yang ditemukan, semua atribut berikut akan dievaluasi menjadi error.

Atribut
encryption_status
Jenis enum
Deskripsi

Menjelaskan status enkripsi perangkat.

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

Contoh:

device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
Jenis boolean
Deskripsi

Apakah perangkat telah disetujui oleh administrator domain.

Contoh:

device.is_admin_approved_device == true

is_corp_owned_device
Jenis boolean
Deskripsi

Apakah perangkat dimiliki oleh organisasi.

Contoh:

device.is_corp_owned_device == true

is_secured_with_screenlock
Jenis boolean
Deskripsi

Apakah fungsi kunci layar perangkat diaktifkan.

Contoh:

device.is_secured_with_screenlock == true

os_type
Jenis enum
Deskripsi

Mengidentifikasi sistem operasi yang digunakan perangkat.

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

Contoh:

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

vendors
Jenis map<string, Vendor> vendors;
Deskripsi

Objek vendors digunakan untuk mengakses data yang disediakan oleh vendor keamanan dan pengelolaan endpoint pihak ketiga. Setiap vendor dapat mengisi tiga atribut tingkat teratas bersama: is_compliant_device, is_managed_device, dan device_health_score.

Selain itu, vendor dapat memberikan kunci dan nilainya sendiri yang direferensikan menggunakan atribut data. Kunci yang tersedia untuk atribut data bervariasi dari vendor ke vendor. Pastikan Anda konsisten saat membandingkan nilai kunci dalam ekspresi kebijakan. Misalnya, jika Anda mengharapkan nilai kunci berupa string atau boolean, pastikan Anda membandingkannya dengan string atau boolean dalam ekspresi kebijakan yang sesuai. Perhatikan bahwa jika nilainya berupa bilangan bulat, Anda harus membandingkannya dengan angka ganda dalam ekspresi kebijakan.

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

Contoh:

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
Jenis boolean
Deskripsi

Apakah status booting terverifikasi Android adalah green.

Contoh:

device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
Jenis boolean
Deskripsi

Apakah perangkat lulus kepatuhan profil CTS.

Contoh:

device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Jenis boolean
Deskripsi

Apakah perangkat telah mengaktifkan Verifikasi Aplikasi Google Play Protect.

Contoh:

device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
Jenis boolean
Deskripsi

Apakah aplikasi yang berpotensi membahayakan ditemukan di perangkat atau tidak.

Contoh:

device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
Jenis boolean
Deskripsi

Apakah perangkat iOS ditemukan di-jailbreak.

Contoh:

device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
Jenis boolean
Deskripsi

Apakah permintaan berasal dari perangkat dengan Chrome OS terverifikasi.

Contoh:

device.verified_chrome_os == true

chrome.management_state
Jenis string
Deskripsi

Apakah browser dikelola, di tingkat browser atau di tingkat profil, dan oleh perusahaan di bawah domain yang benar.

Browser dianggap terkelola jika kebijakan dikelola dan didorong secara terpusat, serta domain browser atau profil terkelola cocok dengan domain yang diharapkan di sisi server.

Berikut adalah status pengelolaan Chrome yang tersedia:

Status
MANAGED Browser atau profil dikelola oleh pelanggan.
UNMANAGED Browser atau profil tidak dikelola oleh pelanggan mana pun.
MANAGED_BY_OTHER_DOMAIN Browser atau profil dikelola oleh beberapa pelanggan lain.
PROFILE_MANAGED Profil dikelola oleh pelanggan.
BROWSER_MANAGED Browser dikelola oleh pelanggan.

Contoh:

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

chrome.versionAtLeast
Jenis string
Deskripsi

Apakah browser menggunakan versi minimum tertentu.

Contoh:

device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Jenis boolean
Deskripsi

Apakah konektor pemeriksaan URL real-time diaktifkan.

Contoh:

device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
Jenis boolean
Deskripsi

Apakah konektor analisis upload file diaktifkan.

Contoh:

device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Jenis boolean
Deskripsi

Apakah konektor analisis download file diaktifkan.

Contoh:

device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
Jenis boolean
Deskripsi

Apakah konektor analisis teks massal (tempel) diaktifkan.

Contoh:

device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
Jenis boolean
Deskripsi

Apakah konektor pelaporan peristiwa keamanan diaktifkan.

Contoh:

device.chrome.is_security_event_analysis_enabled == true | false

Functions

Access Context Manager menyediakan fungsi berikut untuk digunakan dalam ekspresi CEL untuk tingkat akses kustom.

Functions
inIpRange(address, [subnets])
Jenis (string, list(string)) -< boolean
Deskripsi

Memeriksa apakah alamat IP termasuk dalam salah satu subnet yang diberikan.

Contoh:

inIpRange(origin.ip, ["192.0.2.0/24", "198.51.100.0/24", "203.0.113.0/24"])

device.versionAtLeast(minVersion)
Jenis DeviceType.(string) -> boolean
Deskripsi

Memeriksa apakah sistem operasi perangkat setidaknya memiliki versi tertentu. Sebaiknya gunakan fungsi ini dengan atribut device.os_type.

Contoh:

device.versionAtLeast("10.0") == true

certificateBindingState(origin, device)
Jenis (Peer, DeviceType) -> bilangan bulat
Deskripsi

Memeriksa apakah sertifikat klien yang terkait dengan origin cocok dengan perangkat dan melaporkan statusnya.

Status yang ditampilkan oleh fungsi dapat berupa salah satu dari berikut:

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

Contoh:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
Jenis string.(string) -> bool
Deskripsi

Menguji apakah operand string dimulai dengan argumen awalan.

Contoh:

"Sample string".startsWith("Sample")

endsWith()
Jenis string.(string) -> bool
Deskripsi

Menguji apakah operand string diakhiri dengan argumen akhiran.

Contoh:

"Sample string".endsWith("string")

origin.clientCertFingerprint()
Jenis Origin.() -> string
Deskripsi

Menampilkan sidik jari sertifikat yang terkait dengan asal. Anda dapat menggunakannya dalam makro untuk menguji sertifikat perangkat.

Contoh:

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

Makro untuk ekspresi CEL

Anda dapat menggunakan makro berikut dalam ekspresi CEL untuk tingkat akses kustom:

Makro Deskripsi
has(e.f) Menguji apakah kolom tersedia. Lihat Pemilihan Kolom untuk mengetahui detail selengkapnya. Contoh:

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

e.all(x, p) Menguji apakah predikat berlaku untuk semua elemen daftar e atau kunci peta e. Di sini, x adalah ID yang akan digunakan di p yang terikat dengan elemen atau kunci. Makro all() menggabungkan hasil predikat per elemen dengan operator and (&&), sehingga jika predikat bernilai salah, makro akan bernilai salah, mengabaikan error dari predikat lain. Contoh:

Ini menampilkan nilai salah karena tidak semua elemen lebih besar dari 1:
[1,2,3].all(x, x > 1)

e.exists(x, p) Seperti makro all(), tetapi menggabungkan hasil predikat dengan operator or (||). Contoh:

Ini akan menampilkan true karena ada setidaknya satu elemen dalam daftar yang lebih besar dari 1:
[1,2,3].exists(x, x > 1)

Memeriksa apakah sertifikat perusahaan yang terkait dengan perangkat cocok dengan penerbit:
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) Seperti makro exists(), tetapi dievaluasi ke benar hanya jika predikat dari tepat satu elemen atau kunci dievaluasi ke benar, dan sisanya ke salah. Kombinasi hasil boolean lainnya akan dievaluasi menjadi salah, dan error predikat apa pun akan menyebabkan makro menampilkan error. Contoh:

Ini menampilkan nilai salah karena lebih dari satu elemen lebih besar dari 1:
[1,2,3].exists_one(x, x > 1)

Contoh ekspresi CEL

Bagian ini menyertakan contoh ekspresi CEL yang digunakan untuk membuat tingkat akses kustom.

Contoh 1

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

Contoh ini menunjukkan tingkat akses yang mengharuskan kondisi berikut terpenuhi untuk mengizinkan permintaan:

  • Perangkat tempat permintaan berasal dienkripsi.

  • Satu atau beberapa hal berikut berlaku:

    • Permintaan ini berasal dari Amerika Serikat.

    • Perangkat tempat permintaan berasal disetujui oleh administrator domain.

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

Contoh ini menunjukkan tingkat akses yang mengharuskan kondisi berikut terpenuhi untuk mengizinkan permintaan:

  • Salah satu hal berikut benar:

    • Perangkat tempat permintaan berasal menggunakan sistem operasi Windows desktop dan dimiliki oleh organisasi Anda.

    • Perangkat tempat permintaan berasal menggunakan sistem operasi Mac desktop, disetujui oleh administrator domain, dan menggunakan setidaknya MacOS 10.11.

Contoh 3

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

Contoh ini menunjukkan tingkat akses yang mengharuskan kondisi berikut terpenuhi untuk mengizinkan permintaan:

  • Fungsi ekstensi certificateBindingState menentukan bahwa sertifikat yang ditampilkan pada waktu permintaan cocok dengan salah satu sertifikat perangkat yang terdaftar saat perangkat terdaftar dalam verifikasi endpoint.