1. מבוא
מדיניות האבטחה של Cloud Armor משמשת להגדרת כללים מוגדרים על ידי המשתמש לסינון תעבורה בקצה הרשת של Google, במעלה הזרם מהתשתית שלכם. אפשר להשתמש במדיניות אבטחה של Network Edge כדי להגן על תעבורת נתונים שמכוונת לסוגי נקודות הקצה הבאים, ולאפשר או לחסום אותה: מאזן עומסים ברשת, העברת פרוטוקולים ומכונות וירטואליות עם כתובות IP ציבוריות.

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

איור 1. Cloud Armor למכונה וירטואלית עם הגנה על כתובת IP ציבורית.
מה תלמדו
- כללי מדיניות האבטחה של Cloud Armor עם הגדרת כללים מוגדרים על ידי המשתמש
- הגדרות בדיקה של UDP Offset.
מה תצטרכו
- ידע ב-TCP/IP
- ידע בשורת הפקודה של Unix/Linux
2. לפני שמתחילים
ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. יצירת רשת VPC יעד
בקטע הבא נגדיר רשתות VPC והגדרות רשת קשורות. מדיניות אבטחת קצה הרשת של Cloud Armor מבוססת על אזור, ולכן הגדרנו את כל המשאבים שקשורים אליה באזור asia-southeast1.
רשת VPC
מ-Cloud Shell
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
יצירת רשת משנה
מ-Cloud Shell
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
יוצרים כללים לחומת האש.
בקטע הזה נוסיף כלל לחומת האש כדי לאפשר את תעבורת ה-UDP הצפויה ליציאה 10000.
מ-Cloud Shell יוצרים כלל בחומת האש כדי לפתוח את יציאת UDP 10000 לבדיקה הבאה.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
מ-Cloud Shell, יוצרים כלל חומת אש שמאפשר ל-IAP להתחבר למכונות הווירטואליות.
gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. יצירת מכונות וירטואליות ליעד
יוצרים מכונה וירטואלית (VM) ליעד לבדיקת מדיניות האבטחה. למכונה הווירטואלית הזו צריכה להיות כתובת IP ציבורית ויציאת UDP פתוחה 10000.
מ-Cloud Shell, יוצרים את מכונת היעד targetvm
gcloud compute instances create targetvm \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=ca4nlb-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
5. הגדרת הגנה מתקדמת מפני התקפות DDoS ברשת
מ-Cloud Shell
gcloud compute security-policies create ca_advanced_ddos \
--type CLOUD_ARMOR_NETWORK \
--region asia-southeast1
gcloud compute security-policies update ca_advanced_ddos \
--network-ddos-protection ADVANCED \
--region asia-southeast1
gcloud compute network-edge-security-services create caedgepolicy \
--security-policy ca_advanced_ddos \
--region asia-southeast1
6. יצירת מדיניות אבטחה של Network Edge עם כללים שמוגדרים כברירת מחדל
יצירת מדיניות אבטחה של Network Edge
מ-Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
שינוי כלל ברירת המחדל
מ-Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. יצירת מדיניות אבטחה של Network Edge עם כללים שהוגדרו על ידי המשתמש
הזחה מוגדרת מראש של UDP ברמת המשתמש, שהוגדרה במדיניות Cloud Armor. מנות עם הערכים האלה של 'היסט' יעברו את בדיקת המדיניות ויישלחו למכונה הווירטואלית של העורף. בדוגמה הבאה נגדיר שני ערכים שונים לפרמטר offset.
הערך הראשון מופיע מיד אחרי כותרת ה-UDP, וצריך להיות זהה בדיוק ל-2 הבייטים 0x1700
הערך השני הוא אופסט של 8 בייטים בכותרת ה-UDP, שזהה בדיוק ל-4 בייטים 0x12345678
הערך שמוגדר מראש יתורגם לתצוגת ביטים של מנות UDP.

מ-Cloud Shell
gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG1_AT_0 \ --base=udp --offset=8 --size=2 --mask=0xFF00 \ --region=asia-southeast1 gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG2_AT_8 \ --base=udp --offset=16 --size=4 --mask=0xFFFFFFFF \ --region=asia-southeast1 gcloud alpha compute security-policies rules create 1000 \ --security-policy=customnetworkedge \ --network-user-defined-fields="SIG1_AT_0;0x1700,SIG2_AT_8;0x12345678" \ --action=allow --region=asia-southeast1
8. צירוף מדיניות אבטחה למכונת יעד וירטואלית
מ-Cloud Shell, מצרפים מדיניות אבטחה למכונה וירטואלית מוגנת.
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
מ-Cloud Shell, מתארים את המכונה הווירטואלית היעד ורואים ש-securityPolicy מצורף. מתעדים את כתובת ה-IP הציבורית לצורך בדיקות בהמשך.
gcloud alpha compute instances describe targetvm --zone=asia-southeast1-b
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: 35.240.148.100
networkTier: PREMIUM
securityPolicy: https://www.googleapis.com/compute/alpha/projects/<project>/regions/asia-southeast1/securityPolicies/customnetworkedge
ב-Cloud Shell, מנתקים את מדיניות האבטחה מהמכונה הווירטואלית המוגנת.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. מכינים משאבים לבדיקה.
יצירת רשת VPC לבדיקה
מ-Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
יצירת רשת משנה לבדיקה
מ-Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
יצירת חומת אש
מ-Cloud Shell, יוצרים כלל חומת אש שמאפשר ל-IAP להתחבר למכונות הווירטואליות.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
יצירת מכונה וירטואלית לבדיקה
מ-Cloud Shell
gcloud compute instances create test01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=test-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
10. אימות
מתחברים למסוף של מכונת ה-VM לבדיקה ומתקינים את מחולל החבילות packit.
sudo apt install packit
בהתאם לעיצוב של היסט UDP, משתמשים ב-packit כדי ליצור מנות UDP. אנחנו מדמים חבילת נתונים (-t udp) מממשק (-s ens4) כתובת ה-IP של המקור (-s 10.0.1.2) עם יציאות מקור (-S 10000) לכתובת ה-IP של היעד של מכונת היעד (-d 35.240.148.100) עם יציאות יעד (-D 10000). תוכן החבילה תואם לערכים (-p '0x 17 00 00 00 00 00 00 00 12 34 56 78'). נשלח מנות (-c 4).
sudo packit -m inject -t UDP -i ens4 -s 10.0.1.2 -d 35.240.148.100 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 4
במכונת ה-VM של היעד, מריצים את הפקודה tcpdump כדי לתעד את חבילת ה-UDP.
sudo tcpdump port 10000 -v -n
tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
06:36:18.434106 IP (tos 0x0, ttl 128, id 17173, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:19.433656 IP (tos 0x0, ttl 128, id 55641, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:20.433935 IP (tos 0x0, ttl 128, id 27161, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:21.434150 IP (tos 0x0, ttl 128, id 46782, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
אם נשנה את דפוסי התנועה במכונה הווירטואלית של הבדיקה, לא נוכל ללכוד חבילות במכונה הווירטואלית של היעד.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 33 33 00 00 00 00 00 00 12 34 56 78' -c 4
11. Telemetry
פותחים את Cloud Metric ומשתמשים ב-MQL שבהמשך כדי לשלוח שאילתות על נתוני טלמטריה של NetworkSercurityPolicy.
fetch networksecurity.googleapis.com/RegionalNetworkSecurityPolicy | metric 'networksecurity.googleapis.com/l3/external/packet_count' | filter (resource.policy_name == 'customnetworkedge') | align rate(1m) | every 1m | group_by [metric.blocked], [value_packet_count_mean: mean(value.packet_count)] | group_by 1m, [value_packet_count_mean_mean: mean(value_packet_count_mean)] | every 1m
יצירת תנועה בנפח גבוה באמצעות פקודת התאמה עם היסט.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
יצירת נפח תנועה גבוה באמצעות פקודת היסט לא תואמת.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 11 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
הטלמטריה מסוננת לפי policy_name ומקובצת לפי blocked. הקו הכחול מציין תנועה שמותרת לפי כללי המדיניות. קו ירוק שמציין תנועה שנחסמה על ידי כללי המדיניות.

12. שלבי הניקוי
מחיקת רכיבי מעבדה ממסוף Cloud Shell יחיד
gcloud compute instances delete targetvm --zone=asia-southeast1-b gcloud compute firewall-rules delete ca4nlb-udp10000 gcloud compute firewall-rules delete ca4nlb-iap-prod gcloud compute networks subnets delete ca4nlb-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete ca4nlb gcloud alpha compute security-policies delete customnetworkedge --region=asia-southeast1 gcloud alpha compute network-edge-security-services delete caedgepolicy --region=asia-southeast1 gcloud alpha compute security-policies delete ca_advanced_ddos --region=asia-southeast1 gcloud compute instances delete test01 --zone=asia-southeast1-b gcloud compute firewall-rules delete test-iap-prod gcloud compute networks subnets delete test-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete test
13. מעולה!
כל הכבוד, סיימתם את ה-Codelab.
מה נכלל
- כללי מדיניות אבטחה של Cloud Armor עם כללים שהוגדרו על ידי הלקוח