Common Expression Language (CEL) היא שפה לא שלמה של טיורינג בקוד פתוח, שמיישמת סמנטיקה משותפת להערכת ביטויים. ב-Secure Web Proxy נעשה שימוש בקבוצת משנה של תנאי CEL כדי לקבל החלטות בוליאניות לגבי הרשאות, על סמך נתוני המאפיינים. באופן כללי, ביטוי של תנאי מורכב מהצהרה או הצהרות שמחוברות על ידי אופרטורים לוגיים (&&, || או !). כל הצהרה מבטאת כלל בקרה על בסיס המאפיינים. ההצהרה הזו חלה על קישור התפקיד, והיא קובעת אם תינתן גישה.
מאפיינים
כשמגדירים מדיניות של Secure Web Proxy, אפשר להשתמש במאפייני סשן ובמאפייני אפליקציה כדי לתאר את מאפייני הסשן או את מאפייני האפליקציה שהמדיניות חלה עליהם.
מאפייני סשן, שמתוארים באמצעות SessionMatcher, חלים על מאפיינים ספציפיים לסשן, כמו כתובת ה-IP של המקור, המארחים וטווח כתובות ה-IP. מאפייני האפליקציה, שמתוארים על ידי ApplicationMatcher, חלים על מאפייני אפליקציה כמו כותרות בקשה, שיטת בקשה ונתיב בקשה.
מאפיינים שזמינים ל-SessionMatcher ול-ApplicationMatcher
בטבלה הבאה מתוארים מאפיינים שרלוונטיים גם ל-SessionMatcher וגם ל-ApplicationMatcher.
| מאפיין | סוג מאפיין | תיאור |
|---|---|---|
source.ip |
מחרוזת | כתובת ה-IP של הלקוח ששלח את הבקשה. |
source.port |
מספר שלם | יציאת הלקוח ששלחה את הבקשה. |
destination.port |
מספר שלם | יציאת ה-Upstream שאליה מופנית התנועה ממופע Secure Web Proxy. |
host() |
מחרוזת | ערך המארח שמשמש לפענוח DNS ולחיבורים לשרתים במעלה הזרם.
הכתובת לא כוללת את היציאה.
הערך של **host()** נקבע לפי הפרטים הבאים:
|
source.matchTag(SECURE_TAG) |
בוליאני | הארגומנט הוא המזהה הקבוע של התג המאובטח, למשל |
source.matchServiceAccount(SERVICE_ACCOUNT) |
בוליאני | True, אם המקור משויך ל-
SERVICE_ACCOUNT, כמו
source.matchServiceAccount('x@my-project.iam.gserviceaccount.com').
|
inUrlList(HOST_OR_URL, NAMED_LIST) |
בוליאני |
כשמתבצעת התאמה של |
inIpRange(IP_ADDRESS, |
בוליאני | True, אם IP_ADDRESS מוכל בתוך IP_RANGE, כמו inIpRange(source.ip, '1.2.3.0/24'). מסכות של רשתות משנה לכתובות IPv6
לא יכולות להיות גדולות מ- /64.
|
מאפיינים שזמינים רק ב-ApplicationMatcher
בטבלה הבאה מתוארים מאפיינים שחלים רק על ApplicationMatcher.
| מאפיין | סוג מאפיין | תיאור |
|---|---|---|
request.headers |
מפה | מיפוי של כותרות הבקשה ממחרוזת למחרוזת. אם כותרת מכילה כמה ערכים, הערך במפה הזו הוא מחרוזת מופרדת בפסיקים של כל הערכים של הכותרת. כל המפתחות במפה הזו הם באותיות קטנות. |
request.method |
מחרוזת | שיטת הבקשה, כמו GET או POST. |
request.host |
מחרוזת | נוחות ששווה ל- ברוב המקרים מומלץ להשתמש ב- |
request.path |
מחרוזת | נתיב כתובת ה-URL המבוקשת. |
request.query |
מחרוזת | שאילתת כתובת URL בפורמט
לא מתבצע פענוח. |
request.scheme |
מחרוזת | סכימת כתובת ה-URL, כמו HTTP או HTTPS. כל הערכים של המאפיין הזה הם באותיות קטנות. |
request.url() |
מחרוזת | נוחות ב הערך הזה לא כולל את היציאה ומשתמש בערך מארח שעשוי להיות שונה מכותרת המארח. |
request.useragent() |
מחרוזת | נוחות ששווה ל-request.headers['user-agent']. |
אופרטורים
Secure Web Proxy תומך בכמה אופרטורים שאפשר להשתמש בהם כדי ליצור ביטויי לוגיקה מורכבים מתוך משפטי ביטוי פשוטים. Secure Web Proxy תומך באופרטורים לוגיים, כמו &&, ||, ו-!, ובאופרטורים לשינוי מחרוזות, כמו x.contains('y').
האופרטורים הלוגיים מאפשרים לכם לבדוק כמה משתנים בביטוי מותנה. לדוגמה, הביטוי request.method == 'GET' && host().matches('.*\.example.com') מצרף שתי הצהרות, והוא יהיה שווה True אם שתי ההצהרות מתקיימות.True
אופרטורים של מניפולציה של מחרוזות מתאימים למחרוזות או למחרוזות משנה שאתם מגדירים, ומאפשרים לכם לפתח כללים לשליטה בגישה למשאבים בלי שתצטרכו לפרט כל שילוב אפשרי.
אופרטורים לוגיים
בטבלה הבאה מתוארים האופרטורים הלוגיים שנתמכים ב-Secure Web Proxy.
| ביטוי לדוגמה | תיאור |
|---|---|
x == "foo" |
הפונקציה מחזירה את הערך True אם x שווה לארגומנט הקבוע
מסוג מחרוזת מילולית. |
x == R"fo'o" |
הפונקציה מחזירה את הערך True אם x שווה למחרוזת המילולית הגולמית שצוינה, שלא מפרשת רצפי escape. מחרוזות גולמיות
נוחות לביטוי מחרוזות שהקוד צריך
להשתמש בהן כדי לבצע בריחה מתווים של רצף. |
x == y |
הפונקציה מחזירה את הערך True אם x שווה ל-y. |
x != y |
הפונקציה מחזירה את הערך True אם x לא שווה ל-y. |
x && y |
הפונקציה מחזירה את הערך True אם גם x וגם y
הם True. |
x || y |
הפונקציה מחזירה True אם x, y או שניהם הם True. |
!x |
הפונקציה מחזירה את הערך True אם הערך הבוליאני x הוא False. אחרת, הפונקציה מחזירה False אם הערך הבוליאני x הוא True. |
m['k'] |
אם המפתח k קיים, הפונקציה מחזירה את הערך במפתח k במפה של מחרוזת למחרוזת m. אם המפתח k לא קיים, הפונקציה מחזירה שגיאה שגורמת לכך שהכלל שנבדק לא יתאים. |
אופרטורים של מניפולציה של מחרוזות
בטבלה הבאה מתוארים האופרטורים לטיפול במחרוזות שנתמכים ב-Secure Web Proxy.
| ביטוי | תיאור |
|---|---|
x.contains(y) |
הפונקציה מחזירה את הערך True אם המחרוזת x מכילה את מחרוזת המשנה y. |
x.startsWith(y) |
הפונקציה מחזירה את הערך True אם המחרוזת x מתחילה במחרוזת המשנה y. |
x.endsWith(y) |
הפונקציה מחזירה את הערך True אם המחרוזת x מסתיימת במחרוזת המשנה y. |
x.matches(y) |
הפונקציה מחזירה את הערך התבנית RE2 עוברת קומפילציה באמצעות האפשרות RE2::Latin1 שמשביתה תכונות Unicode. |
x.lower() |
הפונקציה מחזירה את הערך באותיות קטנות של המחרוזת x. |
x.upper() |
הפונקציה מחזירה את הערך באותיות רישיות של המחרוזת x. |
x + y |
הפונקציה מחזירה את המחרוזת המשורשרת xy. |
int(x) |
הפונקציה ממירה את תוצאת המחרוזת של x לסוג int. אפשר להשתמש במחרוזת שהומר כדי להשוות בין מספרים שלמים באמצעות אופרטורים אריתמטיים רגילים כמו > ו-<=. האפשרות הזו מתאימה רק לערכים של מספרים שלמים. |