1. מבוא
מאזני העומסים של Google Cloud נפרסים בקצה הרשת של Google בנקודות נוכחות (POP) של Google ברחבי העולם. תעבורת הנתונים של המשתמשים שמנותבת למאזן עומסים של שרת proxy ב-TCP נכנסת ל-POP הקרוב ביותר למשתמש, ולאחר מכן מתבצע איזון עומסים ברשת הגלובלית של Google אל הקצה העורפי הקרוב ביותר שיש לו קיבולת פנויה מספקת.
Cloud Armor הוא מערכת זיהוי של Google למתקפות מניעת שירות (DoS) מבוזרות וחומת אש ליישומי אינטרנט (WAF). Cloud Armor משולב בצורה הדוקה עם מאזן העומסים של שרת ה-proxy ב-TCP של Google Cloud, ומאפשר לבדוק את התנועה הנכנסת כדי לזהות בקשות לא רצויות. התכונה של הגבלת הקצב בשירות הזה מאפשרת לצמצם את התנועה למשאבי הקצה על סמך נפח הבקשות, ומונעת מתעבורה לא רצויה לצרוך משאבים ברשת הענן הווירטואלי הפרטי (VPC).
מאזני עומסים מסוג שרת proxy של TCP/SSL ב-Google Cloud מאפשרים לכם להעביר תעבורת נתונים מסוג TCP/ SSL דרך שרת proxy בין שירותי הקצה העורפי.
במעבדה הזו תלמדו ליצור מאזן עומסים מסוג TCP/SSL עם שירות לקצה עורפי, ולהגביל את הגישה למאזן העומסים רק לקבוצה ספציפית של לקוחות משתמשים.
מה תלמדו
- איך יוצרים מאזן עומסים בשרתי 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 ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
הערה: אפשר לגשת בקלות למסוף Cloud על ידי שמירה של כתובת ה-URL שלו, console.cloud.google.com.
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר נלקח ולא יתאים לכם, סליחה!). בהמשך הקודה לאימון נתייחס אליו בתור PROJECT_ID.
הערה: אם אתם משתמשים בחשבון Gmail, תוכלו להשאיר את מיקום ברירת המחדל כ'ללא ארגון'. אם אתם משתמשים בחשבון Google Workspace, בחרו מיקום שמתאים לארגון שלכם.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
השלמת הקודלאב הזה לא אמורה לעלות הרבה, אם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי', שבו מוסבר איך להשבית את המשאבים כדי שלא תחויבו אחרי סיום המדריך. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
הפעלת Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת ב-Cloud.
במסוף GCP, לוחצים על סמל 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 מכונות באופן הבא: יוצרים את instance1-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 של ה-LB.
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
בשלב הבא יוצרים מכונות וירטואליות לאימות דחיית הגישה ל-LB
צריך ליצור 2 מכונות, לכל אחת מהן כתובת IP ציבורית, בשמות test-server1 ו-test-server2.
6. יצירת מדיניות אבטחה ב-Cloud Armor
בקטע הזה תלמדו ליצור מדיניות אבטחה לקצה העורפי ו-2 כללים במדיניות ב-Cloud Armor.
הכלל הראשון ימנע מקבוצה מוגבלת של כתובות IP לגשת למאזן העומסים של TCP על ידי הגדרת מדיניות אבטחה לדחייה של כתובות IP מסוימות, והכלל השני יבצע הגבלת קצב.
- ב-Cloud Shell(לקבלת הוראות לשימוש ב-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:
מריצים את הפקודה הבאה כדי לוודא שמדיניות האבטחה מצורפת לשירות הקצה העורפי של שרת ה-proxy של TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
הפעלת רישום ביומן של מאזן עומסים בשרתי TCP Proxy
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. אימות כלל של רשימת דחייה
כדי לאמת את כלל רשימת הדחייה, מתחברים לשרת הבדיקה שכתובת ה-IP שלו צוינה בכלל רשימת הדחייה ומריצים את הפקודה הבאה:
Curl LB_IP:110
בקשות מיידיות עשויות לקבל תשובה מה-LB, אבל צריך להמתין עד ש-curl תידחה או תושלך, ואז לעיין ביומני Cloud Logging כדי לוודא את הרשומה ביומן של כלל הדחייה של כתובת ה-IP שהופעלה.
עוברים אל Cloud Logging, בקטע Resources (משאבים) בוחרים את סוג המשאב tcp_ssl_proxy_rule ומגדירים את היעד לקצה העורפי כ-my-tcp-lb.
בעזרת המשאבים שהוגדרו לסינון, אנחנו יכולים לאמת שכלל הדחייה של כתובת ה-IP בתוקף לפי הערך PRIORITY 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
שתי מכונות ה-VM לבדיקה שנוצרו
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