מדריך קלאודפלייר בעברית

פרק 9

Cloudflare Access ו-Zero Trust

בעבר, גישה למערכות ניהול פנימיות, ממשקי פיתוח או מסדי נתונים דרשה חיבור VPN ארגוני מסורבל. ברגע שעובד או קבלן התחברו ל-VPN, הם קיבלו גישה רחבה לכלל רכיבי הרשת הפנימית, מה שיצר סיכוני אבטחה משמעותיים של תנועה רוחבית (Lateral Movement) במקרה של פריצה.

Cloudflare Access (חלק מחבילת Zero Trust Network Access - ZTNA) מיישם את עקרון היסוד של אפס אמון: "לעולם אל תסמוך, תמיד תאמת". כל בקשה לכל נתיב או אפליקציה נבדקת ומאומתת בשרתי הקצה של קלאודפלייר עוד לפני שהיא מגיעה לתשתית המקורית.

זרימת אימות ב-Cloudflare Access:
[גולש / עובד] ──(פנייה אל admin.example.com)──> [שרתי הקצה של קלאודפלייר]
                                                        │
                                                        ├── אין אישור תקף? ──> [מסך אימות Access: OTP / Google / Okta]
                                                        │                               │ (הזנת קוד / אישור זהות)
                                                        │                               ▼
                                                        └── קיים טוקן JWT חתום ──> [העברת הבקשה אל שרת המקור]

#ארבעת רכיבי המדיניות (Policy Components)

כל כלל גישה ב-Access מורכב מארבעה אלמנטים מוגדרים:

מדיניות Access = [Action] + [Rule Type] + [Selector] + [Value]

#1. פעולה (Action)

  • Allow: מעניק גישה למשתמשים שעומדים בתנאי הכלל.
  • Block: חוסם מפורשות משתמשים (שימושי להחרגת משתמשים מסוימים מתוך קבוצה מורשית).
  • Bypass: עוקף לחלוטין את מנגנון האימות של Access (מתאים לנתיבי Webhook ציבוריים או קריאות API חיצוניות שאינן תומכות בהתחברות דפדפן).
  • Service Auth: אימות תקשורת בין מכונות (Machine-to-Machine) באמצעות טוקנים ייעודיים (Service Tokens) ללא צורך במסך התחברות אנושי.

#2. סוג הכלל (Rule Type)

  • Include (תנאי OR): המשתמש חייב לעמוד לפחות באחד מכללי ה-Include כדי לקבל הרשאה. חובה להגדיר לפחות Include אחד בכל מדיניות.
  • Require (תנאי AND): תנאי חובה נוסף שכל המשתמשים חייבים לעמוד בו (לדוגמה: המשתמש שייך לארגון וגם מתחבר מתוך שטח מדינת ישראל).
  • Exclude (תנאי NOT): חסימה מיידית של מי שתואם לתנאי זה, גם אם עמד בכללי ה-Include.

#3. בורר (Selector) וערך (Value)

המאפיינים הנבדקים בזמן אמת:

  • Emails: רשימת כתובות דוא"ל ספציפיות ([email protected]).
  • Emails Ending In: סיומת דוא"ל ארגונית (@company.com).
  • Country: מדינת המקור של הבקשה (Israel, United States).
  • IP Ranges: כתובות IP משרדיות קבועות (198.51.100.0/24).
  • Access Groups: קבוצות הרשאה שהוגדרו מראש.
  • SAML / OIDC Groups: קבוצות הרשאה המסונכרנות מ-Google Workspace, Microsoft Entra ID (Azure AD), Okta או GitHub.

#סדר הערכת הכללים (Evaluation Order)

כאשר מגיעה בקשה, קלאודפלייר מעריכה את הכללים בסדר הבא:

  1. בדיקת כללי Bypass ו-Service Auth מלמעלה למטה.
  2. בדיקת כללי Block ו-Allow לפי הסדר שהוגדר במסך.
  3. ברגע שנמצאת התאמה למדיניות Allow (ועמידה בכל תנאי ה-Require וללא Exclude), מונפק טוקן זיהוי (JWT) והמשתמש מועבר לאפליקציה.
  4. אם לא נמצאה שום התאמה, הגישה נחסמת כברירת מחדל (Default Deny).

#אימות מכונה למכונה (Service Tokens)

עבור תהליכי אוטומציה, מערכות CI/CD (כמו GitHub Actions) או קריאות שרת-אל-שרת, אין אפשרות להקליד קוד אימות בדפדפן.

פתרון קלאודפלייר הוא Service Tokens:

  1. בלוח Zero Trust נכנסים ל-Access → Service Credentials → Create Service Token.
  2. קלאודפלייר מייצרת שני ערכים: Client ID ו-Client Secret.
  3. יוצרים מדיניות מסוג Service Auth עבור הנתיב המבוקש.
  4. המערכת החיצונית שולחת את שני הערכים בכותרות הבקשה:
curl -H "CF-Access-Client-Id: <CLIENT_ID>" \
     -H "CF-Access-Client-Secret: <CLIENT_SECRET>" \
     https://api.example.com/internal/sync

#אימות טוקן JWT בשרת המקור

לאחר אימות מוצלח, קלאודפלייר מזריקה כותרת HTTP בשם Cf-Access-Jwt-Assertion המכילה טוקן JWT חתום קריפטוגרפית.

שרת המקור שלכם יכול לפענח את הטוקן, לאמת את החתימה מול שרתי קלאודפלייר (https://<team-name>.cloudflareaccess.com/cdn-cgi/access/certs), ולחלץ ישירות את כתובת הדוא"ל והזהות של המשתמש המחובר (email, identity_provider).

#מלכודות אבטחה נפוצות

  • שימוש שגוי ב-Everyone: הגדרת כלל Include מסוג Everyone פותחת את האפליקציה לכל אדם בעולם.
  • סתירה לוגית בתנאי Require: הגדרת שני תנאי Require למדינות שונות (למשל Require Israel ו-Require USA באותה מדיניות) תיצור מצב שאיש לעולם לא יוכל להתחבר, מאחר שבקשה אחת אינה יכולה להגיע משתי מדינות בו-זמנית.
  • עקיפה מקומית: שרת שחשוף ישירות לאינטרנט בכתובת IP ללא חסימת חומת אש יאפשר לתוקפים לגשת אליו ישירות תוך עקיפת מסך ה-Access. יש להשתמש ב-Cloudflare Tunnel או לחסום ברמת השרת כל IP שאינו שייך לקלאודפלייר.

בפרק הבא נכיר את Cloudflare Workers - פלטפורמת ה-Serverless להרצת קוד בקרבת המשתמש ללא צורך בניהול שרתים.