מדריך פתרון טכני — צוותי הנדסה

הפסיקו לשלם את מס ה-Python: מיפוי דינמי של AWS Security Groups לגדרות On-Prem בלי סיכוני Split-Brain

הצוות שלכם כותב Python כדי להדביק AWS Security Groups למדיניות Check Point. כל שינוי API schema שובר את זה. כל כשל חלקי משאיר את מערך ה-firewall שלכם במצב לא מאומת. יש דרך טובה יותר.

פורמט: בלוג הנדסי / מדריך פתרון קהל יעד: SOC Manager / DevSecOps / ראש תשתיות רשת זמן קריאה: 14 דקות

סיוט הסקריפטים השבירים: למה קוד ההדבקה של ה-Hybrid Cloud שלכם הוא מוקש

הנה הסצנה שכל מהנדס רשת ב-Amdocs, Wix, Monday.com, או כל חברת הייטק ישראלית בצמיחה מכיר: מפתח מרים מיקרו-סרביס חדש ב-eu-west-1. השירות צריך פורטים 443 ו-8080 פתוחים. Security Group ב-AWS עודכן תוך 30 שניות דרך Terraform. נגמר.

חוץ מזה שלא נגמר. האשכול Check Point בהרצליה עדיין מחזיק את הכללים של אתמול. ה-Cisco ASA ב-colo בפתח תקווה לא יודע שהשירות החדש קיים. ה-FortiGate באתר ה-DR בבאר שבע מריץ מדיניות מיום שלישי שעבר.

אז מישהו כותב סקריפט Python. בעצם, ארבעה סקריפטים. אחד לכל vendor. כל אחד אינטגרציה מותאמת אישית שקוראת ל-API אחר, מטפלת ב-authentication flow אחר, מפרסרת JSON response schema אחר, ומיישמת אסטרטגיית error-recovery אחרת (אם בכלל).

הגדרת מס ה-Python

מס ה-Python הוא העלות ההנדסית המצטברת של בנייה, דיבוג, תחזוקה, ותמיכת on-call בסקריפטים מותאמים אישית שקיימים אך ורק כדי לגשר על חוסר תאימות בין API-ים ספציפיים ל-vendor בתשתית רשת hybrid-cloud. זה מצטבר כל רבעון. זה אף פעם לא מתכווץ. וזה בלתי נראה במאזן עד שתקלה הופכת את זה לגלוי לכולם.

האנטומיה של סקריפט הדבקה טיפוסי

sync_aws_to_checkpoint.py Python
# This script breaks every 3-4 months. Nobody knows why. # Last author left the company in 2024. import boto3 import requests import json import time def sync_security_groups(): ec2 = boto3.client('ec2', region_name='eu-west-1') # Fetch all SGs - paginated, because AWS sgs = [] paginator = ec2.get_paginator('describe_security_groups') for page in paginator.paginate(): sgs.extend(page['SecurityGroups']) # Transform to Check Point format - this is where things get ugly for sg in sgs: for rule in sg['IpPermissions']: # Handle 17 different edge cases for port ranges, # CIDR blocks, security group references, prefix lists... cp_rule = transform_to_checkpoint(rule) # 340 lines of parsing logic # Push to Check Point Management API # Hope the session doesn't timeout mid-push # Hope the API schema hasn't changed in R81.20 response = checkpoint_api_call(cp_rule) # Another 200 lines if response.status_code != 200: # Log it and... keep going? Stop? Roll back? # Nobody documented the failure strategy. print(f"Failed: {response.text}") # ← This is the error handling.

ראינו את הסקריפט הזה. ראינו מאות וריאציות שלו בחברות הייטק ישראליות. הפרטים משתנים — לפעמים זה Fortinet במקום Check Point, לפעמים Azure NSGs במקום AWS — אבל הפתולוגיה זהה:

קונפיגורציות Split-Brain: פרצת האבטחה שאף אחד לא מבקר

המונח "split-brain" מגיע מהנדסת מערכות מבוזרות. הוא מתאר מצב שבו שני צמתים באשכול חושבים ששניהם הם הסמכות ומחזיקים מצב שונה. באבטחת רשת, split-brain זה כשהגדרת ענן אומרת דבר אחד והגדרת on-prem אומרת משהו אחר.

זה לא חשש תיאורטי. זו ודאות מתמטית בכל סביבה שמסתמכת על סקריפטים סדרתיים ולא-טרנזקציוניים כדי לסנכרן מדיניות firewall בין vendors.

SPLIT-BRAIN FAILURE SCENARIO Python Sync Script 50 rules to push sequentially Check Point #1 50/50 APPLIED Check Point #2 50/50 APPLIED Fortinet #1 27/50 FAILED Cisco ASA 0/50 SKIPPED SPLIT-BRAIN STATE 4 firewalls hold 3 different policy versions No rollback path available. Manual recovery required. Estimated MTTR: 2-6 hours + compliance incident report
איור 1 — כשל Split-Brain במהלך הרצת סקריפט סדרתית

המתמטיקה פשוטה. אם סקריפט הסנכרון שלכם דוחף כללים ל-N firewalls באופן סדרתי, ולכל push יש הסתברות כשל של 2% (timeout ב-API, פקיעת auth token, rate limit, חוסר התאמה בסכימה), ההסתברות לכשל אחד לפחות במערך של 50 firewalls היא:

P(at least one failure) = 1 - (0.98)^50 = 0.636 = 63.6% // On any given sync run across 50 firewalls, // you have a 63.6% probability of entering split-brain state. // This isn't a risk. It's a certainty.
ההשלכה הרגולטורית

לפי SOC 2, PCI DSS 4.0, ו-ISO 27001 Annex A.13, ארגונים חייבים להוכיח שבקרות אבטחה מוחלות באופן עקבי על כל סגמנטי הרשת. מצב split-brain של firewall הוא כשל בקרה מהותי. אם המבקר שואל "אתם יכולים להוכיח שלכל הגדרות שימשו מדיניות זהה ב-timestamp T?" והתשובה תלויה בשאלה האם סקריפט Python רץ עד הסוף — יש לכם ממצא.

Primitives של Cyberm8: אלמנטים של תשתית כאובייקטים מובנים

פלטפורמות אוטומציה כלליות — Tines, Make, n8n — מתייחסות לכללי firewall כ-"JSON payloads ששולחים POST ל-API." הן לא מבינות מה זה כתובת IP. הן לא מבינות מה זה subnet. הן לא יודעות שבלוק CIDR של /24 מכיל 254 hosts שמישים. הן מנגנוני תעבורה, לא מנועים שמבינים תשתית.

Cyberm8 מתייחסת לאלמנטים של תשתית רשת כ-primitives מהדרגה הראשונה. כתובות IP, subnets, VLANs, security groups, מדיניות firewall, רשומות access control — אלה לא blobs של JSON אטומים שמועברים בין API-ים. אלה אובייקטים typed, מאומתים ומנורמלים בין vendors, שהמנוע מבין באופן מובנה.

מה זה אומר בפועל

פעולה Python מותאם / iPaaS גנרי Cyberm8
מיפוי כלל AWS SG למדיניות Check Point 340 שורות קוד parsing + המרה לכל vendor אוטומטי: source/dest/port/protocol מופקים ומנורמלים
זיהוי חפיפת CIDR אתם בונים את זה. או שלא, ומקבלים כללים כפולים. מובנה: המנוע מזהה ומסיר כפילויות של טווחים חופפים
התאוששות מכשל חלקי הסקריפט עוצר. ניקוי ידני. מקווים שהלוגים נשמרו. Rollback טרנזקציוני: כל הצמתים חוזרים למצב מאומת
שינוי API schema של vendor הסקריפט נשבר. מעירים את המהנדס. דיבוג בשתיים בלילה. מופשט: מתאמי vendor מעודכנים על ידי Cyberm8; הלוגיקה שלכם ללא שינוי
עקביות push רב-vendor סדרתי. Best effort. אצבעות מוצלבות. אטומי: הכל-או-כלום על כל היעדים, או rollback בטוח
שביל ביקורת print(f"Failed: {response.text}") מלא: מי הפעיל, מה השתנה, איפה, מתי, כולל diff

עקביות טרנזקציונית: ההבדל הקריטי

כש-Cyberm8 דוחפת שינוי מדיניות ל-50 firewalls מ-4 vendors, היא פועלת כ-טרנזקציה מבוזרת. כל צומת יעד מקבל את מערכת ההוראות. כל צומת יעד מחיל אותה. אם צומת כלשהו מדווח על כשל — timeout, שגיאת validation, ניתוק קישוריות — המנוע יוזם rollback מיידי ומתואם על פני כל הצמתים למצב הקונפיגורציה האחרון שאומת.

// Cyberm8 Transactional Push - Conceptual Model Transaction txn = engine.beginPolicySync({ source: "aws:eu-west-1:sg-*", targets: [ "checkpoint:herzliya-gw01", "checkpoint:herzliya-gw02", "fortinet:petah-tikva-fg01", "cisco:beer-sheva-asa01" ], strategy: "ALL_OR_NOTHING" }); // If fortinet:petah-tikva-fg01 fails at rule 27: // → checkpoint:herzliya-gw01 ROLLED BACK to snapshot // → checkpoint:herzliya-gw02 ROLLED BACK to snapshot // → fortinet:petah-tikva-fg01 ROLLED BACK to snapshot // → cisco:beer-sheva-asa01 ROLLED BACK to snapshot // → Alert generated with full failure diagnostic // → Zero split-brain. Zero manual recovery.

זה לא שאיפה. ככה המנוע עובד היום. זו הסיבה ש-20+ לקוחות ארגוניים בישראל סומכים עליו לנהל את סנכרון מעטפת ה-hybrid-cloud שלהם בלי מהנדסי תחזוקת סקריפטים ייעודיים.

מצב נוכחי: מס ה-Python
~1.5 FTE

שעות הנדסה שנתיות שמושקעות בכתיבה, דיבוג ותחזוקה של סקריפטי סנכרון מותאמים. לא כולל זמן תגובה לאירועי split-brain.

עם Cyberm8
0 FTE

בלי סקריפטים מותאמים. בלי parsing של API-ים. בלי הערות בשתיים בלילה על כשלי סקריפטים. צוות הרשת שלכם מתמקד בארכיטקטורה, לא בקוד הדבקה.

פרסו Container Drop-In Instance תוך 45 דקות

Cyberm8 מגיעה כ-container קליל שנכנס לתשתית הקיימת שלכם. בלי תלות ב-SaaS. בלי direct cloud access. בלי vendor lock-in.

נתיב ההוכחה מהיר בכוונה. פרסו את ה-container. חברו אותו לחשבון AWS אחד ול-firewall אחד on-prem. ראו אותו מנרמל, ממפה ומסנכרן מדיניות אמיתית תוך פחות משעה. תביאו את מהנדס הרשת הכי ספקן שלכם.

  1. משכו את ה-container. Docker או Podman. רץ על כל host Linux עם 2GB RAM.
  2. חברו מקור ענן אחד. AWS, Azure, או GCP. תפקיד IAM לקריאה בלבד. הקמה של 5 דקות.
  3. חברו יעד on-prem אחד. Check Point, Fortinet, Palo Alto, או Cisco. הרשאות API בלבד.
  4. הריצו סנכרון. צפו במנוע מנרמל כללים בין סכימות vendor, מזהה התנגשויות, ודוחף באופן אטומי.
  5. שברו את זה בכוונה. סמלצו כשל באמצע push. צפו ב-rollback הטרנזקציוני.

הורידו את ה-Container Drop-In Instance

Container אחד. שעה אחת. אפס Python. הוכיחו שזה עובד מול מערך ה-firewall האמיתי שלכם לפני שמתחייבים למשהו.

בקשו גישה ל-Container ← או צרו קשר ישירות: info@cyberm8.com | ראש העין, ישראל