הרצת אייג׳נטים בסביבה מבודדת ומאובטחת עם OpenShell
בניתי אייג׳נט שקורא מידע מחמישה פרויקטים ב-GCP בזמן ש-OpenShell מנהל את ההרשאות, ה-credentials, הגישה לרשת והסנדבוקס שלו.
אנבידיה שחררו לאחרונה את OpenShell - ה-agent runtime שלהם.
זה מנג׳ר שמוציא לדרך את האייג׳נט, אוכף את הגבולות שלו, עוקב אחריו ומכבה אותו, עם אבטחה מובנית.
בניתי עם OpenShell אייג׳נט שקורא לוגים ושגיאות מכמה פרויקטים שונים שלי ב-Google Cloud, עם OpenShell שמנהל את ההרשאות שלו.
עקרונות מעניינים ב-OpenShell:
- מפריד בין האייג׳נט לבין סביבת האבטחה שלו - אפשר להחליף את האייג׳נט, המודל או טכנולוגיית הסנדבוקס, ולנהל את ההרשאות והמדיניות מאותו מקום.
- לא מנסה לגרום לאייג׳נט להיות זהיר דרך הוראות בפרומפט, אלא מניח שהאייג׳נט חשוף לסיכונים ועלול לטעות, ולכן כופה עליו את ההגבלות באופן מובנה.
כדי להבין את היתרונות והחשיבות של OpenShell, חזרתי לבסיס של מה זה אייג׳נט, איך ואיפה הוא פועל.
בניתי גם מדריך OpenShell אינטראקטיבי באנגלית, שבו אפשר לעבור בין השכבות, לבדוק מדיניות deny-by-default ולראות איך inference.local שומר את מפתחות המודל מחוץ לסנדבוקס.
מה זה אייג׳נט?
אייג׳נט זה תוכנה שמבצעת פעולות - מריצה פקודות במחשב, עורכת קבצים, קוראת לכלים ושירותים ועוד.
יכולה להיות לו גישה למידע סודי כמו משתני סביבה, סיסמאות, כלים פנימיים ועוד.
האייג׳נט חשוף ל-prompt injection וסיכוני אבטחה נוספים שיכולים להביא נזק, ובנוסף יכול לבצע פעולות שלא התכוונו ולפגוע בסביבה שלנו.
דרך לצמצם את הסיכון היא סנדבוקס: הקונספט של סביבת הרצה מבודדת ומוגבלת.
הסנדבוקס תוחם את האבטחה ואת מרחב הפעולה של האייג׳נט. הוא יוצר סביבה מבודדת ומוגבלת להרצת קוד לא מוכר (untrusted code).
סנדבוקס יכול להיות מכונה וירטואלית, קונטיינר ועוד.
קונטיינרים וסנדבוקס
קונטיינר הוא אחת הטכנולוגיות שבעזרתן אפשר ליישם סנדבוקס.
בבסיס, קונטיינר הוא דרך להריץ תוכנה בתוך סביבה נפרדת ומוגבלת, יחד עם הקבצים והתלויות שהיא צריכה, ולהריץ אותה באופן זהה במחשבים ושרתים שונים.
קונטיינרים נפוצים לבידוד משום שהם מהירים, קלים וניתנים להרצה בסביבות שונות, אך הבידוד שלהם אינו מוחלט מכיוון שהם חולקים את ה-kernel של ה-host.
מתי נרצה להשתמש בזה?
כשהאייג׳נט פועל בסביבת פרודקשן, בסביבה עם חומרים סודיים או רגישים, או בכל מצב שנרצה להגביר את האבטחה סביבו.
הרכיבים להרצת אייג׳נט
האייג׳נט עצמו
- מודל - המוח שחושב ומקבל החלטות.
- Harness - התוכנה שהאייג׳נט נמצא בתוכה. כוללת את הכלים, הזיכרון, סקילים וכל המעטפת. לדוגמה Claude Code, Codex, OpenClaw, OpenCode ועוד.
סביבת ההרצה והפריסה
- Runtime - במקרה של OpenShell הוא גם שכבת אבטחה וניהול.
- דרייבר - הטכנולוגיה שמריצה את הסנדבוקס.
- המארח, host - המחשב הפיזי או הווירטואלי שעליו הכול רץ.
האייג׳נט יכול להישאר זהה ולעבור בין Docker, MicroVM ומחשבים שונים.
כל אייג׳נט חייב סביבת הרצה כלשהי, אבל לא בהכרח agent runtime ייעודי כמו OpenShell.
זה מה שמריץ את האייג׳נט, התוכנה, ונותן לו מה שהוא צריך כדי לעבוד. סביבת הרצה בסיסית רק מריצה את האייג׳נט. Agent runtime כמו OpenShell עשוי גם לנהל הרשאות, מעקב ו-lifecycle.
המילה runtime משמשת לכמה סוגים שונים של סביבות הרצה כמו Node.js runtime, Bun, Container runtime ו-Model runtime.
למה OpenShell?
סביבת sandbox מספקת בידוד, אבל רמת הבידוד תלויה בטכנולוגיה ובהגדרות שלה.
בהתאם להגדרות, האייג׳נט עדיין עשוי לגשת לאינטרנט, לקבצים מחוברים ול-credentials שהוכנסו אליו.
קונטיינר, למשל, מספק בידוד בסיסי אך אינו בהכרח sandbox מאובטח בפני עצמו.
OpenShell מוסיף שכבת ניהול ואבטחה ייעודית:
- מדיניות ושליטה בהרשאות.
- ניהול credentials.
- ניטור.
- תקשורת מבוקרת עם הסביבה החיצונית.
הוא יושב בין האייג׳נט לסנדבוקס ומנהל את מעבר הגבול ביניהם.
הוא יוצר ומנהל sandboxes, מוסר ואוכף מדיניות, שולט בתקשורת עם שירותים חיצוניים, מנתב בקשות למודלים ומתעד את פעילות האייג׳נט.
OpenShell כולל בתוכו:
- סנדבוקס supervisor: יוצר את הקופסה המבודדת ואוכף את הגבולות שלה - הקבצים והתהליכים שמותרים בפנים. זה מה שמפעיל את האייג׳נט עם הגבולות שלו.
- מנוע מדיניות, policy engine: המדיניות כתובה בקובץ YAML. המנוע קורא אותה והופך אותה להחלטות של מותר או אסור לכל קובץ, כלי, תהליך ועוד.
- השער, gateway: הדלת לסביבה החיצונית. המקום ששולט ביציאה מהרשת, מחזיק את ה-credentials ומפתחות API ומנתב את הקריאות של המודל.
- בקרה ו-CLI: ניטור הפעילות של האייג׳נט וחילוץ לוגים שמראים מה האייג׳נט ניסה לעשות.
OpenShell משתמש ב-compute driver כדי ליצור את הסנדבוקס.
אפשר להריץ את OpenShell על לפטופ, על שרת פיזי, במכונה וירטואלית ובענן.
דוגמאות למדיניות
- מפתחות נמצאים ב-gateway ולא בתוך הקונטיינר.
- הרשאות כתיבה ניתנות במיקום ספציפי ולא מחוץ לו.
- אין לאייג׳נט גישה ישירה לסיסמאות ו-secrets כמו התחברות לענן.
עם זאת, ייתכן שיוגדרו credentials אחרים שכן יעברו לסנדבוקס. זה תלוי ב-provider ובמדיניות.
איך האייג׳נט קורא למודל בלי API key
האייג׳נט קורא לכתובת פנימית שקיימת רק בסנדבוקס, למשל inference.local, עם הפרומפט שהוא רוצה לשלוח.
הבקשה מגיעה ל-gateway שנמצא מחוץ לסנדבוקס.
ה-gateway מוסיף את המפתח ומעביר למודל.
המודל מחזיר תשובה לאייג׳נט, ללא גישה ישירה שלו ל-API key.
הערך המוסף של OpenShell מעבר לבידוד בקונטיינר
הקונטיינר מבודד מה-host, אבל עדיין יכולה להיות לו גישה חופשית לאינטרנט, למפתחות שנמצאים בו ולכל הקבצים שנמצאים בו.
OpenShell מוסיף מדיניות deny-by-default והגנות נוספות.
גם אם האייג׳נט נפרץ, OpenShell מצמצם את המידע והמערכות שאליהם הוא יכול לגשת בהתאם למדיניות שהוגדרה.
האייג׳נט שבניתי
בניתי אייג׳נט שמקבל שאלות בשפה טבעית, משתמש במודל Nemotron דרך OpenRouter וקורא מידע מחמישה פרויקטים ב-GCP.
הוא מסוגל:
- לקרוא לוגים מ-Cloud Logging.
- לקרוא מדדים מ-Cloud Monitoring.
- להריץ שאילתות BigQuery.
- לקרוא metadata על מופעי ומסדי Cloud SQL.
המודל בוחר כלי, אבל רק ארבע פונקציות מוגדרות זמינות לו.
איך הוא עובד
- קורא לכתובת מקומית ב-gateway שבה נמצא ה-API key.
- ה-gateway מוסיף את המפתח לבקשה ושולח למודל.
- המפתח נשאר ב-gateway.
- אפשר להסיר את
openrouter.aiמה-policy. אין צורך להעלות אתopenrouter.envלסנדבוקס.
איך הוא מוגבל
אין לו:
- גישה לכל יעד אינטרנט שאינו ברשימת חמשת ה-hosts.
- אפשרות כתיבה לחלקים מרכזיים במערכת הקבצים.
- גישה ישירה לקבצי המחשב האישי שלא הועלו או חוברו לסנדבוקס.
- אפשרות לחיבור ישיר למסד Cloud SQL באמצעות Postgres.
- אפשרות להשתמש ב-API נוסף של Google שלא הוגדר ב-policy.
השלבים לבניית אייג׳נט עם OpenShell
- בונים את האייג׳נט כרגיל או משתמשים ב-Claude Code, Hermes, כל אחד והסוכן האהוב עליו.
- מתקינים OpenShell CLI ו-Gateway.
- מוודאים שקיים compute driver כמו Docker, Podman או MicroVM.
- מגדירים inference ו-policy.
- מבקשים מ-OpenShell ליצור sandbox ולהפעיל בתוכו את האייג׳נט.
יש לי כבר פרויקטים נוספים שאני רוצה להכניס בהם את OpenShell.
מעבר ל-OpenShell, יש ל-NVIDIA עוד הרבה מוצרים מעניינים כמו משפחת המודלים Nemotron, ספריית NeMo Agent Toolkit, אריזת מודל כשירות NIM, ו-NemoClaw שהוא חבילה מוכנה מעל OpenShell.
המדריך האינטראקטיבי כולל את המודל המלא, סימולטור מדיניות, זרימת ה-inference ודרך הרצה מקומית שבדקתי.