1. מבוא
איזון העומסים של Google Cloud פרוס בקצה הרשת של Google בנקודות נוכחות (POP) של Google ברחבי העולם. תנועת משתמשים המופנית למאזן עומסים של שרת TCP Proxy מזינים את שרת ה-POP שהכי קרוב למשתמש, ולאחר מכן מאוזנת על פני הרשת הגלובלית של Google לקצה העורפי הקרוב ביותר שיש לו קיבולת מספקת.
Cloud Armor היא מערכת הזיהוי המבוזרת של Google מסוג מניעת שירות (DoS) וחומת אש של אפליקציות אינטרנט (WAF). Cloud Armor מחובר היטב למאזן העומסים של שרת ה-proxy של Google Cloud TCP Proxy, ומאפשר לכם לחקור תעבורת נתונים נכנסת כדי לאתר בקשות לא רצויות. התכונה של הגבלת הקצב של יצירת הבקשות בשירות הזה מאפשרת להגביל את תעבורת הנתונים למשאבים בקצה העורפי על סמך נפח הבקשות, ומונעת מתנועה לא רצויה לצרוך משאבים ברשת של הענן הווירטואלי הפרטי (VPC).
מאזני עומסים של שרת Proxy ל-TCP/SSL של Google Cloud מאפשרים להעביר בשרת proxy תעבורת נתונים מסוג TCP/ SSL בין שירותים לקצה העורפי שלכם.
ב-Codelab הזה, יוצרים מאזן עומסים בשרת proxy ל-TCP/SSL עם שירות לקצה העורפי ומשתמשים ב-Cloud Armor כדי להגביל את הגישה למאזן העומסים רק לקבוצה ספציפית של לקוחות משתמשים.
מה תלמדו
- איך ליצור מאזן עומסים בשרת proxy ל-TCP/SSL
- איך יוצרים מדיניות אבטחה של Cloud Armor
- איך יוצרים כלל של רשימת כתובות IP שנחסמו במאזן עומסים לשרת proxy של TCP/SSL ב-Cloud Armor
- איך יוצרים כלל להגבלת קצב של מאזן עומסים בשרתי TCP Proxy ב-Cloud Armor
- איך להוסיף את מדיניות האבטחה לשירות איזון עומסים של TCP/SSL בקצה עורפי
למה תזדקק?
- ידע בסיסי ב-Google Compute Engine ( codelab)
- ידע בסיסי בנושא רישות ו-TCP/IP
- ידע בסיסי בשורת הפקודה Unix/Linux
- כדאי להשלים סיור של רשתות ב-GCP עם רשתות ב-Google Cloud
2. דרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
הערה: כדי לגשת למסוף Cloud בקלות, צריך לזכור בעל-פה את כתובת ה-URL שלו, console.cloud.google.com.
חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, המערכת תתייחס אליה בתור PROJECT_ID.
הערה: אם משתמשים בחשבון Gmail, אפשר להשאיר את מיקום ברירת המחדל שמוגדר ל'ללא ארגון'. אם אתם משתמשים בחשבון Google Workspace, חשוב לבחור מיקום שמתאים לארגון שלכם.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
ממסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה בשיעור ה-Lab הזה יכולה להתבצע באמצעות דפדפן בלבד.
לפני שמתחילים
ב-Inside 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 של 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, אפשר לעיין בקטע 'Start 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
צירוף מדיניות לשירות לקצה העורפי של שרת proxy ל-TCP:
מריצים את הפקודה הבאה כדי לוודא שמדיניות האבטחה מצורפת לשירות לקצה העורפי של שרת ה-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 ובקטע 'משאבים' בוחרים את סוג המשאב בתור 'tcp_ssl_proxy_rule'. ולהגדיר את היעד העורפי כ-"my-tcp-lb".
בעזרת המשאבים שהוגדרו לסינון, אנחנו יכולים לוודא שכלל הדחייה של כתובת ה-IP פועל מהערך PRIORITY של 1,000 ברשומה ביומן, והפעולה המוגדרת "DENY" תקפה כי הן קיבלו הוראה מכלל הדחייה ובקשת ה-IP נדחתה, כפי שמוצג למטה
8. אימות הכלל להגבלת קצב של יצירת בקשות
כדי לוודא שהכלל להגבלת הקצב של יצירת הבקשות מופעל, אתם יכולים לשלוח בקשות רבות בפרק זמן קצר שחורג מהסף שהוגדר (5 בקשות לדקה).
בסיום, לוחצים על הצגת היומנים בשירות Cloud Armor, ואז עוברים לרישום בענן. שם אפשר לסנן את היומנים לפי מאזן העומסים כדי לראות את יומני השריון של הענן ברגע שהם נכנסים.
רשומה של הגבלת קצב של יצירת בקשות צריכה להיות בהתאם לצילום המסך שבהמשך. אנחנו יכולים לוודא שהכלל להגבלת הקצב של יצירת הבקשות פועל מהערך PRIORITY של 3,000 ברשומה ביומן ומפעולה שהוגדרה, הפעולה 'RATE BASED BAN' כפי שהוגדרה מהכלל להגבלת קצב של יצירת בקשות.
9. ניקוי הסביבה
חשוב להקפיד על ניקיון התשתית שנוצרה כדי להימנע מעלויות פעילות של תשתית שלא בשימוש.
הדרך המהירה ביותר היא למחוק את הפרויקט כולו ב-GCP כדי לוודא שלא יהיו משאבים תלויים ללא השגחה.עם זאת, צריך למחוק את המשאבים הנפרדים באמצעות הפקודות הבאות
מאזן העומסים בשרתי TCP Proxy
gcloud compute target-tcp-proxies delete my-tcp-lb
קבוצת המופעים
gcloud compute instance-groups unmanaged delete vm-ig1
2 המכונות הווירטואליות לבדיקה שנוצרו
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
מדיניות האבטחה של שריון הענן
gcloud compute security-policies delete rate-limit-and-deny-tcp