Artikel ini menjelaskan kasus penggunaan Akses Kontekstual yang mencakup kebijakan yang menggunakan tingkat akses kustom. Dalam contoh ini, Anda membuat tingkat akses kustom dalam Mode lanjutan, menggunakan Common Expressions Language (CEL).
Jika ingin, Anda juga dapat menggunakan fungsi dan makro saat membuat tingkat akses kustom menggunakan ekspresi CEL.
Untuk mengetahui contoh tingkat akses yang dikembangkan dalam Mode dasar (menggunakan antarmuka Akses kontekstual), buka Contoh Akses Kontekstual untuk Mode dasar.
Contoh autentikasi
Mengizinkan akses ke pengguna berdasarkan tingkat kredensial login pengguna
Untuk meningkatkan keamanan akses ke aplikasi yang berisi data sensitif, Anda dapat menentukan cara pengguna diautentikasi ke sistem guna memutuskan apakah dia dapat mengakses aplikasi atau tidak.
Misalnya, pengguna yang login dengan sandi saja hanya diizinkan mengakses aplikasi yang tidak berisi informasi sensitif. Sebaliknya, pengguna yang login dengan kunci keamanan hardware sebagai faktor kedua dapat diizinkan untuk mengakses aplikasi perusahaan yang paling sensitif.
Tingkat akses ini menggunakan atribut request.auth untuk memverifikasi bahwa pengguna login menggunakan sandi dan kunci hardware untuk verifikasi 2 langkah, serta dapat mengakses aplikasi sensitif.
request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
Mengizinkan akses ke pengguna dengan kredensial autentikasi yang kuat
Sering kali administrator ingin menerapkan akses ke resource perusahaan hanya setelah pengguna melakukan autentikasi dengan kredensial yang kuat. Contoh berikut menggunakan atribut levels dan request.auth sebagai berikut:
- Jika pengguna menggunakan perangkat perusahaan, metode MFA apa pun, kecuali SMS, sudah cukup (Metode dapat berupa notifikasi push, kunci keamanan hardware atau software, atau sandi sekali pakai)
- Jika pengguna tidak menggunakan perangkat perusahaan, dia harus menggunakan kunci keamanan hardware atau software
// Mewajibkan MFA dasar (bukan SMS) di perangkat perusahaan dan kunci keamanan (hardware atau software) jika tidak
levels.Require_Secure_Device &&
(
(
levels.Require_Corporate_Device &&
request.auth.claims.crd_str.mfa &&
!request.auth.claims.crd_str.sms
) ||
(
!levels.Require_Corporate_Device &&
(
request.auth.claims.crd_str.hwk || request.auth.claims.crd_str.swk
)
)
)
Mengizinkan akses ke aplikasi hanya dari sesi terikat DBSC
Terbatas untuk aplikasi web desktop dan tidak berlaku untuk aplikasi seluler atau API
Anda dapat meningkatkan keamanan akses ke aplikasi yang berisi data sensitif dengan mewajibkan Kredensial Sesi Terikat Perangkat (DBSC). DBSC mengikat sesi pengguna ke perangkatnya saat dia menggunakan browser Chrome di Windows, yang dapat secara signifikan mengurangi risiko pembajakan sesi.
Tingkat akses ini menggunakan atribut request.auth untuk memverifikasi bahwa sesi pengguna terikat ke perangkat tertentu. Jika demikian, akses akan diberikan ke aplikasi. Jika tidak (artinya sesi tidak terikat DBSC), akses akan ditolak.
Untuk menghindari error, aktifkan DBSC untuk semua akun pengguna yang tunduk pada tingkat akses ini. Untuk mengetahui detailnya, buka Mengaktifkan DBSC.
Tetapkan tingkat akses ke mode Pantau sebelum mengaktifkan mode Aktif. Dalam mode Pantau, Anda dapat menguji dampak penerapan tingkat akses tanpa mengganggu akses pengguna.
Gunakan ekspresi CEL ini untuk membuat tingkat akses kustom:
request.auth.sessionBoundToDevice(origin) == true
Gunakan ekspresi CEL ini untuk menerapkan DBSC hanya di perangkat Windows dengan browser Chrome versi 136 atau yang lebih baru:
!(device.os_type == OsType.DESKTOP_WINDOWS && device.chrome.versionAtLeast("136.0.0")) || request.auth.sessionBoundToDevice(origin) == true
Contoh perangkat
Mengizinkan akses dari perangkat berdasarkan sinyal yang dilaporkan oleh partner BeyondCorp Alliance
Anda dapat menggunakan sinyal perangkat yang dilaporkan oleh partner BeyondCorp Alliance. Dalam contoh ini, Lookout Software digunakan sebagai aplikasi.
Tingkat akses ini menggunakan atribut device untuk memverifikasi bahwa perangkat yang digunakan untuk mengakses Google Workspace, yang dilaporkan oleh Lookout, telah mematuhi kebijakan dan skor keamanannya Sangat Baik.
device.vendors["Lookout"].is_compliant_device == true && device.vendors["Lookout"].device_health_score == DeviceHealthScore.VERY_GOODMengizinkan akses hanya dari browser Chrome terkelola dengan update terbaru
Tingkat akses ini menggunakan atribut device untuk memverifikasi bahwa pengguna menggunakan browser Chrome terkelola versi terbaru, dan hanya mengizinkan akses melalui browser tersebut.
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED && device.chrome.versionAtLeast("94.0.4606.81")Mengizinkan akses menggunakan sertifikat perusahaan
Anda dapat menggunakan sertifikat perusahaan untuk perangkat di tingkat akses kustom guna menentukan apakah perangkat merupakan aset milik perusahaan. Tingkat akses ini menggunakan atribut device untuk verifikasi aset. Baca Mengonfigurasi kondisi sertifikat perusahaan untuk mendapatkan contoh dan informasi selengkapnya.
Satu perangkat dapat memiliki lebih dari satu sertifikat. Sertifikat perusahaan digunakan di tingkat akses kustom menggunakan makro exists(). Contoh:
device.certificates.exists(cert, predicate)
Dalam contoh ini, cert adalah ID sederhana untuk digunakan dalam variabel predikat untuk mengikat ke sertifikat perusahaan di perangkat. Makro exists() menggabungkan hasil predikat tiap elemen dengan operator or (||). Makro menampilkan true jika minimal satu sertifikat memenuhi ekspresi predikat.
Tabel di bawah mencantumkan atribut yang dapat Anda gunakan untuk membentuk ekspresi CEL yang akan digunakan dengan tingkat akses kustom. Perhatikan bahwa perbandingan string peka huruf besar/kecil.
| Atribut | Deskripsi | Contoh ekspresi predikat (sertifikat adalah ID makro) |
|---|---|---|
| is_valid |
Benar (True) jika sertifikat valid dan masa berlakunya belum habis. |
cert.is_valid |
| cert_fingerprint | Sidik jari sertifikat (SHA256 tanpa padding base64) |
cert.cert_fingerprint == origin. clientCertFingerprint() |
| root_ca_fingerprint | Sidik jari sertifikat CA root yang digunakan untuk menandatangani sertifikat ini (SHA256 tanpa padding base64) |
cert.root_ca_fingerprint == "the_fingerprint" |
| penerbit |
Nama penerbit Untuk menemukan nama penerbit, jalankan perintah berikut pada sertifikat: $ openssl x509 -in ca_1.crt -noout String penerbit yang digunakan dalam tingkat akses adalah kebalikan output dan "/" diganti dengan koma, misalnya: EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN |
cert.issuer == "EMAILADDRESS=test_inter1 @beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN" |
| subjek | Nama subjek sertifikat (nama yang sepenuhnya diperluas) |
cert.subject == "CA_SUB" |
| serial_number |
Nomor seri sertifikat |
cert.serial_number == "123456789" |
| template_id | ID template Certificate Template ekstensi X.509 sertifikat (string) |
cert.template_id == "1.3.6.1.4.1.311.21. 8.15608621.11768144. 5720724. 16068415.6889630.81. 2472537.7784047" |
Contoh kebijakan yang biasa digunakan:
Memvalidasi bahwa perangkat memiliki sertifikat perusahaan valid yang ditandatangani oleh root certificate perusahaan
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "ROOT_CA_FINGERPRINT")
Memvalidasi penerbit sertifikat perusahaan di perangkat
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")
Mengizinkan akses ke perangkat yang mengaktifkan enkripsi disk dan kunci layar
Contoh ini menggunakan atribut device untuk mewajibkan enkripsi disk dan kunci layar diaktifkan. Selain itu, perangkat harus disetujui oleh administrator.
Secara default, semua perangkat yang dibuat oleh Verifikasi Endpoint disetujui. Namun, dalam beberapa kasus Anda mungkin ingin memblokir perangkat, misalnya ketika perangkat hilang. Dalam kasus ini, Anda pasti tidak ingin perangkat tersebut dapat mengakses resource perusahaan.
Untuk contoh tingkat akses lainnya di dokumen ini, anggap bahwa tingkat akses ini memiliki nama Require_Secure_Device.
// Memerlukan enkripsi disk dan kunci layar diaktifkan
// Ini berlaku di semua platform utama (Windows, Mac, Linux, CrOS, iOS, Android)
// Ini adalah dasar dan harus diandalkan oleh semua tingkat akses lainnya
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED &&
device.is_secured_with_screenlock &&
device.is_admin_approved_device
Mengizinkan akses ke perangkat menggunakan browser Chrome dengan persyaratan keamanan dasar
Dalam contoh ini, tingkat akses menggunakan atribut device untuk mewajibkan browser Chrome dengan persyaratan keamanan dasar.
// Mewajibkan Chrome dikelola di tingkat profil atau browser, harus mengaktifkan
// pelaporan peristiwa keamanan dan harus menggunakan versi 97 atau yang lebih baru
levels.Require_Secure_Device &&
(
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED ||
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED
) &&
device.chrome.is_security_event_analysis_enabled &&
device.chrome.versionAtLeast("97")
Mengizinkan akses ke perangkat yang menggunakan browser Chrome dengan persyaratan keamanan
Contoh ini menggunakan atribut device untuk mewajibkan agar pengguna menggunakan profil atau browser Chrome terkelola, dan bahwa konektor perlindungan data dan ancaman di Chrome diaktifkan. Contoh ini menggunakan atribut levels untuk merujuk ke tingkat akses Chrome Terkelola yang dijelaskan sebelumnya. Contoh berikut menganggap tingkat akses dependen diberi nama Require_Managed_Chrome.
// Require managed chrome (dependent on "Require_Managed_Chrome" access level)
// and require content inspection for downloads as well as URL check enabled
levels.Require_Managed_Chrome &&
device.chrome.is_file_download_analysis_enabled &&
device.chrome.is_realtime_url_check_enabled
Mengizinkan akses ke perangkat milik perusahaan
Persyaratan untuk mengontrol akses adalah hanya mengizinkan akses jika perangkat dikelola atau dimiliki oleh perusahaan. Ada banyak cara untuk menentukan apakah perangkat dimiliki atau dikelola perusahaan, termasuk:
- Jika perangkat memiliki nomor seri yang cocok dengan nomor yang ada di sistem pengelolaan aset perusahaan
- Jika perangkat memiliki sertifikat perusahaan valid yang dikeluarkan oleh perusahaan
Kedua pendekatan ini dapat digunakan di tingkat akses kustom berikut yang menggunakan atribut levels dan device untuk menentukan apakah perangkat dimiliki atau dikelola oleh perusahaan.
// Perangkat merupakan milik perusahaan jika salah satu kondisi berikut terpenuhi:
// 1. Jika nomor seri cocok dengan yang telah diupload admin
// 2. Jika perangkat memiliki sertifikat valid yang dikeluarkan perusahaan
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)
Sidik jari adalah digest SHA256 berenkode base64 tanpa padding (dalam format biner) dari sertifikat yang dienkode dengan DER. String dapat dibuat dari sertifikat dalam format PEM menggunakan prosedur berikut dengan openssl:
$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha
Hanya mengizinkan akses saat data perangkat dari CrowdStrike masih baru
- Diterbitkan saat stempel waktu (iat)
- Stempel waktu habis masa berlaku (exp)
Tingkat akses menggunakan atribut device untuk memastikan bahwa data CrowdStrike baru. Perlu diketahui bahwa Chrome Enterprise Premium memiliki penundaan bawaan selama 90 menit untuk menggunakan penilaian baru dari Falcon ZTA, jadi Anda tidak disarankan untuk menggunakan durasi kurang dari satu jam.
// Pastikan salah satu kondisi berikut terpenuhi untuk data dari Crowdstrike:
// Harus memenuhi salah satu kondisi berikut
// 1. Perangkat dinilai dalam satu hari terakhir
// 2. Penilaian belum berakhir (2 minggu sejak IAT terakhir)
"CrowdStrike" di device.vendors && (
request.time - timestamp(device.vendors["CrowdStrike"].data["iat"]) < duration("1d") ||
timestamp(device.vendors["CrowdStrike"].data["exp"]) - request.time > duration("0m")
)
Mengizinkan akses saat BeyondCorp Alliance menganggap perangkat mematuhi kebijakan
Chrome Enterprise Premium bekerja sama dengan banyak partner ekosistem BeyondCorp Alliance untuk mengintegrasikan konteks dan sinyal perangkat mereka ke dalam solusi Chrome Enterprise Premium. Partner dapat berbagi sejumlah atribut dengan Chrome Enterprise Premium, dan salah satunya adalah atribut is_compliant_device. Contoh berikut menggunakan atribut device untuk menunjukkan cara kami dapat memeriksa apakah salah satu partner BeyondCorp Alliance telah terintegrasi dengan Chrome Enterprise Premium dan menganggap perangkat tersebut mematuhi kebijakan.
Makro exists memperluas ekspresi untuk setiap partner BeyondCorp Alliance dengan operator || (atau).
// Periksa apakah ada partner BCA yang menganggap perangkat tersebut mematuhi kebijakan
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)
Mengizinkan akses saat status booting terverifikasi Android berwarna hijau
Contoh ini menggunakan atribut device untuk memastikan bahwa perangkat menjalankan versi Android yang aman.
Booting Terverifikasi memeriksa apakah kode yang dieksekusi berasal dari sumber tepercaya (biasanya OEM perangkat), bukan dari penyerang atau kerusakan. Untuk mengetahui detailnya, buka Booting Terverifikasi.
// Require green Android verified boot status
device.android_device_security.verified_boot == true
Mengizinkan akses ke perangkat yang lulus pemeriksaan kepatuhan CTS
Contoh ini menggunakan atribut device untuk mewajibkan perangkat lulus pemeriksaan kepatuhan Compatibility Test Suite (CTS). Untuk mengetahui detailnya, buka Compatibility Test Suite.
// Require devices to pass CTS compliance checks
device.android_device_security.cts_profile_match == true
Mengizinkan akses ke perangkat yang mengaktifkan Verifikasi Aplikasi Google Play Protect
Contoh ini menggunakan atribut device untuk mewajibkan perangkat mengaktifkan Verifikasi Aplikasi Google Play Protect.
Verifikasi Aplikasi memindai aplikasi dari ancaman saat diinstal dari sumber selain Google Play. Verifikasi Aplikasi juga melakukan pemindaian perangkat secara berkala terhadap aplikasi yang berpotensi membahayakan. Fitur Verifikasi Aplikasi aktif secara default. Untuk perangkat dalam pengelolaan lanjutan, Anda dapat menentukan apakah pengguna dapat menonaktifkannya. Untuk mengetahui informasi selengkapnya, lihat Menerapkan setelan untuk perangkat seluler Android.
// Require devices to have Google Play Protect Verify Apps enabled
device.android_device_security.verify_apps_enabled == true
Jangan izinkan akses ke perangkat yang memiliki aplikasi yang berpotensi membahayakan
Contoh ini menggunakan atribut device untuk menolak akses ke perangkat yang memiliki aplikasi yang berpotensi membahayakan. Aplikasi ini sering disebut malware. Untuk mengetahui detailnya, buka Aplikasi yang Berpotensi Membahayakan (PHA).
// Deny access to devices that have potentially harmful appsandroid_device_security.has_potentially_harmful_apps != true
Contoh akses berbasis waktu
Hanya mengizinkan akses untuk pekerja shift selama jam kerja mereka
Perusahaan ingin memastikan bahwa pekerja shift mereka hanya dapat mengakses resource perusahaan selama jam kerja mereka. Tingkat akses berikut menggunakan atribut level untuk menentukan 3 shift selama Senin hingga Jumat.
// Shift 1 - Senin hingga Jumat, tengah malam hingga 08.00
levels.Require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
request.time.timeOfDay("America/Los_Angeles").between('00:00:00', '08:00:00')
// Shift 2 - Senin hingga Jumat, 08.00 hingga 16.00
levels.Require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
request.time.timeOfDay("America/Los_Angeles").between('08:00:00', '16:00:00')
// Shift 3 - Senin hingga Jumat, 16.00 hingga tengah malam
levels.Require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
request.time.timeOfDay("America/Los_Angeles").between('16:00:00', '00:00:00')
// Izinkan pekerja shift mengakses resource dari Senin sampai Jumat antara pukul 09.00 hingga 17.00, kecuali pada hari kemerdekaan Amerika Serikat.
levels.Require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
!(
request.time.getMonth("America/Los_Angeles") == 6 &&
request.time.getDayOfMonth("America/Los_Angeles") == 3
) &&
request.time.timeOfDay("America/Los_Angeles").between('09:30:00', '17:00:00')
Mengizinkan akses sementara
Perusahaan terkadang ingin mengizinkan akses darurat dalam keadaan darurat ketika administrator tidak memiliki akses ke perangkat yang aman, tetapi memerlukan akses darurat untuk periode waktu yang singkat.
Dalam kasus ini, buat tingkat akses waktu dan lokasi yang dibatasi menggunakan atribut levels, lalu tetapkan tingkat akses untuk administrator tertentu. Jika ditetapkan, tingkat akses ini hanya akan valid selama waktu yang ditentukan. Setelah jangka waktu ini berakhir, akses administrator akan dikontrol kembali oleh persyaratan yang ada.
// Izinkan akses sementara ke resource pada 1 Maret 2022, antara pukul 22.00 hingga tengah malam,
// dan akses ini harus berasal dari dalam wilayah AS.
levels.Require_Secure_Device &&
request.time.between('2022-03-01T23:00:00+08:00', '2022-03-02T23:59:59+08:00') &&
origin.region_code == "US"
// Perhatikan bahwa waktu berakhir bersifat eksklusif, sehingga di atas berpotensi memiliki 2 detik yang
// tidak dapat diakses pengguna. Opsi lainnya adalah menggunakan kondisi berikut
// !between('00:00:01','16:00:00')
Penggabungan kondisi dari contoh dua tingkat akses
Menentukan tingkat akses baru dengan menggabungkan kondisi dari dua tingkat akses
Tingkat akses ini menggunakan atribut tingkat, dan mengharuskan pengguna memenuhi kondisi gabungan dua tingkat akses. Dalam contoh ini, access_level_name_1 dan access_level_name_2 merujuk ke Nama Internal.
levels.access_level_name_1 && levels.access_level_name_2
Google, Google Workspace, serta merek dan logo terkait adalah merek dagang Google LLC. Semua nama perusahaan dan produk lainnya adalah merek dagang dari masing-masing perusahaan yang bersangkutan.