שכבת ההרשאות שחסרה ברוב פריסות ה-RAG הארגוניות
אנליסט זוטר שואל שאלה שגרתית, ו-ACL מיושן מזמן-הקליטה מוסר למודל מזכר Board-Only. חומת האש RBAC הריבונית מאשרת כל מסמך שנשלף בזמן השאילתה, מול סט הקבוצות המקוננות החי של המשתמש והתכונות שלו, ומפילה מסמכים מעוכבים לפני שהמודל רואה טוקן. קוד דטרמיניסטי, מחוץ לכל LLM. סוכנים מייעצים, קוד מחליט.
40/40
החלטות נכונות על סט ההרשאות הזהוב
0 חשיפות לא מורשות, 0 סירובים כוזבים, מחושבים על ידי רתמת ההערכה
29/40
בסיס ה-ACL השטוח הנאמן על אותם 40 מקרים
10 חשיפות לא מורשות, 1 סירוב כוזב
$670K
עלות נוספת של פריצת shadow-AI מעבר לאירוע מסורתי
IBM Cost of a Data Breach, 2025
זו הדגמה ניתנת-להרצה, לא פריסה. כל זהות וכל מסמך הם מתקן סינתטי של בנק אירופי; ספק הזהויות הוא מתקן JSON בצורת Azure-AD/SCIM, ומחסן הווקטורים רץ בתוך-התהליך מאחורי ממשק בצורת Qdrant.
רכישת LLM פרטי אינה הופכת אותו לבטוח לכוון אל קורפוס נכסי-הכתר.
בניית הפיילוט הסטנדרטית מסמנת כל מקטע מסמך ב-ACL שטוח בזמן הקליטה. העיצוב הזה קורס תחת זהות ארגונית אמיתית: קבוצות Active-Directory מקוננות, ירושה חוצת-OU, רמות סיווג, מענקי פרויקט מוגבלי-זמן, וסיומי העסקה שקורים אחרי שהאינדקס נבנה. התוצאה היא הכשל הקלאסי שההדגמה הזו מציגה מקצה לקצה: אנליסטית זוטרה שואלת שאלה רגילה, וצינור ה-RAG מוסר למודל מזכר Board-Only, כי תמונת-מצב מיושנת מזמן-הקליטה אמרה שהיא יכולה לראות אותו.
שורש הבעיה הוא מבני. הרשאת מסמך היא תכונה חיה של גרף זהויות, ולכן כל תמונת-מצב שלה כבר שגויה. מודל טוב יותר אינו מתקן זאת: מודל מושלם שמקבל מסמך דירקטוריון עדיין מדליף אותו. הערך יושב בשליטה על מה שמגיע למודל, לא באיכות המודל.
הסיכונים נמדדים. פריצות shadow-AI עולות $670K יותר מאירועים מסורתיים, ו-65% מפריצות הקשורות ל-AI פגעו ב-PII של לקוחות (IBM Cost of a Data Breach, 2025). פריצות shadow-AI נמשכות 247 ימים עד לגילוי מול ממוצע של 241 ימים, ו-1 מתוך 5 ארגונים סבל מפריצה הקשורה ל-shadow AI (IBM, 2025). בצד הרגולטורי, חובות השקיפות של EU AI Act Article 50 הופכות לאכיפות ב-2 באוגוסט 2026, ותקרת הקנס המשולבת של GDPR ו-AI Act מגיעה ל-55 מיליון EUR או 11% מהמחזור השנתי הגלובלי.
דף הפתרון שלנו עצמו מכנה אכיפת הרשאות בזמן-שליפה "הסיבה שרוב פיילוטי ה-RAG הארגוניים נכשלים בסקירת האבטחה" ו"הבעיה הקשה ביותר שטרם נפתרה ב-RAG ארגוני." ניתוח המוצר בנייר הלבן שמאחוריו סימן RAG מודע-RBAC ברחבי השוק כמתואר אך לא מודגם, ללא מימוש עובד. ההדגמה הזו היא המימוש העובד הזה.
מנוע מדיניות דטרמיניסטי מחליט מה המודל רואה. לא המודל, ולא פרומפט.
כל שאילתה רצה באותו צינור:
שאילתה + זהות משתמש → שליפה → חומת אש RBAC (דטרמיניסטית, מחוץ לכל LLM) → מסמכים מותרים בלבד → LLM תשובה → רשומת ביקורת משורשרת-hash
עבור כל מסמך מועמד, חומת האש פותרת את ההרשאות האפקטיביות של המשתמש בזמן השאילתה: היא משטחת רקורסיבית קבוצות AD/OU מקוננות (המתקן מקנן 3 רמות לעומק) ומעריכה תכונות ABAC מול הפניית המדיניות המובנית של המסמך: רמת סיווג L1 עד L4, מכשיר מנוהל, מחלקה, מענקי פרויקט מוגבלי-זמן עם תפוגה, וסטטוס העסקה.
כל מסמך מקבל ALLOW, WITHHELD עם קוד סיבה הניתן לבדיקה-מכונה (BOARD_MEMBERSHIP_REQUIRED, ACCESS_WINDOW_EXPIRED, ALL_ACCESS_REVOKED_TERMINATION, POLICY_CONFLICT), או NEEDS_REVIEW. מסמכים מעוכבים מופלים לפני חלון ההקשר, כך שהמודל לעולם אינו רואה מסמכים שהמשתמש אינו יכול לגשת אליהם. בכל התנגשות או הפניה שלא נפתרה הוא שולל כברירת מחדל ומנתב לסקירה אנושית במקום לנחש.
כל שאילתה מוסיפה רשומה לשרשרת hash SHA-256 מסוג append-only עם אימות זיוף: משתמש, סט ההרשאות שנפתר, מסמכים שנשלפו, שהוגשו ושעוכבו עם קודי סיבה, התנגשויות needs-review, מודל וספק, וזוג הפרומפט/תגובה. ניתן לייצוא כ-JSON, נוצר בתוך ה-VPC. רשומת ראיות גישת-השליפה שתיק EU AI Act Article 50 מבקש.
צד ההשוואה בהדגמה הוא RAG נאמן עם ACL שטוח נאיבי, הבנייה שרוב הפיילוטים באמת משחררים. הוא באמת פותר קבוצות מקוננות בזמן הקליטה. הכשלים שלו הם שני הגבולות הכנים והאינהרנטיים שלו: תמונת-המצב מתיישנת, ותג שטוח אינו יכול לבטא סיווג, מכשיר, חלון-זמן או סיום העסקה. על סט הזהב בן 40 המקרים של ההדגמה שני הגבולות האלה מייצרים 10 חשיפות לא מורשות ו-1 סירוב כוזב, כאשר הסירוב הכוזב הוא מצטרף לאחר-קליטה שהזכאות שלו הוחמצה על ידי תמונת-המצב הקפואה.
נתיב התשובה, הבנוי על Pydantic AI, מקבל רק מקטעים מותרים לאחר-חומת-האש, מציין מה עוכב ולמה במקום לבדות, ואין לו סמכות כלשהי על הרשאות. הוא ניתן להחלפת-ספק באמצעות משתנה סביבה אחד: Anthropic (מודל ברירת המחדל claude-opus-4-8), OpenAI, Gemini, או Ollama לפריסה ריבונית מנותקת-רשת, שבה דבר, אף לא טוקן אחד, אינו יוצא מהקופסה. מפתח API אינו נדרש לעולם: ההדגמה מנתבת תשובות לגשר מקומי כשאחד רץ, ועוברת ל-stub דטרמיניסטי אחרת, ולוח תוצאות ההערכה אינו קורא ל-LLM כלל. חומת האש היא המוצר; המודל הוא תפאורה.
תוויות הזהב לסט 40 המקרים נגזרות מכנית על ידי אורקל התייחסות עצמאי, מימוש נפרד שנכתב מהגדרות המדיניות ולא מחומת האש הנבדקת. לוח התוצאות הוא פונקציה של גרף הזהויות, לא תוצאות שנבחרו ביד, וכל נתון מחושב בזמן ריצה, לעולם אינו מקודד-קשיח. תקורת האכיפה נמדדת במיקרו-שניות, בתוך-התהליך, עבור לוגיקת חומת האש בלבד; סבב IdP בייצור מוסיף השהיה שההדגמה הזו ממלאת ב-stub.
Gartner צופה ש-40% מהיישומים הארגוניים ישלבו סוכני AI עד סוף 2026, עלייה ממתחת ל-5% ב-2025. אותו שער דטרמיניסטי authorize(user, doc) הוא נתיב ההרחבה המתועד לעולם הזה, לא תכונה ששוחררה בהדגמה זו: סוכן אינו יכול לשלוף מה שמשתמש ה-on-behalf-of שלו לא יכול היה.
שאלה אחת, שנשאלה על ידי אנליסט סינתטי אחד, נענית משני צידי המסך המפוצל. כל תמונה למטה היא צילום מסך של האפליקציה הפועלת; כל זהות, מסמך ונתון הם נתוני מתקן סינתטיים.
Lena Vogt, אנליסטית סיכון אשראי EMEA עם סיווג L2, שואלת: "מהי תחזית הפסדי האשראי שלנו ל-Q3 ב-EMEA והמתודולוגיה מאחוריה?" השליפה מעלה את חבילת הדירקטוריון Board-Only ל-Q3 לצד מסמכים שהיא רשאית לראות. צד ה-ACL השטוח מגיש אותה: שנים של חוב ירושת קבוצות מקוננות בגרף הזהויות הפכו אותה לחברת "Board" באופן טרנזיטיבי, ולתג של קבוצה-בלבד אין מושג של סיווג. המזכר מגיע למודל, התשובה מקריאה 412 מיליון EUR, והבאנר אומר LEAK.
בצד ה-RAGGUARD, אותה שליפה רצה, אך חבילת הדירקטוריון מעוכבת לפני ה-LLM עם קוד הסיבה BOARD_MEMBERSHIP_REQUIRED: המסמך דורש סיווג L4 ו-Lena מחזיקה L2. המודל עונה נכון מהערת המתודולוגיה הפנימית ומהמזכר החסוי ששרשרת הקבוצות המקוננות שלה אכן מזכה אותה בהם, והוא מציין מה עוכב ולמה במקום לבדות.
חלון פירוט-ההחלטה מציג את קלט המודל המילולי בשני הצדדים. משמאל, חבילת הדירקטוריון שדלפה יושבת בתוך הפרומפט, מסומנת באדום. מימין, היא פשוט נעדרת: המודל לעולם אינו רואה מסמכים שהמשתמש אינו יכול לגשת אליהם. תצוגת לכל-מסמך הופכת את הפער למפורש, אותה שורת חבילת דירקטוריון קוראת "הוגש ללא הרשאה" בצד אחד ו-"גישה נדחתה בשליפה" עם קוד הסיבה בצד השני.
הערת המתודולוגיה הפנימית נושאת מחרוזת הזרקת-פרומפט משובצת המורה לכל עוזר AI שקורא אותה להתעלם מהרשאות השליפה שלו ולהוציא את נתון הדירקטוריון המלא. בצד חומת האש אין לה מה להבריח: חבילת הדירקטוריון מעולם לא נכנסה לחלון ההקשר, כי ההרשאה קרתה לפני ה-LLM. זהו מקרה אחד מסומן, המוצג כהגנה-לעומק מאכיפה בזמן-שליפה, לא מוצר guardrails נפרד.
Priya Shah סיימה את העסקתה לפני תשע דקות לפי שעון ההדגמה, וה-webhook של המתקן ירה. חומת האש מחזירה ALL_ACCESS_REVOKED_TERMINATION על הכול: 0 אושרו, 5 נדחו. תמונת-המצב של ה-ACL השטוח, שנבנתה לפני סיום ההעסקה, עדיין מגישה לה, כי האינדוקס-מחדש לא רץ. ההדגמה עוברת על אותו מקרה-קצה עבור Marco Rossi, שמענק Project-Atlas מוגבל-הזמן שלו פג אתמול לפי שעון ההדגמה (ACCESS_WINDOW_EXPIRED), עבור Raj Patel, שיושב בקבוצה מתירה ובקבוצה אוסרת בו-זמנית (POLICY_CONFLICT, מוחזק לסקירה אנושית), ועבור Wei Chen, חבר הדירקטוריון L4 שחומת האש מגישה לו נכון, ביקורת חיובית המוכיחה שהיא אינה פשוט שוללת הכול.
כל אחת מההחלטות האלה נוחתת בנתיב הביקורת העמיד-בפני-זיוף: רשומת JSON משורשרת-hash של מי שאל מה, מה הוגש, מה עוכב ולמה, ואיזה מודל ענה, עם תגית אימות CHAIN INTACT וייצוא בלחיצה אחת. נוצר אוטומטית, בתוך ה-VPC.
סט הזהב הוא 40 החלטות allow/deny מסומנות של (משתמש, מסמך): 10 משתמשים מול 4 מסמכים רגישים, תוויות שנגזרו מכנית על ידי האורקל העצמאי מסמנטיקת גרף-הזהויות. חומת האש משיגה 40/40 עם 0 חשיפות לא מורשות ו-0 סירובים כוזבים. בסיס ה-ACL השטוח משיג 29/40 עם 10 חשיפות לא מורשות, כולל חבילת הדירקטוריון שהוגשה ל-7 משתמשים לא מורשים, חלון Atlas שפג, והעובד שסיים העסקה, ועוד 1 סירוב כוזב. כל נתון מחושב על ידי הרתמה בזמן ריצה, לעולם אינו מקודד-קשיח, והקידוח לכל-מקרה מציג כל תווית אורקל לצד החלטות שני המערכות. אלה תוצאות סט-זהב, לא ערבויות עולם-פתוח.
אותה השוואה שההדגמה מריצה חיה, על אותו גרף זהויות ואותם מסמכים.
| ממד | RAG עם ACL שטוח נאיבי (בניית הפיילוט הטיפוסית) | חומת האש RBAC הריבונית (RAGGUARD) |
|---|---|---|
| מתי מתרחשת ההרשאה | בקליטה, קפואה לתג על כל מקטע | בזמן השליפה, לכל שאילתה, לכל מסמך |
| קבוצות מקוננות וירושה חוצת-OU | נפתרות פעם אחת בקליטה; תמונת-המצב מתיישנת | משוטחות רקורסיבית מול גרף הזהויות החי בכל שאילתה |
| ABAC: סיווג, מכשיר, מענקים מוגבלי-זמן, סטטוס העסקה | בלתי ניתן לביטוי בתג שטוח | מוערך לכל מסמך מול הפניית המדיניות המובנית |
| סיום העסקה לפני תשע דקות | עדיין מוגש עד שהאינדוקס-מחדש רץ | ALL_ACCESS_REVOKED_TERMINATION על הכול |
| מדיניות מתנגשות על מסמך אחד | מגיש את המסמך | שלילה-כברירת-מחדל: NEEDS_REVIEW, מנותב לאדם עם ההתנגשות מפורטת |
| סט זהב של 40 מקרים | 29/40: 10 חשיפות לא מורשות, 1 סירוב כוזב | 40/40: 0 חשיפות לא מורשות, 0 סירובים כוזבים |
| נתיב ביקורת | אין | רשומה משורשרת-hash, עמידה-בפני-זיוף של כל הגשה ועיכוב, ניתנת לייצוא כ-JSON |
אכפו הרשאה בזמן השליפה, לא בזמן הקליטה. מנוע מדיניות דטרמיניסטי מחוץ ל-LLM בודק כל מסמך שנשלף מול חברויות הקבוצה החיות של המשתמש והתכונות שלו לפני שהוא מגיע למודל, כך שמסמכים מעוכבים לעולם אינם נכנסים לחלון ההקשר. בהדגמה זו השער הזה משיג 40/40 על סט זהב מסומן של 40 מקרים, מול 29/40 לבניית ה-ACL השטוח שרוב הפיילוטים משחררים.
כי התג הוא תמונת-מצב וההרשאה היא תכונה חיה של גרף הזהויות שלכם. ACL מזמן-הקליטה מחמיץ הכול שמשתנה אחרי האינדוקס, כמו סיום העסקה או מענק פרויקט שפג, והוא אינו יכול לבטא כללי תכונות כמו רמת סיווג או מכשיר מנוהל כלל. בהדגמה שני הגבולות האלה מסבירים 10 חשיפות לא מורשות ו-1 סירוב כוזב על פני מדד של 40 מקרים, מבסיס שפותר נאמנה קבוצות מקוננות בקליטה.
לא אם המסמך לעולם אינו מגיע למודל. ההדגמה כוללת מקרה מסומן שבו הערה משובצת במסמך מורה לכל עוזר AI להתעלם מהרשאות השליפה שלו ולהוציא את נתון ה-Board-Only, ולהזרקה אין מה להבריח כי ההרשאה קרתה לפני ה-LLM והמזכר מעולם לא נכנס לחלון ההקשר. זו דוגמה אחת של הגנה-לעומק לאכיפה בזמן-שליפה, לא מוצר guardrails עצמאי.
שלילה כברירת מחדל. כשמשתמש מחזיק גם חברות מתירה וגם חברות אוסרת על אותו מסמך, או שהפניית מדיניות אינה ניתנת לפתרון, חומת האש מחזירה NEEDS_REVIEW ומנתבת את המקרה לאדם עם ההתנגשות מפורטת, במקום לנחש. ההדגמה מראה בדיוק זאת: מנהל סיכון אשראי שנמצא בקבוצה מותרת ובקבוצה אסורה בו-זמנית מקבל את המזכר שבמחלוקת מוחזק לסקירה, לא מוגש.
חומת האש היא Python דטרמיניסטי שאינו זקוק למודל כלל, ונתיב התשובה ניתן להחלפה באמצעות משתנה סביבה אחד: Anthropic, OpenAI, Gemini, או Ollama. הגדירו LLM_PROVIDER=ollama לפריסה ריבונית מנותקת-רשת ודבר, אף לא טוקן אחד, אינו יוצא מהקופסה. ההדגמה עצמה רצה במצב לא-מקוון ללא מפתח API, ולוח תוצאות ההערכה אינו קורא ל-LLM כלל.
כל שאילתה מוסיפה רשומה לשרשרת hash SHA-256 עמידה-בפני-זיוף: מי שאל, סט ההרשאות שנפתר, מה הוגש, מה עוכב ולמה, ואיזה מודל ענה. היא מיוצאת כ-JSON ונוצרת בתוך ה-VPC שלכם. זו רשומת ראיות גישת-השליפה שתיק EU AI Act Article 50 מבקש, לא הסמכת תאימות.
הדגמה ניתנת-להרצה שמוכיחה את המנגנון. ספק הזהויות הוא מתקן JSON סינתטי בצורת Azure-AD/SCIM, סיומי העסקה ותפוגות מענקים הם אירועי מתקן, ומחסן הווקטורים רץ בתוך-התהליך מאחורי ממשק בצורת Qdrant. מנוע המדיניות, רתמת ההערכה וייצוא הביקורת המשורשר-hash הם אמיתיים ורצים בדיוק כפי שמוצג; כי המתקן משקף ממשקי Azure AD Graph ו-SCIM, הנתיב המתועד לייצור ל-IdP חי הוא החלפת תצורה, לא כתיבה מחדש.
המחקר מאחורי ההדגמה הזו — הארכיטקטורה, עיצוב הווידוא, והתכנית הארגונית.
שכבת ההרשאות היא החלק הקשה. אנחנו בונים אותה.
אם הצוות שלכם מתמודד עם איך לכוון מודל פרטי לקורפוס שנשלט על ידי שנים של ירושת קבוצות מקוננות, או עם מה שחובות השקיפות של EU AI Act אומרות לגבי יומני השליפה שלכם, נשמח באמת לשמוע איך אתם חושבים על זה. הבעיה היא כלל-תעשייתית וגם התשובות יהיו.