توضّح هذه المقالة حالات استخدام الوصول الواعي بالسياق التي تتضمن سياسات تستخدم مستويات الوصول المُخصّصة. في هذه الأمثلة، يمكنك إنشاء مستويات الوصول المُخصَّصة في الوضع المتقدم، باستخدام لغة التعبير الشائعة (CEL).
لاحِظ أنّه يمكنك أيضًا استخدام الدوال ووحدات الماكرو عند إنشاء مستويات وصول مُخصَّصة باستخدام تعبيرات CEL.
للاطّلاع على أمثلة على مستويات الوصول التي تم تطويرها في الوضع الأساسي (باستخدام واجهة الوصول الواعي بالسياق)، انتقل إلى أمثلة على الوصول الواعي بالسياق للوضع الأساسي.
أمثلة على المصادقة
لتحسين أمان الوصول إلى التطبيقات التي تحتوي على بيانات حسّاسة، يمكنك تحديد طريقة المصادقة المستخدمة عندما سجّل المستخدم الدخول إلى النظام لتحديد ما إذا كان يمكنه الوصول إلى التطبيق أم لا.
مثلاً، لا يُسمح للمستخدمين الذين سجّلوا الدخول باستخدام كلمة المرور فقط بالوصول إلا إلى التطبيقات التي لا تحتوي على أي معلومات حساسة، في حين يمكن السماح للمستخدم الذي سجّل الدخول باستخدام مفتاح أمان للجهاز كعامل ثانٍ بالوصول إلى التطبيقات الأكثر حساسية في المؤسسة.
يستخدم مستوى الوصول هذا سمات request.auth للتحقُّق من تسجيل المستخدمين الدخول باستخدام كلٍ من كلمة مرور ومفتاح للجهاز للتحقُّق بخطوتين، ويمكنهم الوصول إلى التطبيقات الحسّاسة.
request.auth.claims.crd_str.pwd == true && request.auth.claims.crd_str.hwk == true
وغالبًا ما يريد المشرفون فرض الوصول إلى موارد الشركة بعد مصادقة المستخدم ببيانات اعتماد قوية فقط. يستخدم المثال التالي السمتَين levels وrequest.auth على النحو التالي:
- إذا كان المستخدم يستخدم جهاز شركة، ستكون أي حزمة مصادقة متعدّدة العوامل (MFA)، باستثناء الرسائل القصيرة (SMS)، كافية (يمكن أن تشمل الطرق الإشعارات الفورية أو مفتاح أمان الأجهزة أو البرامج أو كلمة مرور لمرة واحدة).
- إذا كان المستخدم يستخدم جهازًا غير مملوك للشركة، يجب استخدام مفتاح أمان للأجهزة أو البرامج.
// طلب حزمة مصادقة أساسية متعدّدة العوامل (باستثناء الرسائل القصيرة) على أجهزة الشركة ومفتاح الأمان (للأجهزة أو البرامج) إذا لم يكن مملوكًا للشركة
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
)
)
)
أمثلة على الأجهزة
فتح القسم | تصغير الكل والانتقال إلى أعلى الصفحة
يمكنك استخدام إشارات الجهاز التي تم الإبلاغ عنها من قِبل شريك BeyondCorp Alliance. في هذا المثال، يتم استخدام برامج Lookout كتطبيق.
يستخدم مستوى الوصول هذا السمة device للتحقّق من الإبلاغ عن الجهاز المستخدم للوصول إلى Google Workspace من خلال Lookout على أنه "متوافق مع السياسات"، وأن نتيجة الكفاءة "جيد جدًا".
device.vendors["Lookout"].is_compliant_device == true && device.vendors["Lookout"].device_health_score == DeviceHealthScore.VERY_GOOD
يستخدم مستوى الوصول هذا السمة device للتحقُّق من استخدام المستخدمين لأحدث إصدار من متصفِّح Chrome المُدار، ولا يسمح بالوصول إلا من خلال هذا المتصفّح.
device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED && device.chrome.versionAtLeast("94.0.4606.81")
يمكنك استخدام شهادات المؤسسات للأجهزة في مستويات الوصول المُخصَّصة لتحديد ما إذا كان الجهاز من الأصول المملوكة للشركة. يستخدم مستوى الوصول هذا سمة device لإثبات ملكية الأصل. اقرأ إعداد شروط شهادة المؤسسة لمزيد من المعلومات والأمثلة.
يمكن أن يتضمن الجهاز أكثر من شهادة. يتم استخدام شهادات المؤسسة في مستوى وصول مُخصَّص باستخدام وحدة ماكرو exists(). مثال:
device.certificates.exists(cert, predicate)
في هذا المثال، cert هي مُعرّف بسيط يمكنك استخدامه في المتغيّر predicate لربطه بشهادة المؤسسة للجهاز. تدمج وحدة الماكرو exists() نتائج predicate لكل عنصر مع عامل التشغيل or (||). تعرض وحدات الماكرو صحيح إذا كانت شهادة واحدة على الأقل تستوفي تعبير predicate.
يسرد الجدول أدناه السمات التي يمكنك استخدامها لإنشاء تعبيرات CEL لاستخدامها مع مستويات الوصول المخصصة. لاحظ أن مقارنات السلاسل حساسة لحالة الأحرف.
السمة | الوصف | مثال على تعبير predicate (حيث cert هي معرّف لوحدات الماكرو) |
---|---|---|
is_valid |
صحيح إذا كانت الشهادة صالحة ولم تنته صلاحيتها. |
cert.is_valid |
cert_fingerprint | الملف المرجعي للشهادة (base64 غير مضافة SHA256) |
cert.cert_fingerprint == origin. |
root_ca_fingerprint | الملف المرجعي لشهادة CA الجذر المستخدَمة لتوقيع هذه الشهادة (base64 غير مُضافة SHA256) |
cert.root_ca_fingerprint == "the_fingerprint" |
issuer |
اسم جهة الإصدار للعثور على اسم جهة الإصدار، شغِّل الأمر التالي في الشهادة:
سلسلة جهة الإصدار المستخدَمة في مستوى الوصول هي عكس الإخراج ويتم استبدال "/" بفاصلة، على سبيل المثال:
|
cert.issuer == "EMAILADDRESS=test_inter1 |
subject | اسم موضوع الشهادة (الأسماء الموسَّعة بالكامل) |
cert.subject == "CA_SUB" |
serial_number |
الرقم التسلسلي للشهادة |
cert.serial_number == “123456789” |
template_id | رقم تعريف نموذج X.509 للإضافة Certificate Template للشهادة (سلسلة) |
cert.template_id == "1.3.6.1.4.1.311.21. |
أمثلة على السياسات شائعة الاستخدام:
تحقَّق من أن الجهاز يحتوي على شهادة مؤسسة صالحة موقَّعة من خلال شهادة الجذر للشركة.
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "ROOT_CA_FINGERPRINT")
التحقُّق من صحة جهة إصدار شهادة المؤسسة على الجهاز
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”)
يستخدم هذا المثال السمة device لطلب تفعيل ميزتا تشفير القرص وقفل الشاشة. بالإضافة إلى ذلك، يجب أن يوافق المشرفون على الجهاز.
تتم الموافقة تلقائيًا على جميع الأجهزة التي تم إنشاؤها من خلال Endpoint Verification. ومع ذلك، قد تحتاج في بعض الحالات إلى حظر جهاز، مثل حالة فقدان جهاز. وفي هذه الحالات، لن ترغب في أن تتمكن هذه الأجهزة من الوصول إلى موارد الشركة.
بالنسبة إلى أمثلة مستويات الوصول الأخرى في هذا المستند، سنفترض أن مستوى الوصول هذا يحمل الاسم Require_Secure_Device
.
// طلب تفعيل تشفير القرص وقفل الشاشة
// يسري هذا على جميع الأنظمة الأساسية الرئيسية (Windows وMac وLinux وCrOS وiOS وAndroid)
// هذه المعلومات أساسية ويجب أن تعتمد على جميع مستويات الوصول الأخرى
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED &&
device.is_secured_with_screenlock &&
device.is_admin_approved_device
في هذا المثال، يستخدم مستوى الوصول السمة device للمطالبة بمتصفح Chrome مع متطلبات الأمان الأساسية.
// طلب إدارة Chrome على مستوى الملف الشخصي أو المتصفح، ويلزم
// تفعيل الإبلاغ عن الأحداث الأمنية ويجب استخدام الإصدار 97 أو إصدار أحدث
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")
يستخدم هذا المثال السمة device لطلب استخدام المستخدم لمتصفّح Chrome أو ملف شخصي مُدار على Chrome، ومن تفعيل موصِّلات حماية البيانات والتهديدات في متصفِّح Chrome. يستخدم المثال سمة levels للإشارة إلى مستوى الوصول المُحدَّد سابقًا "طلب متصفّح Chrome المُدار". يفترض المثال التالي أن مستوى الوصول التابع يُسمى Demand_Managed_Chrome
.
// طلب متصفّح Chrome المُدار (استنادًا إلى مستوى الوصول “Require_Managed_Chrome”)
// ويتطلب فحص المحتوى لعمليات التنزيل، بالإضافة إلى تفعيل ميزة "التحقّق من عنوان URL"
levels.Require_Managed_Chrome &&
device.chrome.is_file_download_analysis_enabled &&
device.chrome.is_realtime_url_check_enabled
من متطلبات التحكُّم في الوصول عدم السماح بالوصول إلا عندما يكون الجهاز مُدارًا أو مملوكًا للشركة. هناك عدة طرق لتحديد ما إذا كان الجهاز مملوكًا للشركة أو مُدارًا، بما في ذلك:
- إذا كان الجهاز يحتوي على رقم تسلسلي يطابق رقمًا في نظام إدارة الأصول في الشركة
- إذا كان الجهاز يحتوي على شهادة مؤسسة صالحة صادرة عن الشركة
يمكن استخدام هاتين الطريقتين في مستوى الوصول المخصّص التالي الذي يستخدم سمتَي levels وdevice لتحديد ما إذا كان الجهاز مملوكًا للشركة أم مُدارًا.
// يكون الجهاز مملوكًا لشركة في حال استيفاء أحد الشروط التالية:
// 1. إذا كان الرقم التسلسلي يتطابق مع ما حمّله المشرف
// 2. إذا كان الجهاز يحتوي على شهادة صالحة صادرة عن المؤسسة
levels.Require_Secure_Device &&
(
device.is_corp_owned_device ||
device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "SOME_ROOT_CA_FINGERPRINT")
)
الملف المرجعي هو base64
غير المضاف بترميز sha256 digest
(بتنسيق ثنائي) للشهادة بترميز DER. يمكن إنشاء السلسلة من الشهادة بتنسيق PEM باستخدام الإجراء التالي مع openssl
:
$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha
- تم إصداره في الطابع الزمني (iat)
- الطابع الزمني لانتهاء الصلاحية (exp) (الذي يبدو بعد أسبوعين من تاريخ الإصدار في الطابع الزمني في الإصدار الحالي)
يستخدم مستوى الوصول السمة device لضمان حداثة بيانات CrowdStrike. يُرجى العِلم أن خدمة BeyondCorp Enterprise تتضمن تأخيرًا أساسيًا لمدة 90 دقيقة عند استخدام أي تقييم جديد من Falcon ZTA، لذا لا يُنصَح باستخدام المُدد التي تقل مدتها عن ساعة.
// تأكد من صحة أحد هذه الشروط للبيانات من Crowdstrike:
// يلزم استيفاء أحد الشروط التالية
// 1. تم تقييم الجهاز خلال آخر يوم
// 2. لم تنتهِ صلاحية التقييم (منذ أسبوعَين من تاريخ آخر iat).
“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 مع العديد من شركاء المنظومة المتكاملة BeyondCorp Alliance لدمج إشارات أجهزتهم وسياقها في حل BeyondCorp Enterprise. يمكن للشركاء مشاركة أي عدد من السمات مع BeyondCorp، وإحدى هذه السمات هي is_compliant_device attribute
. يستخدم المثال التالي السمة device لتوضيح كيفية التحقّق مما إذا كان أي من شركاء BeyondCorp Alliance مُدمجًا مع BeyondCorp Enterprise ويُعتبر الجهاز متوافقًا.
توسِّع وحدة ماكرو exists
التعبير لكل شريك من BeyondCorp Alliance مع عامل التشغيل (or) ||
.
// تحقّق لمعرفة ما إذا كان أي من شركاء BCA يعتبرون الجهاز متوافقًا.
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)
يستخدم هذا المثال السمات device لضمان تشغيل الأجهزة لإصدار Android آمن.
تتحقّق ميزة "التشغيل المتحقّق منه" مما إذا كان الرمز الذي تم تنفيذه صادرًا من مصدر موثوق به (عادةً ما يكون المصنّع الأصلي للجهاز) بدلاً من مصدر مهاجم أو تلف. لمعرفة التفاصيل، يُرجى الانتقال إلى التشغيل المُتحقّق منه.
// يتطلب حالة التشغيل المتحقق منها من خلال Android باللون الأخضر
device.android_device_security.verified_boot == true
يستخدم هذا المثال السمات device لطلب اجتياز الأجهزة لفحص امتثال مجموعة أدوات اختبار التوافق (CTS). لمعرفة التفاصيل، يُرجى الانتقال إلى مجموعة أدوات اختبار التوافق.
// طلب اجتياز الأجهزة لاختبارات التحقّق من الامتثال (CTS)
device.android_device_security.cts_profile_match == true
يستخدم هذا المثال السمات device لطلب تفعيل ميزة "التحقق من التطبيقات" في "Google Play للحماية".
تفحص ميزة "التحقّق من التطبيقات" التطبيقات بحثًا عن التهديدات عندما يتم تثبيتها من مصادر بخلاف Google Play. وتفحص أيضًا هذه الميزة الأجهزة بشكلٍ دوري بحثًا عن التطبيقات التي قد تتسبب بضرر. يتم تشغيل خدمة "التحقق من التطبيقات" بشكل افتراضي. بالنسبة إلى الأجهزة الخاضعة للإدارة المتقدّمة، يمكنك تحديد ما إذا كان بإمكان المستخدمين إيقافها أم لا. ولمزيد من المعلومات، يمكنك الاطّلاع على تطبيق الإعدادات على الأجهزة الجوّالة التي تعمل بنظام التشغيل Android.
// طلب تفعيل الأجهزة ميزة "التحقق من التطبيقات" في "Google Play للحماية"
device.android_device_security.verify_apps_enabled == true
يستخدم هذا المثال السمات device لرفض الوصول إلى الأجهزة التي بها تطبيقات قد تتسبّب بضرر. غالبًا ما تُسمّى هذه التطبيقات "البرامج الضارة". لمعرفة التفاصيل، يُرجى الانتقال إلى التطبيقات التي قد تتسبّب بضرر (PHA).
// رفض الوصول إلى الأجهزة التي تحتوي على تطبيقات قد تتسبّب بضرر Android_device_security.has_potentially_harmful_apps != true
أمثلة على الوصول المستند إلى الوقت
فتح القسم | تصغير الكل والانتقال إلى أعلى الصفحة
تريد المؤسسات التأكّد من أنّ العاملين بنظام النوبات يمكنهم الوصول فقط إلى موارد الشركة خلال ساعات العمل. تستخدِم مستويات الوصول التالية سمة levels لتحديد 3 نوبات عمل من الاثنين إلى الجمعة.
// نوبة العمل 1 - من الاثنين إلى الجمعة، من منتصف الليل إلى الساعة 8 صباحًا
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 - من الاثنين إلى الجمعة، من 8 صباحًا إلى 4 مساءً
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')
// نوبة العمل 3 - من الاثنين إلى الجمعة، من الساعة 4 مساءً إلى منتصف الليل
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')
// السماح للعاملين بنظام النوبات بالوصول إلى الموارد من الاثنين إلى الجمعة بين 9 صباحًا و5 مساءً، باستثناء يوم 4 تموز (يوليو).
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')
تريد المؤسسات أحيانًا السماح بالوصول إلى إجراءات الوصول العاجل (Break Glass) في حالات الطوارئ عندما لا يكون لدى المشرف إمكانية الوصول إلى جهاز آمن، ولكنه يحتاج إلى الوصول في حالات الطوارئ لفترة قصيرة.
في هذه الحالة، يمكنك إنشاء مستوى وصول مقيّد بالوقت والموقع الجغرافي باستخدام سمة levels وتخصيصها للمشرف المحدّد. عند منح مستوى الوصول هذا، لن يكون صالحًا إلا خلال الوقت المحدد. وبعد انتهاء هذه الفترة الزمنية، سيتم التحكّم في إمكانية وصول المشرف مرة أخرى من خلال المتطلبات الحالية.
// السماح بالوصول المؤقت إلى الموارد في 1 آذار (مارس) 2022، في الفترة بين الساعة 10 مساءً إلى منتصف الليل،
// ويجب أن تأتي إمكانية الوصول هذه من داخل منطقة الولايات المتحدة.
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”
// يُرجى ملاحظة أن وقت الانتهاء حصري، لذلك من المحتمل أن يتوفر أعلاه ما يصل إلى ثانيتَين.
// قد لا يحصل المستخدمون على حق الوصول. ويمكنك أيضًا استخدام
// !between(‘00:00:01’,’16:00:00’)
مثال على دمج الشروط من مستويين
تحديد مستوى وصول جديد من خلال الجمع بين الشروط من مستويين للوصوليستخدم مستوى الوصول هذا سمات levels، ويتطلّب أن يستوفي المستخدمون الشروط المجمّعة لمستويَين من مستويات الوصول. في هذا المثال، يشير access_level_name_1 وaccess_level_name_2 إلى الاسم الداخلي.
levels.access_level_name_1 && levels.access_level_name_2