Spesifikasi tingkat akses kustom

Halaman ini menjelaskan objek dan atribut yang digunakan untuk membuat ekspresi Common Expression Language (CEL) untuk tingkat akses kustom. Contoh 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 menjelaskan perangkat asal permintaan.

Atribut origin

Bagian ini mencantumkan atribut yang didukung oleh objek origin.

Atribut
ip
Type string
Deskripsi

Alamat IP tempat permintaan berasal. Jika alamat IP tidak dapat ditentukan, origin.ip akan bernilai 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
Type string
Deskripsi

Kode ISO 3166-1 alpha-2 untuk negara atau wilayah tempat permintaan berasal. Jika kode wilayah tidak dapat ditentukan, origin.region_code akan bernilai 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
Type string, list(string)
Deskripsi

ID unik pengguna yang mengajukan permintaan.

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

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

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

Pengguna diautentikasi dengan sandi.

Contoh:


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

claims.crd_str.push
Type boolean
Deskripsi

Pengguna diautentikasi dengan notifikasi push ke perangkat seluler.

Contoh:


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

claims.crd_str.sms
Type boolean
Deskripsi

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

Contoh:


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

claims.crd_str.swk
Type boolean
Deskripsi

Verifikasi 2 Langkah menggunakan kunci software, seperti ponsel, sebagai kunci keamanan.

Contoh:


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

claims.crd_str.hwk
Type boolean
Deskripsi

Verifikasi 2 Langkah menggunakan kunci hardware, seperti Kunci Titan Google.

Contoh:


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

claims.crd_str.otp
Type 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
Type 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
Type boolean
Deskripsi

level name sesuai dengan nama tingkat akses yang ada.

Saat digunakan, kondisi dari tingkat akses yang ditentukan juga harus terpenuhi selain persyaratan lain pada 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 ditemukan perangkat yang terkait dengan ID dalam permintaan, semua atribut berikut akan dievaluasi ke error.

Atribut
encryption_status
Type 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
Type boolean
Deskripsi

Apakah perangkat telah disetujui oleh administrator domain.

Contoh:


device.is_admin_approved_device == true

is_corp_owned_device
Type boolean
Deskripsi

Apakah perangkat dimiliki oleh organisasi.

Contoh:


device.is_corp_owned_device == true

is_secured_with_screenlock
Type boolean
Deskripsi

Apakah fungsi kunci layar telah diaktifkan pada perangkat.

Contoh:


device.is_secured_with_screenlock == true

os_type
Type 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
Type peta<string, Vendor> vendor;
Deskripsi

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

Selain itu, vendor dapat menyediakan kunci dan nilai mereka sendiri yang direferensikan menggunakan atribut data. Kunci yang tersedia untuk atribut data bervariasi dari satu vendor ke vendor lainnya. 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 nilai adalah 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
Type boolean
Deskripsi

Apakah status Booting terverifikasi Android adalah green.

Contoh:


device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
Type boolean
Deskripsi

Apakah perangkat lulus kepatuhan profil CTS.

Contoh:


device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
Type 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
Type boolean
Deskripsi

Apakah aplikasi yang berpotensi membahayakan ditemukan di perangkat.

Contoh:


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

Apakah perangkat iOS diketahui telah di-jailbreak.

Contoh:


device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
Type boolean
Deskripsi

Apakah permintaan berasal dari perangkat dengan Chrome OS terverifikasi.

Contoh:


device.verified_chrome_os == true

chrome.management_state
Type string
Deskripsi

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

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

Contoh:


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
Type string
Deskripsi

Apakah browser di atas versi minimum tertentu.

Contoh:


device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
Type 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
Type boolean
Deskripsi

Apakah konektor analisis upload file diaktifkan.

Contoh:


device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
Type 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
Type 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
Type 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])
Type (string, daftar(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)
Type DeviceType.(string) -> boolean
Deskripsi

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

Contoh:


device.versionAtLeast("10.0") == true

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

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

Status yang ditampilkan oleh fungsi dapat berupa salah satu dari hal 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()
Type string.(string) -> bool
Deskripsi

Menguji apakah operand string dimulai dengan argumen awalan.

Contoh:


"Sample string".startsWith("Sample")

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

Menguji apakah operand string diakhiri dengan argumen akhiran.

Contoh:


"Sample string".endsWith("string")

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

Menampilkan sidik jari sertifikat yang terkait dengan asal. Anda dapat menggunakannya di 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 di ekspresi CEL untuk tingkat akses kustom:

Makro Deskripsi
has(e.f) Menguji apakah kolom tersedia. Lihat Pilihan Kolom untuk 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 untuk digunakan di p yang mengikat ke elemen atau kunci. Makro all() menggabungkan hasil predikat per elemen dengan operator and (&&). Jadi, jika predikat apa pun bernilai salah, makro akan bernilai salah (false), dengan mengabaikan error apa pun dari predikat lainnya. Contoh:

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

Kueri akan menampilkan nilai benar karena setidaknya ada 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 bernilai benar hanya jika predikat tepat satu elemen atau kunci bernilai benar, dan sisanya bernilai salah. Kombinasi hasil boolean lainnya bernilai false, dan error predikat apa pun menyebabkan makro menimbulkan error. Contoh:

Metode 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 dipenuhi 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 dipenuhi 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 dipenuhi untuk mengizinkan permintaan:

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