1. מבוא
איזון העומסים ב-Google Cloud נפרס בקצה הרשת של Google בנקודות נוכחות (POP) של Google ברחבי העולם. תעבורת משתמשים שמנותבת למאזן עומסים של TCP Proxy נכנסת לנקודת ה-PoP שהכי קרובה למשתמש, ואז מתבצע איזון עומסים ברשת הגלובלית של Google עד להגעה לקצה העורפי הקרוב ביותר שיש בו מספיק קיבולת זמינה.
Cloud Armor היא מערכת של Google לזיהוי מתקפות מניעת שירות (DDoS) וחומת אש ליישומי אינטרנט (WAF). שירות Cloud Armor משולב באופן הדוק עם מאזן העומסים של שרת ה-proxy של TCP ב-Google Cloud, ומאפשר לכם לבדוק את התנועה הנכנסת כדי לזהות בקשות לא רצויות. התכונה של הגבלת קצב בשירות הזה מאפשרת לכם לצמצם את התעבורה למשאבי קצה עורפיים על סמך נפח הבקשות, ומונעת מתעבורה לא רצויה לצרוך משאבים ברשת הענן הווירטואלי הפרטי (VPC).
מאזני עומסים (LB) של שרתי proxy ל-TCP/SSL ב-Google Cloud מאפשרים לכם להשתמש בשרת proxy לתעבורת נתונים מסוג TCP/ SSL בין שירותי הקצה העורפיים.
בשיעור Codelab הזה תיצרו מאזן עומסים של שרתי proxy ל-TCP/SSL עם שירות קצה עורפי, ותשתמשו ב-Cloud Armor כדי להגביל את הגישה למאזן העומסים רק לקבוצה ספציפית של לקוחות משתמשים.

מה תלמדו
- איך יוצרים מאזן עומסים של TCP/SSL proxy
- איך יוצרים מדיניות אבטחה של Cloud Armor
- איך יוצרים כלל של רשימת כתובות IP אסורות למאזן עומסים של שרת proxy ל-TCP/SSL ב-Cloud Armor
- איך יוצרים כלל להגבלת קצב של יצירת בקשות למאזן עומסים של שרת TCP Proxy ב-Cloud Armor
- איך מוסיפים את מדיניות האבטחה לשירות קצה עורפי של איזון עומסים ב-TCP/SSL
הדרישות
- ידע בסיסי ב-Google Compute Engine ( codelab)
- ידע בסיסי ברישות וב-TCP/IP
- ידע בסיסי בשורת הפקודה של Unix/Linux
- מומלץ להשלים סיור מודרך ברשת ב-GCP באמצעות Networking in the Google Cloud
2. דרישות
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.
הערה: כדי לגשת בקלות ל-Cloud Console, אפשר לזכור את כתובת ה-URL שלו: console.cloud.google.com.



חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
הערה: אם אתם משתמשים בחשבון Gmail, אתם יכולים להשאיר את מיקום ברירת המחדל ללא ארגון. אם אתם משתמשים בחשבון Google Workspace, אתם צריכים לבחור מיקום שמתאים לארגון שלכם.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' שבו מוסבר איך להשבית משאבים כדי שלא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
הפעלת Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

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

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-Lab הזה רק באמצעות דפדפן.
לפני שמתחילים
ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
הפעלת ממשקי ה-API
הפעלת כל השירותים הנדרשים
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. יצירת שירותים לקצה העורפי
יוצרים 2 מכונות באופן הבא – יוצרים את מכונה1-b1 באזור us-central1-b
gcloud compute instances create vm-1-b1 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
יוצרים את מכונה 1-b2 באזור us-central1-b
gcloud compute instances create vm-1-b2 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
יצירת קבוצת מופעים vm-ig1
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
יוצרים יציאה עם שם לקבוצת המופעים. בשיעור ה-Lab הזה נשתמש ביציאה 110
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
הוספת המופעים לקבוצת המופעים
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. הגדרת מאזן העומסים
בשלב הבא ניצור בדיקת תקינות.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
יצירת שירות לקצה העורפי
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
הוספת קבוצת המכונות לשירות הקצה העורפי
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
הגדרת proxy יעד ל-TCP
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
שמירת כתובות IPv4 סטטיות גלובליות
תשתמשו בכתובת ה-IP הזו כדי לגשת לשירות עם איזון עומסים.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
מגדירים כללי העברה גלובליים לכתובת ה-IP של איזון העומסים.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
--global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
5. יצירת כלל לחומת האש עבור מאזן העומסים בשרתי TCP Proxy
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
אחרי שיוצרים את מאזן העומסים, בודקים אותו באמצעות הפקודה הבאה
Curl LB_IP:110
בשלב הבא, יוצרים מכונות וירטואליות (VM) כדי לאמת את דחיית הגישה למאזן העומסים
צריך ליצור 2 מופעים, שלכל אחד מהם יש כתובת IP ציבורית, ולתת להם את השמות test-server1 ו-test-server2.
6. יצירת מדיניות אבטחה ב-Cloud Armor
בקטע הזה תיצרו כללי מדיניות לאבטחת ה-Backend ו-2 כללים במדיניות ב-Cloud Armor.
הכלל הראשון ימנע מסט מוגבל של כתובות IP לגשת למאזן העומסים של TCP על ידי הגדרת מדיניות אבטחה שתדחה כתובות IP מסוימות, והכלל השני יבצע הגבלת קצב.
- ב-Cloud Shell(הוראות לשימוש ב-Cloud Shell מופיעות בקטע 'הגדרה ודרישות'), יוצרים מדיניות אבטחה של שירות לקצה העורפי בשם rate-limit-and-deny-tcp באופן הבא:
gcloud compute security-policies create rate-limit-and-deny-tcp \
--description "policy for tcp proxy rate limiting and IP deny"
הוספת כללים למדיניות האבטחה
לאחר מכן מוסיפים כלל לרשימת הדחייה למדיניות Cloud Armor rate-limit-and-deny-tcp.
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
הוספת כלל להגבלת קצב ליצירת בקשות למדיניות האבטחה של Cloud Armor rate-limit-and-deny-tcp
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
צירוף מדיניות לשירות קצה עורפי של TCP Proxy:
מריצים את הפקודה הבאה כדי לוודא שמדיניות האבטחה מצורפת לשירות לקצה העורפי של TCP Proxy.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
הפעלת רישום ביומן במאזן עומסים של שרת proxy ל-TCP
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. אימות של כלל ברשימת הדחייה
כדי לוודא שכלל הרשימה לדחייה פועל, מתחברים לשרת הבדיקה שכתובת ה-IP שלו צוינה בכלל הרשימה לדחייה ומריצים את הפקודה הבאה:
Curl LB_IP:110
בקשות מיידיות עשויות להניב תגובה ממאזן העומסים, אבל צריך לחכות עד שהבקשה של curl תידחה או תיפסל, ואז לבדוק את היומנים ב-Cloud Logging כדי לוודא שכלל דחיית כתובת ה-IP הופעל.
עוברים אל Cloud Logging ובקטע Resources (משאבים) בוחרים את סוג המשאב tcp_ssl_proxy_rule ומגדירים את יעד ה-backend כ-my-tcp-lb.
אחרי שמגדירים את המשאבים לסינון, אפשר לוודא שכלל דחיית כתובות ה-IP פועל לפי ערך העדיפות 1000 ברשומה ביומן, ושהפעולה המוגדרת DENY פועלת כי שתיהן הוגדרו לפי כלל הדחייה וכתובת ה-IP שנדחית, כמו שמוצג בהמשך

8. אימות כלל להגבלת קצב של יצירת בקשות
כדי לוודא שכלל הגבלת הקצב פועל, שולחים הרבה בקשות בפרק זמן קצר שחורג מהסף שהוגדר (5 בקשות בדקה).
אחרי שמסיימים, לוחצים על 'הצגת יומנים' בשירות Cloud Armor. המערכת תעביר אתכם אל Cloud Logging, שם תוכלו לסנן את היומנים לפי מאזן העומסים כדי לראות את היומנים של Cloud Armor כשהם מגיעים.
רשומה של הגבלת קצב צריכה להיראות כמו בצילום המסך שלמטה. אפשר לוודא שכלל הגבלת הקצב פועל לפי הערך PRIORITY של 3000 ברשומה ביומן ולפי הפעולה שהוגדרה, הפעולה "RATE BASED BAN" פועלת כמו שצוין בכלל הגבלת הקצב.

9. ניקוי הסביבה
חשוב לנקות את התשתית שנוצרה כדי להימנע מהוצאות על תשתית שלא נמצאת בשימוש.
הדרך הכי מהירה היא למחוק את הפרויקט כולו ב-GCP כדי לוודא שלא נשארו משאבים לא פעילים ללא טיפול.עם זאת, אפשר למחוק את המשאבים בנפרד באמצעות הפקודות הבאות
מאזן העומסים TCP Proxy
gcloud compute target-tcp-proxies delete my-tcp-lb
קבוצת המופעים
gcloud compute instance-groups unmanaged delete vm-ig1
שתי מכונות וירטואליות לבדיקה נוצרו
gcloud compute instances delete Instance_name --zone=instance_zone
השירות לקצה העורפי
gcloud compute backend-services delete BACKEND_SERVICE_NAME
הכללים של Cloud Armor במדיניות
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
מדיניות האבטחה של Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp