Mengontrol akses ke aplikasi berdasarkan pengguna & konteks perangkat

Contoh Akses Kontekstual untuk Mode lanjutan

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).

Perhatikan bahwa 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

Buka bagian  |  Ciutkan semua

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 memastikan 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 level 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

// Wajibkan MFA dasar (bukan SMS) di perangkat perusahaan dan kunci keamanan (hardware atau software) jika tidak menggunakan perangkat perusahaan
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
     )
  )
)

Contoh perangkat

Buka bagian  |  Ciutkan semua & ke bagian atas

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_GOOD
Mengizinkan 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 perangkat 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(sertifikat, predikat)

Dalam contoh ini, sertifikat 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

True jika sertifikat valid dan masa berlakunya belum habis.
(boolean)

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"
issuer

Nama penerbit
(nama yang sepenuhnya diperluas)

Untuk menemukan nama penerbit, jalankan perintah berikut pada sertifikat:

$ openssl x509 -in ca_1.crt -noout
-issuer
issuer=
/C=IN/ST=UP/L=NCR/O=BCEDemo/
OU=BCEDemo_1/CN=inter_1/
emailAddress=test_inter1@beyondcorp.in

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"
subject Nama subjek sertifikat
(nama yang sepenuhnya diperluas)
cert.subject == "CA_SUB"
serial_number

Nomor seri sertifikat
(string)

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, kita akan menganggap tingkat akses ini memiliki nama Require_Secure_Device.  

// Wajibkan agar enkripsi disk dan kunci layar diaktifkan 
// Hal ini berlaku di semua platform utama (Windows, Mac, Linux, CrOS, iOS, Android)
// Tingkat akses ini merupakan kondisi dasar dan harus bergantung pada seluruh tingkat akses lain
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.

// Wajibkan 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

// Wajibkan Chrome terkelola (bergantung pada tingkat akses “Require_Managed_Chrome”)
// dan wajibkan agar pemeriksaan konten untuk hasil download serta pemeriksaan URL diaktifkan
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 diterbitkan 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
Ada dua stempel waktu yang menjadi masalah CrowdStrike sebagai bagian dari skor Falcon Zero Trust Assessments (ZTA):
  • Diterbitkan saat stempel waktu (iat) 
  • Masa berlaku stempel habis (exp) (yang tampaknya 2 minggu sejak diterbitkan pada Stempel Waktu dalam rilis saat ini)

Tingkat akses menggunakan atribut device untuk memastikan bahwa data CrowdStrike baru. Perlu diketahui bahwa BeyondCorp Enterprise 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 habis masa berlakunya (2 minggu sejak iat terakhir)
“CrowdStrike” in 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

BeyondCorp Enterprise bekerja sama dengan banyak partner ekosistem BeyondCorp Alliance untuk mengintegrasikan konteks dan sinyal perangkat mereka ke dalam solusi BeyondCorp Enterprise. Partner dapat berbagi sejumlah atribut dengan BeyondCorp, dan salah satunya adalah atribut is_compliance_device. Contoh berikut menggunakan atribut device untuk menunjukkan cara kami dapat memeriksa apakah salah satu partner BeyondCorp Alliance telah terintegrasi dengan BeyondCorp Enterprise 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

Buka bagian  |  Ciutkan semua & ke bagian atas

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 ke Jumat.

// Shift 1 - Senin sampai Jumat, tengah malam hingga pukul 8.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 sampai Jumat, pukul 8.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 sampai Jumat, pukul 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 level, 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 bawah waktu berakhir kondisi bersifat eksklusif, jadi kondisi di atas mungkin memiliki 2 detik di mana 
// pengguna mungkin tidak memiliki akses. 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

 

Apakah ini membantu?

Bagaimana cara meningkatkannya?
Telusuri
Hapus penelusuran
Tutup penelusuran
Menu utama
517532326680989356
true
Pusat Bantuan Penelusuran
true
true
true
true
true
73010
false
false