מהו Sandboxed API?

פרויקט הקוד הפתוח Sandboxed API (SAPI) מבוסס על פרויקט הקוד הפתוח Sandbox2 של Google, במטרה להקל על העבודה בארגז החול בספריות C/C++.

ל-Sandboxed API יש שלושה יתרונות עיקריים:

  • במקום לבצע הרצה בארגז חול (sandboxing) של תוכניות שלמות או צורך לשנות את קוד המקור כדי לבצע הרצה בארגז חול במסגרת תוכנית כמו ב-Sandbox2, באמצעות SAPI אפשר להחיל בארגז חול ספריות יחיד של C/C++. כתוצאה מכך, כשמשתמשים ב-SAPI, התוכנית הראשית מבודדת מנקודות החולשה של ביצוע הקוד בספרייה C/C++.

  • המוטו שלנו הוא: Sandbox פעם אחת, משתמשים בכל מקום. אפשר לעשות שימוש חוזר בספריות ששמורות בארגז חול (sandboxed) עם Sandboxed API, וכך מבטלים את העומס על פרויקטים עתידיים. לפני ש-Sandboxed API היה זמין לשימוש ב-Google, היה צורך בפעולות הטמעה נוספות עבור כל מכונה חדשה של פרויקט שהיה אמור לעבור לארגז החול, גם אם נעשה בו שימוש חוזר באותה ספריית תוכנה. היה צורך להטמיע מחדש בכל פעם את המדיניות של Sandbox2 והגבלות אחרות שחלות על התהליך בארגז החול, ומנגנונים של החלפת נתונים בין חלקים מהימנים לבין חלקים לא מהימנים של הקוד היו צריכים להיות מתוכננים מאפס.

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

פרויקט SAPI תוכנן, פותח ומתוחזק על ידי חברים בצוות Google Sandbox. המערכת גם משתמשת ב-Sandbox2 שנבדק על ידי השדה. נכון לעכשיו, הרבה פרויקטים פנימיים משתמשים ב-SAPI כדי לבודד את עומסי העבודה (workloads) שלהם בסביבת הייצור.

התחלה מהירה

כדי להתחיל להשתמש ב-Sandboxed API, בצעו את השלבים הבאים:

  1. מתקינים את יחסי התלות הנדרשים (בהנחה שמופעלת Debian 10 Buster):
    $ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" | 
    sudo tee /etc/apt/sources.list.d/bazel.list $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
    python3-pip libclang-7-dev $ pip3 install clang
  2. משכפלים ומריצים את גרסת ה-build:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build …
    
  3. אפשר לנסות אחת מהדוגמאות:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop
    

מסמכים זמינים

מידע נוסף על Sandboxed API זמין כאן:

  • הסבר על Sandboxed API – מתאר את Sandboxed API (SAPI) ואת המושגים הבסיסיים שלו.

  • תחילת העבודה – הנחיות שיעזרו לכם ליצור גרסת API משלכם המבוססת על ארגז חול (SAPI) בארגז חול של SAPI.

  • יצירת כללים – הסבר איך להשתמש בכלל ה-build של sapi_library() כדי לבנות את ספריית SAPI.

  • משתנים – הסברים על השימוש בסוגי SAPI שנדרשים כשמעבירים מצביעים לסוגים פשוטים ולבלוקים של זיכרון.

  • עסקאות – מסביר איך להשתמש במודול העסקה של SAPI כדי לעקוב אחר קריאות לפונקציה.

מילון מונחים

Sandbox2 פרויקט קוד פתוח של Google שמספק את שכבת ארגז החול ב-SAPI.
ארגז חול הקובץ הבינארי שמופעל ב-Sandbox2 של Sandbox2, זמין במסמכי התיעוד של Sandbox2. בהקשר של SAPI, זוהי ספריית C/C++ בארגז החול.
SAPI Sandboxed API, פרויקט קוד פתוח של Google שמספק את הפונקציונליות לבניית ספריות Sandboxed.
ספריית SAPI ספרייה שנוצרה על ידי SAPI, המכילה ספרייה עם ארגז חול, קוד Sandbox2 וקוד זמן ריצה של SAPI.
אובייקט SAPI אובייקט C++ שכלול בקוד המארח, שמספק ממשק לספרייה Sandboxed באמצעות סוגי SAPI במקום בסוגי ה-SAPI המקוריים.
סוגי SAPI ב-SAPI יש סוגים מיוחדים שדרושים לצורך העברת מצביעים לסוגים פשוטים ולבלוקים של זיכרון.
עסקת SAPI מודול שמשמש לניהול סטטוס ארגז החול של ספריית Sandboxed בין הפעלות.
פונקציית RPC _ לשונית תקשורת מסוג Remote Procedure Call (RPC) בחבילה ארוזה ב-Sandbox2 ושימשה להעברת נתונים בין אובייקט SAPI לבין Sandboxed Library.
קוד המארח הקוד שמשתמש ב-Sandboxed Library וכולל את אובייקט SAPI.

תרומה ל-Sandboxed API

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

אם אתם רוצים לדבר עם המפתחים או לקבל הודעות על עדכוני מוצר משמעותיים, כדאי להצטרף לקבוצת Google שלנו: sandboxed-api-users.