Cloud Armor ל-NLB/VM עם כללים בהגדרת המשתמש

1. מבוא

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

7bc9d3ed0c03b54f.png

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

f0a40260147e71b1.png

איור 1. Cloud Armor ל-VM עם הגנת IP ציבורית.

מה תלמדו

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

מה צריך להכין

  • הידע של TCP/IP
  • היכרות עם שורת הפקודה Unix/Linux

2. לפני שמתחילים

ב-Inside 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 מספר 10,000 לצורך בדיקות הבאות.

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) כדי לבדוק מדיניות אבטחה. ל-VM צריכה להיות כתובת IP ציבורית ויציאת UDP פתוחה 10000.

יצירת מכונה targetvm מ-Cloud Shell

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 Security

מ-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. יצירת מדיניות אבטחת קצה לרשת עם כללים מוגדרים מראש

היסט UDP מוגדר מראש על ידי המשתמש ומוגדר במדיניות שריון בענן. חבילה עם 'ערכי קיזוז' מעביר את בדיקת המדיניות ושולח אותה למכונה הווירטואלית בקצה העורפי. בדוגמה הבאה נגדיר שני ערכי "קיזוז" עם ערכים שונים.

הערך הראשון הוא מיד אחרי כותרת ה-UDP, זהה ל-2 בייטים 0x1700

הערך השני מיסט 8 בייט מכותרת ה-UDP, תואם בדיוק ל-4 בייטים 0x12345678

הערך המוגדר מראש שלמעלה יתורגם לתצוגת ביט של חבילת UDP.

cbfdaeb93292e07b.png

מ-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. צירוף מדיניות אבטחה ל-VM של היעד

מ-Cloud Shell צירוף מדיניות אבטחה ל-VM מוגנת.

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 לתאר את target VM, יופיע 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 של יעד ה-TargetVM (-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

ב-Target 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 ומקובצת לפי חסימה. הקו הכחול שמציין שהתנועה מותרת על פי כללי המדיניות. קו ירוק שמציין תנועה שחסומה על ידי כללי המדיניות.

b11ba15d87f99775.png

12. שלבי ניקוי

ממעטפת אחת של ענן בטרמינל, למחוק את רכיבי שיעור ה-Lab

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 עם כללים בהגדרת הלקוח