Bu makalede, bağlama duyarlı erişimin kullanım alanlarıyla ilişkili olarak özel erişim düzeylerinden yararlanan politikalar açıklanmaktadır. Aşağıdaki örneklerle, gelişmiş modda Common Expressions Language (CEL) kullanarak özel erişim düzeyleri oluşturmayı öğreneceksiniz.
Dilerseniz CEL ifadelerini kullanarak özel erişim düzeyleri oluştururken işlevler ve makrolardan da yararlanabilirsiniz.
Bağlama duyarlı erişim arayüzü kullanılarak temel modda geliştirilen erişim düzeyi örneklerini Temel mod için bağlama duyarlı erişim örnekleri sayfasından inceleyebilirsiniz.
Kimlik doğrulama örnekleri
Hassas veri içeren uygulamalara erişim sürecinin güvenliğini artırmak amacıyla, kullanıcının uygulamaya erişip erişemeyeceğine karar verirken, sistemde kimlik doğrulaması yapmak için kullanılan yöntemden yararlanabilirsiniz.
Örneğin, yalnızca şifreyle giriş yapan kullanıcıların hassas bilgi içermeyen uygulamalara erişmesine izin verirken, ikinci faktör olarak donanım güvenlik anahtarıyla giriş yapmış kullanıcıların en hassas kurumsal uygulamalara erişmesine izin verebilirsiniz.
Bu erişim düzeyinde, kullanıcıların 2 Adımlı Doğrulama için hem şifre hem donanım anahtarı kullanarak giriş yaptığını ve hassas uygulamalara erişebildiğini doğrulamak için request.auth özellikleri kullanılır.
request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
Yöneticiler genellikle, kurumsal kaynaklara erişim izni vermeden önce kullanıcının güçlü kimlik bilgileriyle kimlik doğrulaması yapmasını ister. Aşağıdaki örnekte levels ve request.auth özellikleri şu şekilde kullanılmıştır:
- Kullanıcı, şirkete ait bir cihazla oturum açıyorsa SMS dışında herhangi bir MFA yöntemi yeterli olur. (Bu yöntemler arasında push bildirimi, donanım/yazılım güvenlik anahtarı ve tek kullanımlık şifre yer alır.)
- Kullanıcı, şirkete ait olmayan bir cihazla oturum açıyorsa donanım/yazılım güvenlik anahtarı kullanılmalıdır.
// Şirkete ait cihazlarda temel MFA'yı (SMS dışında), şirkete ait olmayan cihazlarda güvenlik anahtarını (donanım veya yazılım) zorunlu kıl
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
)
)
)
Cihaz örnekleri
Bölümü aç | Tümünü daralt ve başa dön
Bir BeyondCorp Alliance iş ortağı tarafından bildirilen cihaz sinyallerini kullanabilirsiniz. Bu örnekte, uygulama olarak Lookout Software kullanılmıştır.
Bu erişim düzeyinde, Google Workspace'e erişmek için kullanılan cihazın politikalara uyduğunu ve Lookout tarafından durum puanının Çok İyi olduğunun bildirildiğini doğrulamak için device özelliği kullanılır.
device.vendors["Lookout"].is_compliant_device == true && device.vendors["Lookout"].device_health_score == DeviceHealthScore.VERY_GOOD
Bu erişim düzeyinde, kullanıcıların yönetilen bir Chrome tarayıcının en son sürümünü kullandığını doğrulamak için device özelliği kullanılır ve yalnızca bu tür tarayıcılar üzerinden erişime izin verilir.
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED && device.chrome.versionAtLeast("94.0.4606.81")
Bir cihazın şirkete ait bir varlık olup olmadığını belirlemek için özel erişim düzeylerindeki cihazlarda kurumsal sertifikalar kullanabilirsiniz. Bu erişim düzeyinde, öğe doğrulaması için device özelliği kullanılır. Daha fazla bilgi ve örnekler için Kurumsal sertifika koşullarını yapılandırma bölümünü okuyun.
Bir cihazın birden fazla sertifikası olabilir. Kurumsal sertifikalar, exists() makrosu kullanılarak özel bir erişim düzeyinde kullanılır. Örneğin:
device.certificates.exists(sertifika, koşul)
Bu örnekte sertifika, cihazın kurumsal sertifikasına bağlamak için koşul değişkeninde kullanılacak basit bir tanımlayıcıdır. exists() makrosu, her öğe için döndürülen koşul sonuçlarını veya (||) operatörüyle birleştirir. En az bir sertifika koşul ifadesini karşılıyorsa makrolar doğru değerini döndürür.
Aşağıdaki tabloda, özel erişim düzeyleriyle kullanmak üzere CEL ifadeleri oluşturmak için yararlanabileceğiniz özellikler listelenmiştir. Dize karşılaştırmalarının büyük/küçük harfe duyarlı olduğuna dikkatinizi çekeriz.
Özellik | Açıklama | Koşul ifadesi örneği (burada sertifika, makroların bir tanımlayıcısıdır) |
---|---|---|
is_valid |
Sertifika geçerliyse ve süresi dolmamışsa değer "doğru"dur. |
cert.is_valid |
cert_fingerprint | Sertifikanın parmak izi (base64 doldurulmamış SHA256) |
cert.cert_fingerprint == origin. |
root_ca_fingerprint | Bu sertifikayı imzalamak için kullanılan kök CA sertifikasının parmak izi (base64 doldurulmamış SHA256) |
cert.root_ca_fingerprint == "the_fingerprint" |
issuer |
Sertifikayı verenin adı Sertifikayı verenin adını bulmak için sertifikada aşağıdaki komutu çalıştırın:
Erişim düzeyinde kullanılan sertifikayı veren dizesi, çıkışın tersidir ve "/" işareti virgül ile değiştirilir. Örneğin:
|
cert.issuer == "EMAILADDRESS=test_inter1 |
konu | Sertifikanın konu adı (tümüyle genişletilmiş adlar) |
cert.subject == "CA_SUB" |
serial_number |
Sertifikanın seri numarası |
cert.serial_number == "123456789" |
template_id | Sertifika için X.509 uzantısı Sertifika Şablonu'nun şablon kimliği (dize) |
cert.template_id == "1.3.6.1.4.1.311.21. |
Yaygın olarak kullanılan politika örnekleri:
Cihazın, şirket kök sertifikası tarafından imzalanmış geçerli bir kurumsal sertifikaya sahip olduğunu doğrulayın.
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "ROOT_CA_FINGERPRINT")
Cihazdaki kurumsal sertifikayı vereni doğrulayın
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")
Bu örnekte, hem disk şifrelemenin hem de ekran kilidinin etkinleştirilmesini zorunlu kılmak için device özelliği kullanılır. Ayrıca, cihazın yöneticiler tarafından onaylanması gerekir.
Varsayılan olarak, Endpoint Verification ile oluşturulan tüm cihazlar onaylanır. Bununla birlikte, cihazın kaybolması gibi durumlarda cihazı engellemek isteyebilirsiniz. Bu tür durumlarda ilgili cihazlardan şirket kaynaklarına erişilmesini istemezsiniz.
Bu belgedeki diğer erişim düzeyi örnekleri için, bu erişim düzeyinin adının require_Secure_Device
olduğunu varsayacağız.
// Disk şifrelemeyi ve ekran kilidini etkinleştirmeyi zorunlu kıl
// Tüm büyük platformlarda uygulanabilir (Windows, Mac, Linux, CrOS, iOS, Android)
// Temel kabul edilir ve diğer tüm erişim düzeyleri bu düzeye bağımlı olmalıdır
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED &&
device.is_secured_with_screenlock &&
device.is_admin_approved_device
Bu örnekte erişim düzeyinde, Chrome tarayıcıyı temel güvenlik şartlarıyla kullanmayı zorunlu kılmak için device özelliği kullanılır.
// Chrome'un profil veya tarayıcı düzeyinde yönetilmesini, güvenlik işlemi raporlamasının
// etkinleştirilmesini ve 97 veya daha yüksek bir sürümün kullanılmasını zorunlu kıl
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")
Bu örnekte, kullanıcının yönetilen bir Chrome tarayıcı veya profil ile oturum açmasını ve Chrome'da tehdit ve veri koruma bağlayıcılarının etkinleştirilmesini zorunlu kılmak için device özelliği kullanılır. Daha önce açıklanan Yönetilen Chrome'u Zorunlu Kıl erişim düzeyi için ise örnekte levels özelliği kullanılır. Aşağıdaki örnekte, bağımlı erişim düzeyinin adının require_Managed_Chrome
olduğu varsayılmıştır.
// Yönetilen Chrome'u ("Require_Managed_Chrome" erişim düzeyine bağımlı olarak),
// indirmeler için içerik denetimini ve URL kontrolünü etkinleştirmeyi zorunlu kıl
levels.Require_Managed_Chrome &&
device.chrome.is_file_download_analysis_enabled &&
device.chrome.is_realtime_url_check_enabled
Erişimi kontrol etmenin bir şartı, yalnızca cihaz şirket tarafından yönetildiğinde veya şirkete ait olduğuna erişime izin vermektir. Bir cihazın şirkete ait olup olmadığını veya yönetilip yönetilmediğini belirlemenin birçok yolu vardır. Bunlardan bazıları:
- Cihazın şirketin öğe yönetim sistemindekiyle eşleşen bir seri numarası olup olmadığına bakma
- Cihazın şirket tarafından verilen geçerli bir kurumsal sertifikaya sahip olup olmadığına bakma
Bu iki yaklaşım, cihazın şirkete ait olup olmadığını veya yönetilip yönetilmediğini belirlemek için levels ve device özelliklerini kullanan aşağıdaki özel erişim düzeyinde kontrol edilebilir.
// Aşağıdaki koşullardan biri geçerliyse cihaz şirkete aittir:
// 1. Seri numarası yöneticinin yüklediği numarayla eşleşirse
// 2. Cihazda geçerli bir kurumsal sertifika varsa
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)
Parmak izi, DER kodlamalı sertifikanın doldurulmamış base64
kodlamalı sha256 özetidir
(ikili biçimde). Dize, openssl
ile aşağıdaki prosedür kullanılarak sertifikadan PEM biçiminde oluşturulabilir:
$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha
- Oluşturulma zaman damgası (iat)
- Bitiş zaman damgası (exp) (mevcut sürümde oluşturulma zaman damgasından 2 hafta sonra olarak gözükür)
Bu erişim düzeyinde, CrowdStrike verilerinin güncel olduğundan emin olmak için device özelliği kullanılır. Falcon ZTA'dan yeni değerlendirmeler alınırken BeyondCorp Enterprise'da 90 dakikalık bir gecikme yaşandığını unutmayın. Bu nedenle, bir saatten kısa sürelerin kullanılması önerilmez.
// Crowdstrike verileri için aşağıdaki koşullardan birinin geçerli olduğundan emin olun:
// Bu koşullardan birini karşılamalıdır
// 1. Cihaz son bir gün içinde değerlendirilmiştir
// 2. Değerlendirmenin süresi sona ermemiştir (son iat'den itibaren 2 hafta)
“CrowdStrike” in device.vendors && (
request.time - timestamp(device.vendors["CrowdStrike"].data["iat"]) < duration("1d") ||
timestamp(device.vendors["CrowdStrike"].data["exp"]) - request.time > duration("0m")
)
BeyondCorp Enterprise, cihaz sinyallerini ve bağlam temelli erişimi BeyondCorp Enterprise çözümüne entegre etmek için birçok BeyondCorp Alliance ekosistem iş ortağıyla birlikte çalışır. İş ortakları, BeyondCorp ile istedikleri sayıda özellik paylaşabilir. Bunlardan biri, is_compliant_device özelliğidir
. Aşağıdaki örnekte, herhangi bir BeyondCorp Alliance iş ortağının BeyondCorp Enterprise ile entegre olup olmadığını ve cihazı uyumlu kabul edip etmeyeceğini nasıl kontrol edebileceğimizi göstermek için device özelliği kullanılmıştır.
exists
makrosu, ifadeyi her bir BeyondCorp Alliance iş ortağı için ||
(veya) operatörüyle genişletir.
// BCA iş ortaklarının cihazı uyumlu kabul edip etmediğini kontrol et
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)
Bu örnekte, cihazların Android'in güvenli bir sürümünü çalıştırdığından emin olmak için device özelliği kullanılır.
Yürütülen kodun bir saldırgandan veya yolsuzluktan değil, güvenilir bir kaynaktan (genellikle cihaz OEM'leri) geldiği Doğrulanmış Başlatma kontrolleri. Ayrıntılı bilgi için Doğrulanmış Başlatma başlıklı makaleyi inceleyin.
// Android için doğrulanmış başlatma durumunun yeşil görünmesi gerekir
device.android_device_security.Verified_boot == true
Bu örnekte, cihazların Compatibility Test Suite (CTS) uygunluk kontrollerini geçmesini zorunlu kılmak için device özellikleri kullanılır. Ayrıntılı bilgi için Compatibility Test Suite başlıklı makaleyi inceleyin.
// Cihazların CTS uygunluk kontrollerini geçmesini zorunlu kıl
device.android_device_security.cts_profile_match == true
Bu örnekte, cihazların Google Play Protect Uygulama Doğrulama'yı etkinleştirmesini zorunlu kılmak için device özellikleri kullanılır.
Uygulama Doğrulama, Google Play dışındaki kaynaklardan yüklenen uygulamaları tehditlere karşı tarar. Ayrıca, zararlı olabilecek uygulamalara karşı da cihazları düzenli olarak tarar. Uygulama Doğrulama özelliği varsayılan olarak açıktır. Gelişmiş yönetim kapsamındaki cihazlarda kullanıcıların bu ayarı devre dışı bırakıp bırakamayacağını belirleyebilirsiniz. Daha fazla bilgi için Android mobil cihazlara yönelik ayarları uygulama başlıklı makaleyi inceleyin.
// Cihazlarda Google Play Protect'in uygulamaları doğrulama özelliğini etkinleştirmesini zorunlu kıl
device.android_device_security.verify_apps_enabled == true
Bu örnekte, zararlı olabilecek uygulamalara sahip cihazlara erişimi reddetmek için device özellikleri kullanılır. Bu uygulamalar genellikle "kötü amaçlı yazılım" olarak adlandırılır. Ayrıntılı bilgi için Potansiyel Zararlı Uygulamalar (PHA'lar) başlıklı makaleyi inceleyin.
// Potansiyel zararlı uygulamalara sahip cihazlara erişimi reddet android_device_security.has_potentially_harmful_apps != true
Zamana dayalı erişim örnekleri
Bölümü aç | Tümünü daralt ve başa dön
İşletmeler, vardiyalı çalışanlarının şirket kaynaklarına yalnızca çalışma saatleri içinde erişebildiğinden emin olmak ister. Aşağıdaki erişim düzeylerinde, pazartesiden cumaya 3 vardiyayı tanımlamak için levels özelliği kullanılmıştır.
// 1. Vardiya - pazartesiden cumaya, 00:00 ile 08:00 arası
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')
// 2. Vardiya - pazartesiden cumaya, 08:00 ile 16:00 arası
level.require_Secure_Device &&
request.time.getDayOfWeek("America/Los_Angeles") >= 1 &&
request.time.getDayOfWeek("America/Los_Angeles") <= 5 &&
request.time.timeOfDay("America/Los_Angeles").16:00:00)
// 3. Vardiya - pazartesiden cumaya, 16:00 ile 00:00 arası
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')
// Vardiyalı çalışanların, 4 Temmuz hariç tutularak pazartesiden cumaya 09:00 ile 17:00 arasında kaynaklara erişmesine izin verir.
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')
Kuruluşlar bazen, yöneticinin güvenli bir cihaza erişimi olmadığı fakat kısa süreliğine acil erişime ihtiyaç duyduğu durumlarda acil durum erişimine izin vermek ister.
Bu durumda, levels özelliğini kullanarak zaman ve konum kısıtlamalı bir erişim düzeyi oluşturun ve bunu ilgili yöneticiye atayın. Bu erişim düzeyi atandığında, yalnızca belirtilen süre boyunca geçerli olur. Bu süre sona erdiğinde yönetici erişimi mevcut şartlarla tekrar kontrol edilir.
// 1 Mart 2022 tarihinde, 22:00 ile 00:00 arasında kaynaklara geçici erişim sağlar,
// bu erişim ABD bölgesi sınırları içinde verilmelidir.
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”
// Bitiş zamanı özel olduğu için yukarıdaki koşulda kullanıcıya
// son 2 saniye erişim sağlanmayabilir. Diğer bir seçenek ise şu koşulu kullanmaktır:
// !between(‘00:00:01’,’16:00:00’)
İki düzeyden alınan koşulları birleştirme örneği
İki erişim düzeyinin koşullarını birleştirerek yeni bir erişim düzeyi tanımlamaBu erişim düzeyinde levels özellikleri kullanılır ve kullanıcıların iki erişim düzeyinin koşullarını da karşılaması gerekir. Bu örnekte access_level_name_1 ve access_level_name_2, Dahili Ad'ı ifade eder.
levels.access_level_name_1 && levels.access_level_name_2