מפרט של רמת גישה בהתאמה אישית

בדף הזה מפורטים האובייקטים והמאפיינים שמשמשים ליצירת ביטויים של Common Expression Language‏ (CEL) לרמות גישה בהתאמה אישית. כולל דוגמאות.

מידע נוסף על CEL זמין בהגדרת השפה של CEL.

Objects

ב-Access Context Manager יש ארבעה אובייקטים שמכילים מאפיינים של רמת גישה.

Objects
origin כולל מאפיינים שמזהים את מקור הבקשה.
request.auth מכיל מאפיינים שמזהים היבטים של אימות והרשאה של הבקשה.
request.time מכיל מאפיינים מבוססי-זמן שאפשר להשתמש בהם כדי להגביל את הגישה למשאבים לפי השעה ביום, היום בשבוע או טווח תאריכים ספציפי.
levels מכיל מאפיינים להגדרת תלות ברמות גישה אחרות.
device מכיל מאפיינים שמתארים את המכשיר שממנו נשלחה הבקשה.
api מכיל מאפיינים שקשורים לקריאה ל-API עצמו, שונים מהמשתמש, המכשיר או הרשת.

מאפיינים של origin

בקטע הזה מפורטים המאפיינים שנתמכים באובייקט origin.

מאפיינים
ip
סוג מחרוזת
תיאור

כתובת ה-IP שממנה הגיעה הבקשה. אם לא ניתן לקבוע את כתובת ה-IP, הערך של origin.ip הוא שגיאה. מומלץ להשתמש ב-inIpRange כדי לבדוק אם כתובת ה-IP של המקור נמצאת בטווח כתובות IP ספציפי, במקום לבצע השוואה של מחרוזות.

לדוגמה:

inIpRange(origin.ip, ["203.0.113.24"])

region_code
סוג מחרוזת
תיאור

קוד ISO 3166-1 alpha-2 של המדינה או האזור שמהם נשלחה הבקשה. אם לא ניתן לקבוע את קוד האזור, הערך origin.region_code יקבל שגיאה.

לדוגמה:

origin.region_code == "GB"
origin.region_code in ["US", "FR", "JP"]

מאפיינים של request.auth

בקטע הזה מפורטים המאפיינים שנתמכים על ידי האובייקט request.auth.

מאפיינים
principal
סוג מחרוזת, רשימה(מחרוזת)
תיאור

המזהה הייחודי של המשתמש ששלח את הבקשה.

הערך של request.auth.principal צריך להיות מזהה משתמש ייחודי אחד או יותר. אפשר לקבל את מזהי ה-UUID באמצעות Admin SDK Directory API.

הערך צריך להיות בפורמט הבא: https://accounts.google.com/UUID

כאשר UUID הוא מזהה ה-UUID של משתמש.

לדוגמה:

request.auth.principal == "https://accounts.google.com/1134924314572461055"
request.auth.principal in ["https://accounts.google.com/1134924314572461055", "https://accounts.google.com/3134824314572461115"]

claims.crd_str.pwd
סוג בוליאני
תיאור

המשתמש עבר אימות באמצעות סיסמה.

לדוגמה:

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

claims.crd_str.push
סוג בוליאני
תיאור

המשתמש אומת באמצעות התראה בנייד.

לדוגמה:

request.auth.claims.crd_str.push == true

claims.crd_str.sms
סוג בוליאני
תיאור

המשתמש עבר אימות באמצעות קוד שנשלח בהודעת SMS או בשיחת טלפון.

לדוגמה:

request.auth.claims.crd_str.sms == true

claims.crd_str.swk
סוג בוליאני
תיאור

באימות הדו-שלבי נעשה שימוש במפתח אבטחה בתוכנה, כמו טלפון, כמפתח אבטחה.

לדוגמה:

request.auth.claims.crd_str.swk == true

claims.crd_str.hwk
סוג בוליאני
תיאור

האימות הדו-שלבי בוצע באמצעות מפתח אבטחה פיזי, כמו Google Titan Key.

לדוגמה:

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

claims.crd_str.otp
סוג בוליאני
תיאור

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

לדוגמה:

request.auth.claims.crd_str.otp == true

claims.crd_str.mfa
סוג בוליאני
תיאור

המשתמש אומת באמצעות אחת מהשיטות בטבלה הזו, חוץ מ-pwd.

לדוגמה:

request.auth.claims.crd_str.mfa == true

request.auth.oauth.client_id
סוג OAuthClientID
תיאור

מזהה הלקוח של סוכן ה-AI שרוצים לאפשר או לחסום את הגישה שלו לכלי MCP.

לדוגמה:

request.auth.oauth.client_id == OAuthClientID

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

מאפיינים של request.time

בקטע הזה מפורטים המאפיינים שנתמכים באובייקט request.time.

מאפיינים
getFullYear()
סוג מחרוזת
תיאור

מאחזרת את השנה (לדוגמה: 2023).

לדוגמה:

request.time.getFullYear("America/Los_Angeles") == 2024

getMonth()
סוג מחרוזת
תיאור

מאחזרת את החודש, מ-0 (ינואר) עד 11 (דצמבר).

לדוגמה:

‫request.time.getMonth("America/Los_Angeles") == 0 (ינואר)

getDate()
סוג מחרוזת
תיאור

הפונקציה מחזירה את היום בחודש, מ-1 עד 31.

לדוגמה:

request.time.getDate("America/Los_Angeles") == 1

getDayOfMonth()
סוג מחרוזת
תיאור

הפונקציה מאחזרת את היום בחודש, מ-0 עד 30 (0 הוא היום הראשון).

לדוגמה:

‫request.time.getDayOfMonth("America/Los_Angeles") == 0 (הראשון בחודש)

getDayOfWeek()
סוג מחרוזת
תיאור

הפונקציה מחזירה את היום בשבוע, מ-0 (יום ראשון) עד 6 (יום שבת).

לדוגמה:

request.time.getDayOfWeek("America/Los_Angeles") == 1 (יום שני)

getDayOfYear()
סוג מחרוזת
תיאור

הפונקציה מחזירה את היום בשנה, מ-0 עד 365.

לדוגמה:

‫request.time.getDayOfYear("America/Los_Angeles") == 0 (1 בינואר)

getHours()
סוג מחרוזת
תיאור

הפונקציה מאחזרת את השעה ביום, מ-0 (חצות) עד 23 (11 בלילה).

לדוגמה:

request.time.getHours("America/Los_Angeles") == 19 (19:00)

getMinutes()
סוג מחרוזת
תיאור

הפונקציה מחזירה את מספר הדקות אחרי השעה השלמה, בין 0 ל-59.

לדוגמה:

request.time.getMinutes("America/Los_Angeles") == 30

מאפיין levels

בקטע הזה מפורטים המאפיינים שנתמכים באובייקט levels.

מאפיינים
LEVEL_NAME
סוג בוליאני
תיאור

‫levels.LEVEL_NAME הוא השם של רמת גישה קיימת.

כשמשתמשים בה, צריך לעמוד גם בתנאים של רמת הגישה שצוינה, בנוסף לדרישות האחרות של רמת הגישה בהתאמה אישית.

לדוגמה:

levels.allow_corp_ips

כאשר allow_corp_ips הוא השם של רמת גישה.

מאפיין device

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

מאפיינים
encryption_status
סוג טיפוסים בני מנייה (enum)
תיאור

תיאור של סטטוס ההצפנה של המכשיר.

ערכי טיפוסים בני מנייה (enum):

enum DeviceEncryptionStatus {
  // The encryption status of the device is not specified or not known.
  ENCRYPTION_UNSPECIFIED == 0;
  // The device does not support encryption.
  ENCRYPTION_UNSUPPORTED == 1;
  // The device supports encryption, but is currently unencrypted.
  UNENCRYPTED == 2;
  // The device is encrypted.
  ENCRYPTED == 3;
}

לדוגמה:

device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

is_admin_approved_device
סוג בוליאני
תיאור

אם המכשיר אושר על ידי האדמין של הדומיין.

לדוגמה:

device.is_admin_approved_device == true

is_corp_owned_device
סוג בוליאני
תיאור

אם המכשיר נמצא בבעלות הארגון.

לדוגמה:

device.is_corp_owned_device == true

is_secured_with_screenlock
סוג בוליאני
תיאור

אם פונקציית נעילת המסך מופעלת במכשיר.

לדוגמה:

device.is_secured_with_screenlock == true

os_type
סוג טיפוסים בני מנייה (enum)
תיאור

מזהה את מערכת ההפעלה שבה המכשיר משתמש.

ערכי טיפוסים בני מנייה (enum):

enum OsType {
  // The operating system of the device is not specified or not known.
  OS_UNSPECIFIED == 0;
  // A desktop Mac operating system.
  DESKTOP_MAC == 1;
  // A desktop Windows operating system.
  DESKTOP_WINDOWS == 2;
  // A desktop Linux operating system.
  DESKTOP_LINUX == 3;
  // An Android operating system.
  ANDROID == 4;
  // An iOS operating system.
  IOS == 5;
  // A desktop ChromeOS operating system.
  DESKTOP_CHROME_OS == 6;
  // A Googlebook operating system.
  GOOGLEBOOK_OS == 8;
}

לדוגמה:

device.os_type == OsType.DESKTOP_MAC
device.os_type != OsType.OS_UNSPECIFIED

vendors
סוג map<string, Vendor> vendors;
תיאור

האובייקט vendors משמש לגישה לנתונים שסופקו על ידי ספקי אבטחה וניהול נקודות קצה של צד שלישי. כל ספק יכול לאכלס שלושה מאפיינים משותפים ברמה העליונה: is_compliant_device,‏ is_managed_device ו-device_health_score.

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

כדי להפנות למצב המכשיר, משתמשים בפורמט key-acme, כאשר acme הוא מספר הלקוח של הארגון. אפשר למצוא את מספר הלקוח בכתובת ה-URL של GET https://www.googleapis.com/admin/directory/v1/customers/my_customer. שדה המזהה בתשובה מכיל את מספר הלקוח שמתחיל באות C. כדי למצוא את מספר הלקוח, משתמשים במחרוזת שאחרי האות C, לא כולל האות C.

ערכי טיפוסים בני מנייה (enum):

// Health score of the device as provided by the vendor (possibly third party).
enum DeviceHealthScore {
  // The health score for the device is not specified or unknown.
  DEVICE_HEALTH_SCORE_UNSPECIFIED = 0;
  // The health of the device is very poor.
  VERY_POOR = 1;
  // The health of the device is poor.
  POOR = 2;
  // The health of the device is ok.
  NEUTRAL = 3;
  // The health of the device is good.
  GOOD = 4;
  // The health of the device is very good.
  VERY_GOOD = 5;
}

לדוגמה:

device.vendors["some_vendor"].is_compliant_device == true

device.vendors["some_vendor"].is_managed_device == true

device.vendors["some_vendor"].device_health_score == DeviceHealthScore.VERY_GOOD

device.vendors["some_vendor"].data["is_device_compromised"] == true

device.vendors["some_vendor"].data["some_num"] == 1.0

android_device_security.verified_boot
סוג בוליאני
תיאור

אם סטטוס האתחול המאומת של Android הוא green.

לדוגמה:

device.android_device_security.verified_boot == true

android_device_security.cts_profile_match
סוג בוליאני
תיאור

אם המכשיר עומד בדרישות של פרופיל CTS.

לדוגמה:

device.android_device_security.cts_profile_match == true

android_device_security.verify_apps_enabled
סוג בוליאני
תיאור

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

לדוגמה:

device.android_device_security.verify_apps_enabled == true

android_device_security.has_potentially_harmful_apps
סוג בוליאני
תיאור

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

לדוגמה:

device.android_device_security.has_potentially_harmful_apps == true
ios_device_security.is_device_jailbroken
סוג בוליאני
תיאור

אם מכשיר ה-iOS נמצא כפרוץ.

לדוגמה:

device.ios_device_security.is_device_jailbroken == true

verified_chrome_os
סוג בוליאני
תיאור

האם הבקשה מגיעה ממכשיר עם ChromeOS מאומת.

לדוגמה:

device.verified_chrome_os == true

chrome.management_state
סוג מחרוזת
תיאור

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

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

אלה מצבי הניהול הזמינים ב-Chrome:

מדינה
UNMANAGED הדפדפן או הפרופיל לא מנוהלים על ידי לקוח.
MANAGED_BY_OTHER_DOMAIN הדפדפן או הפרופיל מנוהלים על ידי לקוח אחר.
PROFILE_MANAGED הפרופיל מנוהל על ידי הלקוח.
BROWSER_MANAGED הדפדפן מנוהל על ידי הלקוח.

לדוגמה:

device.chrome.management_state in
    [
        ChromeManagementState.CHROME_MANAGEMENT_STATE_BROWSER_MANAGED,
        ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED,
    ]

chrome.versionAtLeast
סוג מחרוזת
תיאור

האם הגרסה של הדפדפן גבוהה מהגרסה המינימלית.

לדוגמה:

device.chrome.versionAtLeast("88.0.4321.44")

chrome.is_realtime_url_check_enabled
סוג בוליאני
תיאור

אם המחבר לבדיקת כתובות URL בזמן אמת מופעל.

לדוגמה:

device.chrome.is_realtime_url_check_enabled == true | false

chrome.is_file_upload_analysis_enabled
סוג בוליאני
תיאור

אם המחבר לניתוח העלאות קבצים מופעל.

לדוגמה:

device.chrome.is_file_upload_analysis_enabled == true | false

chrome.is_file_download_analysis_enabled
סוג בוליאני
תיאור

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

לדוגמה:

device.chrome.is_file_download_analysis_enabled == true | false

chrome.is_bulk_data_entry_analysis_enabled
סוג בוליאני
תיאור

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

לדוגמה:

device.chrome.is_bulk_data_entry_analysis_enabled == true | false

chrome.is_security_event_analysis_enabled
סוג בוליאני
תיאור

אם המחבר לדיווח על אירועי אבטחה מופעל.

לדוגמה:

device.chrome.is_security_event_analysis_enabled == true | false

device.certificates.exists
סוג בוליאני
תיאור

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

לדוגמה:

// Checks if the device has at least one valid enterprise certificate.
device.certificates.exists(cert, cert.is_valid == true)

מאפיינים של api

בקטע הזה מפורטים המאפיינים שנתמכים באובייקט api.

מאפיינים
mcp.is_mcp
סוג בוליאני
תיאור

השדה מציין אם קריאה ל-API מתבצעת על ידי שירות MCP.

לדוגמה:

api.mcp.is_mcp == true

mcp.tool.is_read_only
סוג בוליאני
תיאור

מציין אם ההפעלה של כלי ה-MCP היא במצב קריאה בלבד.

לדוגמה:

api.mcp.tool.is_read_only == true

פונקציות

‫Access Context Manager מספק את הפונקציות הבאות לשימוש בביטויי CEL לרמות גישה מותאמות אישית.

פונקציות
inIpRange(address, [SUBNETS])
סוג (string, list(string)) -> boolean
תיאור

בודקת אם כתובת IP שייכת לאחת מרשתות המשנה שצוינו.

לדוגמה:

inIpRange(origin.ip, ["192.0.2.0/24", "198.51.100.0/24", "203.0.113.0/24"])

device.versionAtLeast(minVersion)
סוג DeviceType.(string) -> boolean
תיאור

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

לדוגמה:

device.versionAtLeast("10.0") == true

certificateBindingState(origin, device)
סוג ‫(Peer, ‏ DeviceType) -> integer
תיאור

בודק אם אישור הלקוח שמשויך למקור תואם למכשיר ומדווח על המצב.

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

  • CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
  • CertificateBindingState.CERT_NOT_MATCHING_EXISTING_DEVICE
  • CertificateBindingState.CERT_STATE_UNKNOWN

לדוגמה:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

startsWith()
סוג string.(string) -> bool
תיאור

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

לדוגמה:

"Sample string".startsWith("Sample")

endsWith()
סוג string.(string) -> bool
תיאור

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

לדוגמה:

"Sample string".endsWith("string")

origin.clientCertFingerprint()
סוג Origin.() -> string
תיאור

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

לדוגמה:

// Checks if the enterprise certificate associated with the origin matches the device.
device.certificates.exists(cert, cert.is_valid && cert.cert_fingerprint == origin.clientCertFingerprint())

originatesFromProjects(origin, [PROJECT_LIST])
סוג (Origin, list(string)) -> boolean
תיאור

בודקת אם הבקשה מגיעה מ Google Cloud פרויקט ספציפי או מפרויקטים קשורים של דיירים.

מגבלות: אפשר להשתמש רק במספרי פרויקטים (לדוגמה, "projects/1234567890"). אי אפשר להשתמש במזהי פרויקטים אלפאנומריים.

לדוגמה:

כדי לאפשר בקשות רק מהפרויקט projects/1234567890 או projects/9876543210:

originatesFromProjects(origin, ["projects/1234567890", "projects/9876543210"])

request.auth.matchesNetworkProject(origin)
סוג Auth.(Origin) -> boolean
תיאור

הפונקציה בודקת אם הבקשה מגיעה מרשת שמשויכת לאותו Google Cloud פרויקט, או לפרויקט דייר משויך, שבבעלותו Workload Identity שקוראת לפונקציה. זהות של Workload Identity היא זהות לא אנושית ששייכת לפרויקט ב- Google Cloud , כמו חשבון שירות, זהות של איחוד זהויות של עומסי עבודה (WIF), זהות מנוהלת של עומס עבודה או זהות של Agent Identity.

לדוגמה:

כדי לאשר בקשות רק כשפרויקט הרשת שממנו מגיעה הבקשה (או פרויקטי הדיירים שמשויכים אליו) תואם לפרויקט my-project, שהוא הבעלים של זהות עומס העבודה ששולח את הקריאה:

request.auth.matchesNetworkProject(origin)

פקודות מאקרו לביטויי CEL

אפשר להשתמש בפקודות המאקרו הבאות בביטויי CEL לרמות גישה מותאמות אישית:

מאקרו תיאור
has(e.f) בודקת אם שדה מסוים זמין. פרטים נוספים מופיעים במאמר בנושא בחירת שדות. דוגמה:

has({"key": "value"}.key) has(device.vendors.some_vendor)

e.all(x, p) בדיקה אם תנאי מתקיים לגבי כל הרכיבים ברשימה e או המפתחות במפה e. כאן x הוא מזהה לשימוש ב-p שנקשר לאלמנט או למפתח. המאקרו all() משלב תוצאות של פרדיקטים לכל רכיב עם האופרטור and (&&). לכן, אם פרדיקט כלשהו מחזיר את הערך False, המאקרו מחזיר את הערך False ומתעלם משגיאות מפרדיקטים אחרים. דוגמה:

הפונקציה מחזירה את הערך False כי לא כל הרכיבים גדולים מ-1:
[1,2,3].all(x, x > 1)

e.exists(x, p) בדומה לפקודת המאקרו all(), אבל משלבת את תוצאות הניבוי עם האופרטור or (||). דוגמה:

הפונקציה מחזירה את הערך True כי יש לפחות רכיב אחד ברשימה שגדול מ-1:
[1,2,3].exists(x, x > 1)

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

e.exists_one(x, p) בדומה לפקודת המאקרו exists(), אבל מחזירה את הערך true רק אם הפרדיקט של רכיב אחד או מפתח אחד בדיוק מחזיר את הערך true, והשאר מחזירים את הערך false. כל שילוב אחר של תוצאות בוליאניות יחזיר False, וכל שגיאה בפרדיקט תגרום למאקרו להציג שגיאה. דוגמה:

הפונקציה הזו מחזירה את הערך False כי יותר מאלמנט אחד גדול מ-1:
[1,2,3].exists_one(x, x > 1)

דוגמאות לביטויי CEL

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

דוגמה 1

device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ["US"] || device.is_admin_approved_device)

בדוגמה הזו מוצגת רמת גישה שבה הבקשה תאושר רק אם התנאים הבאים יתקיימו:

  • המכשיר שממנו הגיעה הבקשה מוצפן.

  • אחד או יותר מהתנאים הבאים מתקיים:

    • הבקשה הוגשה בארצות הברית.

    • המכשיר שממנו נשלחה הבקשה אושר על ידי האדמין בדומיין.

דוגמה 2

(device.os_type == OsType.DESKTOP_WINDOWS && device.is_corp_owned_device) || (device.os_type == OsType.DESKTOP_MAC && device.is_admin_approved_device && device.versionAtLeast("10.11.0"))

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

  • אחד מהתנאים הבאים מתקיים:

    • המכשיר שממנו נשלחה הבקשה משתמש במערכת ההפעלה Windows למחשב, והוא בבעלות הארגון.

    • המכשיר שממנו נשלחה הבקשה משתמש במערכת הפעלה של Mac למחשבים נייחים, אושר על ידי האדמין של הדומיין ופועלת בו לפחות גרסה MacOS 10.11.

דוגמה 3

(certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE)

בדוגמה הזו מוצגת רמת גישה שבה כדי לאשר בקשה צריך לעמוד בתנאי הבא:

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