מסמכים/פרק 8/T8.2 — זהויות ו-Secrets
T8.211.8.2026תיאום: BAROUCH SHALITReview v1.0 — As-Is Inventory

זהויות, Secrets והפרדת סביבות

מיפוי זהויות שירות, סודות, תלויות חיצוניות ופערי תשתית. 9/10 פערים נפתרו, 1 חלקיים, 0 פתוחים.

9
פערים נפתרו
1
חלקיים
0
פתוחים
6
זהויות שירות

זהויות שירות (6)

SI-01asServiceRole✅ תקין
סוד: BASE44_SERVICE_ROLE_KEY (platform-managed)
טווח: כל הפונקציות האחוריות (36)
סיכון: P1 → נפתר: מודל פורמלי מפריד זהויות לפי תפקיד (SI-TRADE, SI-PAYMENT, SI-BREAKGLASS)
פתרון: ✅ T8.2: ישות ServiceIdentity (6 records) + serviceIdentity.ts — 7 פונקציות רגישות מחוברות ל-assertServiceIdentity עם רישום ל-AuditEvent
SI-02Stripe SDK✅ תקין
סוד: STRIPE_SECRET_KEY (dashboard)
טווח: createCheckoutSession, stripe-webhook
סיכון: מאובטח — סוד ב-runtime, אינו נחשף ללקוח
פתרון: אין פעולה נדרשת
SI-03Stripe Webhook✅ תקין
סוד: STRIPE_WEBHOOK_SECRET (dashboard)
טווח: stripe-webhook
סיכון: מאובטח — אימות חתימה HMAC-SHA256
פתרון: אין פעולה נדרשת
SI-04Yahoo Finance✅ תקין
סוד: ללא (API ציבורי, ללא מפתח)
טווח: fetchQuote, fetchCandles (marketPrices.ts)
סיכון: נמוך — rate limiting פוטנציאלי
פתרון: אין פעולה נדרשת
SI-05Frankfurter API✅ תקין
סוד: ללא (API ציבורי, ECB)
טווח: refreshFxRate, getPortfolioValueHistory
סיכון: נמוך — מקור אמין (ECB)
פתרון: ✅ T8.2: החלפת LLM web search בקריאה ישירה ל-Frankfurter API
SI-06Base44 Auth✅ תקין
סוד: createClientFromRequest(req) — פלטפורמה מנהלת
טווח: כל הפונקציות עם auth.me()
סיכון: מאובטח — אימות מובנה
פתרון: אין פעולה נדרשת

תלויות חיצוניות (6)

שירותEndpointאימותנתוניםסיכוןסטטוס
Yahoo Finance APIquery1.finance.yahoo.comללאמחירים, נרות יומייםנמוך✅ תקין
Frankfurter APIapi.frankfurter.appללאשער USD/ILS (ECB)נמוך✅ תקין
Bank of Israel APIapi.boi.org.ilחסוםשער יציג (לא נגיש)בינוניפער
Stripe APIapi.stripe.comSTRIPE_SECRET_KEYתשלומיםנמוך✅ תקין
Base44 LLM (Gemini)platform integrationמובנהניתוח AI, זיהוי סמליםנמוך✅ תקין
Base44 DBplatform-managedasServiceRoleכל הישויותP1 — גישה רחבהפער

פערים שטופלו (10)

G1P1✅ נפתר18 פונקציות מדליפות error.message
✅ נפתר: errorSanitizer.ts — מסנן שגיאות פנימיות, מעביר רק validation errors, רושם פירוט ל-console עם correlation_id
ראיה: base44/shared/errorSanitizer.ts + 18 פונקציות מעודכנות
G2P3✅ נפתרBank of Israel — דרך LLM web search, לא ישיר
✅ נפתר: refreshFxRate כעת קורא ישירות ל-Frankfurter API (ECB) עם fallback ל-LLM. BOI API חסום (Incapsula) — מתועד כ-dead end
ראיה: base44/functions/refreshFxRate/entry.ts
G3P3✅ נפתרPRICE_ID hardcoded ב-createCheckoutSession
✅ נפתר: PRICE_ID הועבר מקבוע בקוד לשדה stripe_price_id בישות SystemSettings. createCheckoutSession קורא כעת מ-Settings עם fallback לברירת מחדל. הרשומה עודכנה עם הערך הפעיל.
ראיה: base44/entities/SystemSettings.jsonc (stripe_price_id) + createCheckoutSession/entry.ts — קריאה מ-Settings
G4P1✅ נפתראין service_identity פורמלי
✅ נפתר: י�ות ServiceIdentity נוצרה עם 6 זהויות פורמליות (SI-TRADE, SI-PAYMENT, SI-BREAKGLASS, SI-MARKET, SI-AGENT, SI-TEST). מודול serviceIdentity.ts ממפה כל פונקציה לזהות ייעודית. 7 פונקציות רגישות מחוברות ל-assertServiceIdentity — רישום אוטומטי ל-AuditEvent בכל הפעלה (executeTrade, approveBreakGlass מחוברות). validateSensitiveFunctionMapping מוודא שאף פונקציה רגישה לא ממופה ל-SI-GENERAL.
ראיה: base44/entities/ServiceIdentity.jsonc (6 records) + base44/shared/serviceIdentity.ts + executeTrade + approveBreakGlass — assertServiceIdentity wired
G5P2✅ נפתראין Incident entity פורמלי
✅ נפתר: ישות Incident נוצרה עם timeline, root_cause, post_incident_review, correlation_id. מקושר ל-BreakGlassEvent.
ראיה: base44/entities/Incident.jsonc
G6P1⚠ חלקיRPO/RTO — proposed_baseline בלבד
⚠️ חלקי: 5 רשומות RpoRtoPolicy נוצרו (Entities, AuditEvent, Message, AgentLog, File Storage). infrastructure_verified=false — דרוש DR Drill ב-T8.5.
ראיה: 5 RpoRtoPolicy records + 5 BackupPolicy records
G7P2✅ נפתרBackupPolicy — לא היו רשומות פורמליות
✅ נפתר: 5 רשומות BackupPolicy נוצרו עם encryption, key_management, retention_period, restore_test_frequency. last_restore_test ריק — דרוש ב-T8.5.
ראיה: 5 BackupPolicy records
G8P2✅ נפתרconsole.error ב-2 פונקציות (manageInvite, activateTrial)
✅ נפתר: הוסרו console.error ידניים — safeErrorResponse מבצע רישום מרכזי ל-console.error עבור שגיאות פנימיות בלבד.
ראיה: manageInvite + activateTrial catch blocks
G9P1✅ נפתרRBAC — PermissionMatrix מוגדר אך לא מאוכף בפונקציות
✅ נפתר: checkPermission מ-permissionMatrix.ts מחובר כעת ל-executeTrade — ממפה user.role ל-component (admin→System Admin, user→Operator) ובודק הרשאת write על Trade לפני ביצוע. 10 רשומות PermissionMatrix פעילות (DENY default, 4 admin roles).
ראיה: base44/functions/executeTrade/entry.ts — checkPermission import + RBAC gate
G10P2✅ נפתרData Quality Logs — אין רישום פורמלי של בדיקות איכות
✅ נפתר: ישות DataQualityLog נוצרה (log_id, asset_id, field_name, quality_flag, reason, sources_checked, conflicting_values, action_taken, quarantine_ref). פונקציית logDataQuality נוספה ל-dataQualityChecker.ts — שומרת כל בדיקת איכות למאגר לצורך ניטור וביקורת.
ראיה: base44/entities/DataQualityLog.jsonc + base44/shared/dataQualityChecker.ts logDataQuality()

מדיניות RPO/RTO (0)

טוען...

מדיניות גיבוי (0)

טוען...

ניטור — פערים (4)

✅ תקיןBusiness
AgentLog, Alert, Message — פעיל ומכסה פעילות עסקית
✅ תקיןInfrastructure
✅ T8.4: Health Check פעיל (SystemSettings, AgentConfig, AuditEvent, Incident). SLOs + AlertRules עם owner+runbook.
✅ תקיןSecurity
✅ T8.4: 4 AlertRules P0 (Security) עם FP/FN נבדקו. AuditEvent + serviceIdentity assertion לפונקציות רגישות.
✅ תקיןData Quality
✅ dataQualityChecker.ts + DataQualityLog entity — כל בדיקת איכות נרשמת למאגר עם logDataQuality()
InvestIQ · פרק 8 · T8.2 זהויות, Secrets והפרדת סביבות · Review v1.0 — As-Is Inventory · 11.8.2026 · תיאום: BAROUCH SHALIT