דוגמאות לבקרת גישה מבוססת-הקשר במצב מתקדם

התכונה הזו נתמכת במהדורות הבאות: Frontline Standard ו-Frontline Plus,‏ Enterprise Standard ו-Enterprise Plus,‏ Education Standard ו-Education Plus,‏ Chrome Enterprise Premium. השוואה בין מהדורות

במאמר הזה מתוארים תרחישים לדוגמה של בקרת גישה מבוססת-הקשר, שכוללים כללי מדיניות עם רמות גישה בהתאמה אישית. בדוגמאות האלה, אתם יוצרים רמות גישה בהתאמה אישית במצב מתקדם, באמצעות Common Expressions Language‏ (CEL).

אם אתם מעדיפים, אתם יכולים גם להשתמש בפונקציות ובפקודות מאקרו כשאתם יוצרים רמות גישה בהתאמה אישית באמצעות ביטויי CEL.

לדוגמאות לרמות גישה שפותחו במצב Basic (באמצעות ממשק בקרת הגישה מבוססת-ההקשר), עבור אל דוגמאות לבקרת גישה מבוססת-הקשר במצב Basic.

דוגמאות לאימות

מתן גישה למשתמשים על סמך החוזק של פרטי הכניסה שלהם

כדי לשפר את אבטחת הגישה לאפליקציות שמכילות מידע אישי רגיש, אתם יכולים לקבוע איך המשתמשים יאמתו את הזהות שלהם במערכת כדי לקבל גישה לאפליקציה.

לדוגמה, משתמשים שהתחברו רק באמצעות סיסמה יכולים לגשת רק לאפליקציות שלא מכילות מידע רגיש, ואילו משתמשים שהתחברו באמצעות מפתח אבטחה פיזי כגורם שני יכולים לגשת לאפליקציות הארגוניות הכי רגישות.

רמת הגישה הזו משתמשת במאפיינים של request.auth כדי לוודא שהמשתמשים מתחברים באמצעות סיסמה ומפתח חומרה לאימות דו-שלבי, ויכולים לגשת לאפליקציות רגישות.

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

מתן גישה למשתמשים עם פרטי כניסה חזקים לאימות

הרבה פעמים אדמינים רוצים לאכוף גישה למשאבים ארגוניים רק אחרי שהמשתמשים מאמתים את הזהות שלהם באמצעות פרטי כניסה חזקים. בדוגמה הבאה נעשה שימוש במאפיינים levels ו-request.auth באופן הבא:

  • אם משתמש מגיע ממכשיר ארגוני, כל שיטת MFA, למעט SMS, תספיק (השיטות יכולות להיות התראה, מפתח אבטחה של חומרה או תוכנה, או סיסמה חד-פעמית)
  • אם משתמש מגיע ממכשיר לא ארגוני, צריך להשתמש במפתח אבטחה פיזי או במפתח אבטחה של תוכנה

// Require basic MFA (not SMS) on corporate devices and security key (hardware or software) if not
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
)
)
)

מתן גישה לאפליקציות רק מסשנים שקשורים ל-DBSC

מוגבל לאפליקציות אינטרנט למחשב ולא רלוונטי לאפליקציות לנייד או לממשקי API

כדי לשפר את אבטחת הגישה לאפליקציות שמכילות מידע אישי רגיש, אפשר לדרוש פרטי כניסה לסשן לפי מכשיר (DBSC). ‫DBSC מקשרת את הסשן של המשתמש למכשיר שלו כשהוא משתמש בדפדפן Chrome ב-Windows, וכך מפחיתה באופן משמעותי את הסיכון לחטיפת פעילות (Session Hijacking).

רמת הגישה הזו משתמשת במאפיין request.auth כדי לוודא שהסשנים של המשתמש מקושרים למכשיר ספציפי. אם כן, האפליקציה מקבלת גישה. אם לא (כלומר, הסשן לא קשור ל-DBSC), הגישה נדחית.

כדי למנוע בעיות בגישה, צריך לוודא שחשבונות המשתמשים שהוקצתה להם רמת הגישה הזו עומדים בדרישות הנדרשות. פרטים נוספים זמינים במאמר הדרישות לשימוש ב-DBSC.

לפני שמפעילים את המצב פעיל , מגדירים את רמת הגישה למצב הדגמה. במצב מעקב, אפשר לבדוק את ההשפעה של אכיפת רמת הגישה בלי להפריע לגישה של המשתמשים.

כדי ליצור את רמת הגישה בהתאמה אישית, משתמשים בביטוי ה-CEL הבא:

request.auth.sessionBoundToDevice(origin) == true

אפשר להשתמש בביטוי CEL הזה כדי לאכוף את DBSC רק במכשירי Windows עם דפדפן Chrome בגרסה 136 ואילך:

!(device.os_type == OsType.DESKTOP_WINDOWS && device.chrome.versionAtLeast("136.0.0")) || request.auth.sessionBoundToDevice(origin) == true

דוגמאות למכשירים

אישור גישה ממכשיר על סמך אותות שדווחו על ידי שותף של BeyondCorp Alliance

אתם יכולים להשתמש באותות מהמכשיר שמדווחים על ידי שותף של BeyondCorp Alliance. בדוגמה הזו, Lookout Software משמשת כאפליקציה.

רמת הגישה הזו משתמשת במאפיין מכשיר כדי לוודא שהמכשיר שמשמש לגישה ל-Google Workspace מדווח על ידי Lookout כתואם למדיניות, ושהציון של תקינות המכשיר הוא "טוב מאוד".

device.vendors["Lookout"].is_compliant_device == true && device.vendors["Lookout"].device_health_score == DeviceHealthScore.VERY_GOOD

מתן גישה רק מדפדפן Chrome מנוהל עם העדכונים האחרונים

רמת הגישה הזו משתמשת במאפיין מכשיר כדי לוודא שהמשתמשים משתמשים בגרסה העדכנית של דפדפן Chrome מנוהל, ומאפשרת גישה רק דרך דפדפן כזה.

device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED && device.chrome.versionAtLeast("94.0.4606.81")

מתן גישה באמצעות אישור ארגוני

אתם יכולים להשתמש באישורים ארגוניים למכשירים ברמות גישה בהתאמה אישית כדי לקבוע אם מכשיר הוא נכס בבעלות הארגון. רמת הגישה הזו משתמשת במאפיין device לאימות הנכס. מידע נוסף ודוגמאות זמינים במאמר הגדרת תנאים לאישורים ארגוניים.

במכשיר יכול להיות יותר מאישור אחד. אישורי Enterprise משמשים ברמת גישה מותאמת אישית באמצעות פקודת המאקרו exists()‎. לדוגמה:

device.certificates.exists(cert, predicate)

בדוגמה הזו, cert הוא מזהה פשוט לשימוש במשתנה predicate כדי לקשר לאישור הארגוני של המכשיר. פקודת המאקרו exists()‎ משלבת תוצאות של פרדיקטים לכל רכיב עם האופרטור or (||). פקודות מאקרו מחזירות את הערך true אם לפחות אישור אחד עומד בתנאי של ביטוי הפרדיקט.

בטבלה הבאה מפורטים המאפיינים שבהם אפשר להשתמש כדי ליצור ביטויי CEL לשימוש עם רמות גישה בהתאמה אישית. חשוב לזכור שהשוואות של מחרוזות הן תלויות אותיות רישיות.

מאפיין תיאור דוגמה לביטוי
פרדיקט
(כאשר cert הוא
מזהה של פקודות מאקרו)
is_valid

‫True אם האישור תקף ולא פג תוקף.
(boolean)

cert.is_valid
cert_fingerprint טביעת האצבע של האישור
(SHA256 ללא ריפוד ב-base64)
cert.cert_fingerprint == origin.
clientCertFingerprint()‎
root_ca_fingerprint טביעת האצבע של אישור ה-CA הבסיסי שמשמש לחתימה על האישור הזה
(SHA256 ללא ריפוד ב-base64)
cert.root_ca_fingerprint == "the_fingerprint"
המוסד המנפיק

שם המנפיק
(שמות מלאים)

כדי למצוא את שם המנפיק, מריצים את הפקודה הבאה על האישור:

$ 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

מחרוזת המנפיק שמשמשת ברמת הגישה היא ההיפוך של הפלט, והתו "/" מוחלף בפסיק, לדוגמה:

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"
נושא שם הנושא של האישור
(שמות מורחבים במלואם)
cert.subject == "CA_SUB"
serial_number

המספר הסידורי של האישור
(מחרוזת)

cert.serial_number == "123456789"
template_id מזהה התבנית של תבנית האישור של תוסף X.509 לאישור
(מחרוזת)
cert.template_id == "1.3.6.1.4.1.311.21.‎
8.15608621.11768144.
5720724.
16068415.6889630.81.
2472537.7784047"

דוגמאות לכללי מדיניות נפוצים:

אימות שלמכשיר יש אישור ארגוני תקף שחתום על ידי אישור הבסיס של החברה

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.

// Require disk encryption and screen lock enabled
// This is applicable across all major platforms (Windows, Mac, Linux, CrOS, iOS, Android)
// This foundational and should be depended upon by all other access levels
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED &&
device.is_secured_with_screenlock &&
device.is_admin_approved_device

מתן גישה למכשירים שמשתמשים בדפדפן Chrome עם דרישות אבטחה בסיסיות

בדוגמה הזו, רמת הגישה משתמשת במאפיין מכשיר כדי לדרוש דפדפן Chrome עם דרישות אבטחה בסיסיות.

// Require Chrome to be managed at profile or browser level, must have
// security event reporting enabled and must be version 97 or greater
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")

מתן גישה למכשירים שמשתמשים בדפדפן Chrome עם דרישות אבטחה

בדוגמה הזו, המאפיין device משמש כדי לדרוש שהמשתמש יגיע מדפדפן או מפרופיל מנוהל של Chrome, ושהמחברים של הגנה על נתונים מפני איומים ב-Chrome יהיו מופעלים. בדוגמה נעשה שימוש במאפיין levels כדי להתייחס לרמת הגישה "דרישה ל-Chrome מנוהל" שתוארה קודם. בדוגמה הבאה, נניח שרמת הגישה התלויה נקראת 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

מתן גישה למכשירים בבעלות החברה

אחת מהדרישות לשליטה בגישה היא לאפשר גישה רק כשהמכשיר מנוהל על ידי החברה או נמצא בבעלותה. יש הרבה דרכים לקבוע אם מכשיר נמצא בבעלות או בניהול של הארגון, כולל:

  • אם למכשיר יש מספר סידורי שתואם למספר שמופיע במערכת לניהול נכסים של החברה
  • אם למכשיר יש אישור ארגוני תקף שהונפק על ידי החברה

אפשר להשתמש בשתי הגישות האלה ברמת הגישה הבאה בהתאמה אישית, שמשתמשת במאפיינים 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")
)

טביעת האצבע היא תקציר SHA256 (בפורמט בינארי) בקידוד base64 ללא ריפוד של האישור בקידוד 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

מתן גישה רק אם נתוני המכשיר מ-CrowdStrike עדכניים

יש שתי חותמות זמן ש-CrowdStrike מנפיקה כחלק מהציון של Falcon Zero Trust Assessments ‏ (ZTA):
  • חותמת הזמן של ההנפקה (iat)
  • חותמת זמן של תפוגה (exp)

רמת הגישה משתמשת במאפיין מכשיר כדי לוודא שהנתונים של CrowdStrike עדכניים. חשוב לשים לב שב-Chrome Enterprise Premium יש עיכוב מובנה של 90 דקות בצריכת כל הערכה חדשה מ-Falcon ZTA, ולכן לא מומלץ להשתמש במשכי זמן של פחות משעה.

// Ensure one of these conditions is true for data from Crowdstrike:
// Must meet one of these conditions
// 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 Alliance

‫Chrome Enterprise Premium פועל עם שותפים רבים בסביבה העסקית של BeyondCorp Alliance כדי לשלב את האותות וההקשר של המכשירים שלהם בפתרון של Chrome Enterprise Premium. השותפים יכולים לשתף כל מספר של מאפיינים עם Chrome Enterprise Premium, ואחד מהם הוא המאפיין is_compliant_device. בדוגמה הבאה אנחנו משתמשים במאפיין device כדי להראות איך אפשר לבדוק אם אחד מהשותפים של BeyondCorp Alliance שולב עם Chrome Enterprise Premium, ושהמכשיר נחשב לתואם.

הפקודה exists מרחיבה את הביטוי לכל אחד מהשותפים ב-BeyondCorp Alliance באמצעות אופרטור || (או).

// Check to see if any of the BCA partners consider the device to be compliant
["CrowdStrike", "Tanium", "PANW", "Check Point", "Lookout"].exists(
v, v in device.vendors && device.vendors[v].is_compliant_device
)

מתן גישה כשסטטוס האתחול המאומת של Android הוא ירוק

בדוגמה הזו נעשה שימוש במאפייני מכשיר כדי לוודא שבמכשירים פועלת גרסה בטוחה של Android.

התכונה "אתחול מאומת" בודקת אם הקוד שמופעל מגיע ממקור מהימן (בדרך כלל יצרני ציוד מקורי של המכשיר), ולא מתוקף או מפגם. פרטים נוספים זמינים במאמר בנושא אתחול מאומת.

// Require green Android verified boot status
device.android_device_security.verified_boot == true

מתן גישה למכשירים שעוברים את בדיקות התאימות של CTS

בדוגמה הזו נעשה שימוש במאפייני מכשיר כדי לדרוש שהמכשירים יעברו בדיקות תאימות של חבילה לבדיקות תאימות (CTS). פרטים נוספים זמינים במאמר בנושא חבילה לבדיקות תאימות (CTS).

// Require devices to pass CTS compliance checks
device.android_device_security.cts_profile_match == true

מתן גישה למכשירים שבהם מופעלת התכונה "אימות אפליקציות" של Google Play Protect

בדוגמה הזו נעשה שימוש במאפייני מכשיר כדי לדרוש שהתכונה אימות אפליקציות של Google Play Protect תהיה מופעלת במכשירים.

התכונה "אימות אפליקציות" סורקת אפליקציות כדי לאתר איומים כשהן מותקנות ממקורות אחרים מלבד Google Play. היא גם מפעילה סריקה תקופתית של המכשיר כדי לאתר אפליקציות שעלולות להזיק. התכונה "אימות אפליקציות" מופעלת כברירת מחדל. במכשירים בניהול מתקדם, אתם יכולים לקבוע אם המשתמשים יוכלו להשבית את ההצפנה. מידע נוסף זמין במאמר החלת הגדרות על מכשירי Android ניידים.

// Require devices to have Google Play Protect Verify Apps enabled
device.android_device_security.verify_apps_enabled == true

אין גישה למכשירים שיש בהם אפליקציות שעלולות להזיק (PHA)

בדוגמה הזו משתמשים במאפייני מכשיר כדי לחסום את הגישה למכשירים שיש בהם אפליקציות שעלולות להזיק (PHA). האפליקציות האלה נקראות לפעמים תוכנות זדוניות. פרטים נוספים זמינים במאמר בנושא אפליקציות שעלולות להזיק (PHA).

// Deny access to devices that have potentially harmful appsandroid_device_security.has_potentially_harmful_apps != true

דוגמאות לגישה מבוססת-זמן

לאפשר לעובדים במשמרות גישה רק במהלך שעות המשמרת שלהם

ארגונים רוצים לוודא שעובדי המשמרות שלהם יכולים לגשת למשאבי הארגון רק במהלך שעות המשמרת שלהם. ברמות הגישה הבאות נעשה שימוש במאפיין levels כדי להגדיר 3 משמרות בימים שני עד שישי.

// Shift 1 - Monday to Friday, midnight to 8am
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 - Monday to Friday, 8am to 4pm
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 - Monday to Friday, 4pm to midnight
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')


// Allow shift workers to access resources from Monday to Friday between 9 AM to 5 PM, except for July fourth.
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')

מתן גישה זמנית

ארגונים לפעמים רוצים לאפשר גישה במקרי חירום, כשהאדמין לא יכול לגשת למכשיר מאובטח אבל צריך גישה למקרה חירום לפרק זמן קצר.

במקרה כזה, יוצרים רמת גישה שמוגבלת בזמן ובמיקום באמצעות המאפיין levels, ומקצים אותה לאדמין הספציפי. כשמקצים את רמת הגישה הזו, היא תקפה רק במהלך הזמן שצוין. אחרי שתקופת הזמן הזו תסתיים, הגישה של האדמין תהיה כפופה שוב לדרישות הקיימות.

// Allow temporary access to resources on March 1, 2022, between 10 PM to midnight,
// and this access must come from within the US region.
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"
// Note that the end time is exclusive, so the above potentially has 2 seconds that
// the users may not have access. אפשרות נוספת היא להשתמש בביטוי הזה:
// !between('00:00:01','16:00:00')

דוגמה לשילוב תנאים משתי רמות

הגדרה של רמת גישה חדשה על ידי שילוב תנאים משתי רמות גישה

רמת הגישה הזו משתמשת במאפייני רמות, ודורשת שהמשתמשים יעמדו בתנאים המשולבים של שתי רמות גישה. בדוגמה הזו, access_level_name_1 ו-access_level_name_2 מתייחסים לשם פנימי.

levels.access_level_name_1 && levels.access_level_name_2


‫Google‏, Google Workspace וסימנים וסמלי לוגו קשורים הם סימנים מסחריים של Google LLC. כל שמות החברות והמוצרים האחרים הם סימנים מסחריים של החברות שאליהן הם משויכים.