דוגמאות למדיניות אבטחה

אתם יכולים להגדיר מדיניות אבטחה ב-Google Cloud Armor כדי להגן על השירותים שלכם מפני התקפות מניעת שירות (DoS) והתקפות באינטרנט. המדיניות הזו משתמשת בתשתית הגלובלית של Google כדי לאבטח את האפליקציות שלכם ולשלוט בתנועה שעוברת דרך מאזני העומסים.

במאמר הזה מופיעות דוגמאות להגדרות של מדיניות אבטחה לסוגים שונים של מאזני עומסים.

הגדרת מדיניות אבטחה למאזני עומסים חיצוניים של אפליקציות

כדי להגדיר מדיניות אבטחה של Google Cloud Armor שתאפשר או תחסום תעבורת נתונים למאזן עומסים גלובלי חיצוני של אפליקציות (ALB) או למאזן עומסים קלאסי של אפליקציות (ALB), מבצעים את הפעולות הבאות :

  1. יוצרים כללי מדיניות אבטחה של Cloud Armor.
  2. מוסיפים כללים שמבוססים על כתובות IP, ביטויים מותאמים אישית או קבוצות ביטויים שהוגדרו מראש.
  3. מצרפים את מדיניות האבטחה לשירות קצה עורפי.
  4. מעדכנים את מדיניות האבטחה לפי הצורך.

בדוגמה הזו, יוצרים שני כללי מדיניות אבטחה של Cloud Armor ומחילים אותם על שירותי קצה עורפיים שונים.

דוגמה שבה שתי מדיניות אבטחה מוחלות על שירותי קצה עורפיים שונים.
דוגמה שבה שתי מדיניות אבטחה מוחלות על שירותי קצה עורפיים שונים (לחצו כדי להגדיל).

בדוגמה, אלה כללי מדיניות האבטחה של Cloud Armor:

  • mobile-clients-policy חל על משתמשים חיצוניים בשירותי games.
  • internal-users-policy חל על צוות test-network בארגון שלכם.

אתם מחילים את mobile-clients-policy על השירות games, ששירות הקצה העורפי שלו נקרא games, ואתם מחילים את internal-users-policy על השירות הפנימי test של צוות הבדיקה, ששירות הקצה העורפי שלו נקרא test-network.

אם מופעי ה-Backend של שירות לקצה העורפי נמצאים בכמה אזורים, המדיניות חלה על מופעים בכל האזורים. בדוגמה הזו, התג mobile-clients-policy חל על מכונות 1, 2, 3 ו-4 באזור us-central ועל מכונות 5 ו-6 באזור us-east.

יצירת הדוגמה

כדי ליצור את הגדרת הדוגמה שמוסברת בקטע הקודם, צריך לפעול לפי השלבים שבקטע הזה.

המסוף

הגדרת מדיניות האבטחה למשתמשים חיצוניים:

  1. נכנסים לדף Cloud Armor policies במסוף Google Cloud .

    כניסה למדיניות Cloud Armor

  2. לוחצים על יצירת מדיניות.

  3. בשדה שם מזינים mobile-clients-policy.

  4. בשדה Description (תיאור) מזינים Policy for external users.

  5. בקטע פעולת ברירת מחדל של כלל, בוחרים באפשרות דחייה.

  6. בקטע סטטוס הדחייה, בוחרים באפשרות 404 (לא נמצא).

  7. לוחצים על השלב הבא.

להוסיף עוד כללים:

  1. לוחצים על הוספת כלל.
  2. בשדה Description (תיאור) מזינים allow traffic from 192.0.2.0/24.
  3. בקטע Mode (מצב), בוחרים באפשרות Basic mode (IP addresses/ranges only) (מצב בסיסי (כתובות IP/טווחים בלבד)).
  4. בשדה התאמה, מזינים 192.0.2.0/24.
  5. בקטע פעולה, בוחרים באפשרות אישור.
  6. בשדה עדיפות מזינים 1000.
  7. לוחצים על סיום.
  8. לוחצים על השלב הבא.

החלת המדיניות על יעדים:

  1. לוחצים על הוספת יעד.
  2. ברשימה יעד, בוחרים יעד.
  3. לוחצים על סיום.
  4. לוחצים על יצירת מדיניות.

אפשר להפעיל את התכונה 'הגנה דינמית' של Google Cloud Armor:

  1. כדי להפעיל את ההגנה הדינמית, לוחצים על הפעלה.

הגדרת מדיניות האבטחה למשתמשים פנימיים:

  1. לוחצים על יצירת מדיניות.
  2. בשדה שם מזינים internal-users-policy.
  3. בשדה Description (תיאור) מזינים Policy for internal test users.
  4. בקטע פעולת ברירת מחדל של כלל, בוחרים באפשרות דחייה.
  5. בשדה סטטוס דחייה, בוחרים באפשרות 502 (שער שגוי).
  6. לוחצים על השלב הבא.

להוסיף עוד כללים:

  1. לוחצים על הוספת כלל.
  2. בשדה Description (תיאור) מזינים allow traffic from 198.51.100.0/24.
  3. בקטע Mode (מצב), בוחרים באפשרות Basic mode (IP addresses/ranges only) (מצב בסיסי (כתובות IP/טווחים בלבד)).
  4. בשדה התאמה, מזינים 198.51.100.0/24.
  5. בקטע פעולה, בוחרים באפשרות אישור.
  6. כדי להפעיל את האפשרות תצוגה מקדימה בלבד, מסמנים את תיבת הסימון הפעלה.
  7. בשדה עדיפות מזינים 1000.
  8. לוחצים על סיום.
  9. לוחצים על השלב הבא.

החלת המדיניות על יעדים:

  1. לוחצים על הוספת יעד.
  2. ברשימה יעד, בוחרים יעד.
  3. לוחצים על סיום.
  4. לוחצים על יצירת מדיניות.

gcloud

  1. יוצרים את כללי מדיניות האבטחה של Cloud Armor:

    gcloud compute security-policies create mobile-clients-policy \
        --description "policy for external users"
    
    gcloud compute security-policies create internal-users-policy \
        --description "policy for internal test users"
    
  2. מעדכנים את כללי ברירת המחדל במדיניות האבטחה כדי לדחות תנועה:

    gcloud compute security-policies rules update 2147483647 \
        --security-policy mobile-clients-policy \
        --action "deny-404"
    
    gcloud compute security-policies rules update 2147483647 \
        --security-policy internal-users-policy \
        --action "deny-502"
    
  3. מוסיפים כללים למדיניות האבטחה:

    gcloud compute security-policies rules create 1000 \
        --security-policy mobile-clients-policy \
        --description "allow traffic from 192.0.2.0/24" \
        --src-ip-ranges "192.0.2.0/24" \
        --action "allow"
    
    gcloud compute security-policies rules create 1000 \
        --security-policy internal-users-policy \
        --description "allow traffic from 198.51.100.0/24" \
        --src-ip-ranges "198.51.100.0/24" \
        --action "allow"
    
  4. מצרפים את מדיניות האבטחה לשירותים לקצה העורפי:

    gcloud compute backend-services update games \
        --security-policy mobile-clients-policy
    
    gcloud compute backend-services update test-network \
        --security-policy internal-users-policy
    
  5. אופציונלי: מפעילים את ההגנה הדינמית:

     gcloud compute security-policies update mobile-clients-policy \
         --enable-layer7-ddos-defense
    
     gcloud compute security-policies update internal-users-policy \
         --enable-layer7-ddos-defense
    

יצירת מדיניות אבטחה

אפשר להשתמש במסוף Google Cloud או ב-CLI של gcloud כדי ליצור מדיניות אבטחה. ההוראות האלה מניחות שאתם מגדירים מדיניות עבור איזון עומסים ושירות קצה עורפי קיימים. דוגמה מופיעה בקטע יצירת הדוגמה.

המסוף

כדי ליצור כללים ולצרף מדיניות אבטחה לשירות קצה עורפי:

  1. נכנסים לדף Cloud Armor policies במסוף Google Cloud .

    כניסה למדיניות Cloud Armor

  2. לוחצים על יצירת מדיניות.

  3. בשדה Name, מזינים את שם המדיניות.

  4. אופציונלי: מזינים תיאור של המדיניות.

  5. בקטע סוג המדיניות בוחרים באפשרות מדיניות אבטחה של ה-Backend או מדיניות אבטחה של Edge.

  6. בקטע פעולת ברירת מחדל של כלל, בוחרים באפשרות אישור כדי לאפשר גישה כברירת מחדל, או באפשרות דחייה כדי לדחות גישה כברירת מחדל.

    כלל ברירת המחדל הוא כלל בעדיפות הכי נמוכה, והוא נכנס לתוקף רק אם אף כלל אחר לא חל.

  7. אם מגדירים כלל Deny (דחייה), בוחרים סטטוס דחייה Response code (קוד תגובה). קוד הסטטוס הזה מוחזר על ידי Cloud Armor אם בקשה נדחית.

  8. לוחצים על השלב הבא.

להוסיף עוד כללים:

  1. לוחצים על הוספת כלל.
  2. אופציונלי: מזינים תיאור לכלל.
  3. בוחרים את המצב:

    • מצב בסיסי: מאפשר או דוחה תנועה על סמך כתובות IP או טווחי כתובות IP.
    • מצב מתקדם: מאפשר או דוחה תנועה על סמך ביטויי כללים.
  4. בשדה התאמה, מציינים את התנאים שהכלל חל עליהם:

  5. בקטע פעולה, בוחרים באפשרות אישור או דחייה.

  6. כדי להפעיל את מצב התצוגה המקדימה, בוחרים באפשרות הפעלה. במצב תצוגה מקדימה, Cloud Armor מתעד את ההשפעה של הכלל בלי לאכוף אותו.

  7. מזינים את העדיפות של הכלל (0 עד 2,147,483,646). סדר ההערכה של הכללים

  8. לוחצים על סיום.

  9. כדי להוסיף עוד כללים, לוחצים על הוספת כלל. אחרת, לוחצים על השלב הבא.

החלת המדיניות על יעדים:

  1. לוחצים על הוספת יעד.
  2. ברשימה יעד, בוחרים יעד.
  3. כדי להוסיף עוד יעדים, לוחצים על הוספת יעד.
  4. לוחצים על סיום.
  5. לוחצים על יצירת מדיניות.

gcloud

  1. כדי ליצור כללי מדיניות אבטחה של Cloud Armor, משתמשים בפקודה gcloud compute security-policies create.

    משתמשים בדגל --type כדי לציין CLOUD_ARMOR (backend) או CLOUD_ARMOR_EDGE (edge). אם לא מציינים את הדגל, ‫Cloud Armor יוצר מדיניות אבטחה של קצה עורפי:

     gcloud compute security-policies create NAME \
         [--type=CLOUD_ARMOR|CLOUD_ARMOR_EDGE] \
         [--file-format=FILE_FORMAT | --description=DESCRIPTION] \
         [--file-name=FILE_NAME]
    
    

    מחליפים את מה שכתוב בשדות הבאים:

    • NAME: השם של מדיניות האבטחה
    • FILE_FORMAT: הפורמט של הקובץ שצוין ב---file-name. מציינים yaml או json
    • DESCRIPTION: תיאור מדיניות האבטחה
    • FILE_NAME: השם של קובץ שמכיל ייצוא של מדיניות האבטחה בפורמט YAML או JSON

    הפקודה הבאה מעדכנת מדיניות, מפעילה ניתוח של JSON ומשנה את רמת היומן ל-VERBOSE:

     gcloud compute security-policies update my-policy \
         --json-parsing=STANDARD \
         --log-level=VERBOSE
    
  2. כדי להוסיף כללים למדיניות אבטחה, משתמשים בפקודה gcloud compute security-policies rules create PRIORITY.

     gcloud compute security-policies rules create PRIORITY  \
         [--security-policy POLICY_NAME] \
         [--description DESCRIPTION] \
         --src-ip-ranges IP_RANGE,... | --expression EXPRESSION \
         --action=[ allow | deny-403 | deny-404 | deny-502 ] \
         [--preview]
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PRIORITY: העדיפות של הכלל. סדר ההערכה של הכללים
    • POLICY_NAME: השם של מדיניות האבטחה
    • DESCRIPTION: תיאור הכלל
    • IP_RANGE,...: רשימה מופרדת בפסיקים של טווחי כתובות IP
    • EXPRESSION: ביטוי בשפת הכללים של Cloud Armor

    לדוגמה, הפקודה הבאה מוסיפה כלל לחסימת תנועה מ-192.0.2.0/24 ומ-198.51.100.0/24. העדיפות של הכלל היא 1000:

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
         --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
         --action "deny-403"
    

    אם מוסיפים את הדגל --preview, הכלל נוסף למדיניות אבל לא נאכף, וכל תנועה שמפעילה את הכלל מתועדת בלבד.

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
         --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
         --action "deny-403" \
         --preview
    

    משתמשים בדגל --expression כדי לציין תנאי בהתאמה אישית. מידע על מאפייני שפה של כללים מותאמים אישית הפקודה הבאה מוסיפה כלל שמאפשר תנועה מכתובת ה-IP‏ 1.2.3.4 שמכילה את המחרוזת example בכותרת User-Agent:

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \
         --action allow \
         --description "Block User-Agent 'example'"
    

    הפקודה הבאה מוסיפה כלל לחסימת בקשות אם קובץ ה-Cookie של הבקשה מכיל ערך ספציפי:

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')" \
         --action "deny-403" \
         --description "Cookie Block"
    

    הפקודה הבאה מוסיפה כלל לחסימת בקשות מהאזור AU:

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "origin.region_code == 'AU'" \
         --action "deny-403" \
         --description "AU block"
    

    הפקודה הבאה מוסיפה כלל לחסימת בקשות מהאזור AU שלא נמצאות בטווח כתובות ה-IP שצוין:

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "origin.region_code == 'AU' && !inIpRange(origin.ip, '1.2.3.0/24')" \
         --action "deny-403" \
         --description "country and IP block"
    

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

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "request.path.matches('/example_path/')" \
         --action "deny-403" \
         --description "regex block"
    

    הפקודה הבאה מוסיפה כלל לחסימת בקשות אם הערך המפוענח ב-Base64 של הכותרת user-id מכיל ערך ספציפי:

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \
         --action "deny-403" \
         --description "country and IP block"
    

    הפקודה הבאה מוסיפה כלל שמשתמש בקבוצת ביטויים שהוגדרה מראש כדי לצמצם את הסיכון להתקפות SQLi:

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "evaluatePreconfiguredWaf('sqli-v422-stable')" \
         --action "deny-403"
    

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

     gcloud compute security-policies rules create 1000 \
         --security-policy my-policy \
         --expression "evaluatePreconfiguredWaf('sourceiplist-fastly')" \
          --action "allow"
    

הגדרת מדיניות אבטחה למאזני עומסים חיצוניים אזוריים של אפליקציות (ALB)

כדי להגדיר מדיניות אבטחה של Cloud Armor בהיקף אזורי למאזני עומסים אזוריים חיצוניים של אפליקציות, פועלים לפי השלבים שמפורטים בקטע הזה.

הגנה על עומסי עבודה (workload) עם איזון עומסים אזורי

כדי להגדיר מדיניות אבטחה לשירות קצה עורפי בהיקף אזורי:

  1. יוצרים מדיניות אבטחה בהיקף אזורי.

     gcloud compute security-policies create POLICY_NAME \
         --type=CLOUD_ARMOR \
         --region=REGION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • POLICY_NAME: השם של מדיניות האבטחה
    • REGION: האזור שבו רוצים ליצור את מדיניות האבטחה
  2. מצרפים את מדיניות האבטחה בהיקף אזורי לשירות לקצה העורפי בהיקף אזורי. מחליפים את BACKEND_NAME בשם של שירות לקצה העורפי הקיים שלכם בהיקף אזורי.

     gcloud compute backend-services update BACKEND_NAME \
         --security-policy=POLICY_NAME \
         --region=REGION
    

דוגמה: החלת מדיניות אבטחה בהיקף אזורי

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

  1. יצרתם שירותים לקצה העורפי עם איזון עומסים בהיקף אזורי באזור.
  2. השבתתם כללי מדיניות קיימים לאבטחה בהיקף גלובלי בפריסה.
  3. יצרתם מדיניות אבטחה בהיקף אזורי וצירפתם אותה לאותו אזור (כמו בקטע הקודם).

אפשר להוסיף כללי WAF וכללים מתקדמים אחרים למדיניות באמצעות הפקודות הבאות:

  • מוסיפים כלל WAF למדיניות:

    gcloud compute security-policies rules create 1000 --action=deny-404 \
        --expression="evaluatePreconfiguredWaf('xss-v422-stable', ['owasp-crs-v042200-id941100-xss', 'owasp-crs-v042200-id941160-xss'])" \
        --security-policy=POLICY_NAME \
        --region=REGION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • POLICY_NAME: השם של מדיניות האבטחה
    • REGION: האזור של מדיניות האבטחה
  • מוסיפים כלל מתקדם למדיניות:

    gcloud compute security-policies rules create 1000 --action=allow \
        --expression="has(request.headers['cookie']) && request.headers['cookie'].contains('80=EXAMPLE')" \
        --security-policy=POLICY_NAME \
        --region=REGION
    
  • מוסיפים כלל להגבלת קצב הבקשות למדיניות:

    gcloud compute security-policies rules create 1000 --action=throttle \
        --src-ip-ranges="1.1.1.1/32" \
        --rate-limit-threshold-count=1000 \
        --rate-limit-threshold-interval-sec=120 \
        --conform-action="allow" \
        --exceed-action="deny-429" \
        --enforce-on-key=IP \
        --ban-duration-sec=999 \
        --ban-threshold-count=5000 \
        --ban-threshold-interval-sec=60 \
        --security-policy=POLICY_NAME \
        --region=REGION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • POLICY_NAME: השם של מדיניות האבטחה
    • REGION: האזור של מדיניות האבטחה

המאמרים הבאים