בדף הזה מוסבר איך להגדיר כללים ב-Google Cloud Armor כדי לאכוף הגבלות על קצב יצירת הבקשות לכל לקוח, על ידי הגדרת פעולת ויסות נתונים (throttle) או חסימה על סמך קצב יצירת הבקשות. לפני שמגדירים הגבלת קצב של יצירת בקשות, חשוב לקרוא את המידע בסקירה הכללית על הגבלת קצב של יצירת בקשות.
לפני שמתחילים
בקטעים הבאים מוסבר על כל התפקידים וההרשאות בניהול הזהויות והרשאות הגישה (IAM) שנדרשים להגדרת מדיניות אבטחה של Cloud Armor. בתרחישי השימוש שמתוארים במסמך הזה, נדרשת רק ההרשאה compute.securityPolicies.create.
הגדרת הרשאות IAM למדיניות אבטחה של Cloud Armor
כדי לבצע את הפעולות הבאות, צריך את התפקיד 'אדמין אבטחה ב-Compute' (roles/compute.securityAdmin) בניהול הזהויות והרשאות הגישה (IAM):
- הגדרה, שינוי, עדכון ומחיקה של כללי מדיניות האבטחה של Cloud Armor
- באמצעות השיטות הבאות של API:
SecurityPolicies insertSecurityPolicies deleteSecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies removeRule
משתמש עם התפקיד 'אדמין של רשת מחשוב' (roles/compute.networkAdmin) יכול לבצע את הפעולות הבאות:
- הגדרת מדיניות אבטחה של Cloud Armor לשירות קצה עורפי
- באמצעות השיטות הבאות של API:
BackendServices setSecurityPolicy-
BackendServices list(gcloudבלבד)
משתמשים עם התפקיד 'אדמין לענייני אבטחה' (roles/iam.securityAdmin) ועם התפקיד 'אדמין של רשתות Compute' (roles/compute.networkAdmin) יכולים להציג מדיניות אבטחה של Cloud Armor באמצעות שיטות ה-API SecurityPolicies get, list ו-getRule.
הגדרת הרשאות IAM לתפקידים בהתאמה אישית
בטבלה הבאה מפורטות הרשאות הבסיס של תפקידי IAM, שיטות ה-API שמשויכות להן והתפקידים שמעניקים את ההרשאה הזו.
| הרשאת IAM | שיטות API | תפקידים |
|---|---|---|
compute.securityPolicies.create |
SecurityPolicies insert |
אדמין לענייני אבטחה ב-Compute (roles/compute.securityAdmin) |
compute.securityPolicies.delete |
SecurityPolicies delete |
אדמין לענייני אבטחה ב-Compute (roles/compute.securityAdmin) |
compute.securityPolicies.get |
SecurityPolicies getSecurityPolicies getRule |
אדמין לענייני אבטחה (roles/iam.securityAdmin) |
compute.securityPolicies.list |
SecurityPolicies list |
אדמין לענייני אבטחה (roles/iam.securityAdmin) |
שני התנאים הבאים:
|
BackendServices |
אדמין של רשתות מחשוב (roles/compute.networkAdmin) |
compute.securityPolicies.update |
SecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies removeRule |
אדמין לענייני אבטחה ב-Compute (roles/compute.securityAdmin) |
כללים להגבלת קצב העברת נתונים
הפורמט של כללים להגבלת קצב בקשות ב-Google Cloud CLI הוא:
gcloud compute security-policies rules create PRIORITY \
--security-policy=SECURITY_POLICY \
{--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
--action "throttle" \
--rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
--rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
--conform-action=[allow] \
--exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
--exceed-redirect-type=[google-recaptcha|external-302] \
--exceed-redirect-target=REDIRECT_URL \
--enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
--enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
הגבלת קצב של יצירת בקשות במפתחות בודדים
לדוגמה, הפקודה הבאה ב-CLI של gcloud יוצרת כלל throttle בעדיפות 105 עם מגבלת קצב של 100 בקשות כל 60 שניות לכל כתובת IP ב-1.2.3.0/24. בקשות שחורגות ממגבלת ההגבלה מחזירות קוד סטטוס 429 Too Many Requests.
gcloud compute security-policies rules create 105 \
--security-policy SECURITY_POLICY \
--src-ip-ranges="1.2.3.0/24" \
--action=throttle \
--rate-limit-threshold-count=100 \
--rate-limit-threshold-interval-sec=60 \
--conform-action=allow \
--exceed-action=deny-429 \
--enforce-on-key=IP
לדוגמה, הפקודה הבאה ב-CLI של gcloud יוצרת כלל throttle בעדיפות 110 עם הגבלת קצב של 10 בקשות כל 60 שניות לכל ערך ייחודי של כותרת ה-HTTP User-Agent בכל הבקשות שמגיעות מכתובות IP ב-1.2.3.0/24. בקשות שחורגות ממגבלת ההגבלה יחזירו קוד סטטוס 429 Too Many Requests.
gcloud compute security-policies rules create 110 \
--security-policy SECURITY_POLICY \
--src-ip-ranges="1.2.3.0/24" \
--action=throttle \
--rate-limit-threshold-count=10 \
--rate-limit-threshold-interval-sec=60 \
--conform-action=allow \
--exceed-action=deny-429 \
--enforce-on-key=HTTP-HEADER \
--enforce-on-key-name='User-Agent'
לבסוף, אתם יכולים להטיל איסורים על משתמשים על סמך שיעור הבקשות שלהם, אם יש להם קובץ Cookie תקף של פטור מ-reCAPTCHA. לדוגמה, הפקודה הבאה ב-CLI של gcloud יוצרת כלל throttle בעדיפות 115 עם הגבלת קצב של 20 בקשות לכל 5 דקות לכל קובץ cookie ייחודי של פטור מ-reCAPTCHA בכל הבקשות שיש להן קובץ cookie תקף של פטור מ-reCAPTCHA. בקשות שחורגות ממגבלת ההגבלה מועברות לבדיקת reCAPTCHA. מידע נוסף על קובצי Cookie של פטור ועל הערכה של reCAPTCHA זמין במאמר סקירה כללית על ניהול בוטים ב-Cloud Armor.
gcloud compute security-policies rules create 115 \
--security-policy SECURITY_POLICY \
--expression="token.recaptcha_exemption.valid" \
--action=throttle \
--rate-limit-threshold-count=20 \
--rate-limit-threshold-interval-sec=300 \
--conform-action=allow \
--exceed-action=redirect \
--exceed-redirect-type=google-recaptcha \
--enforce-on-key=HTTP-COOKIE \
--enforce-on-key-name="recaptcha-ca-e"
הגבלת קצב של יצירת בקשות על סמך טביעות אצבעות של JA4 ו-JA3
אתם יכולים להשתמש בטביעות האצבע של JA4 ו-JA3 כמפתחות להגבלת קצב של יצירת בקשות. בדוגמה הבאה נוצר כלל throttle בעדיפות 1000 עם הגבלת קצב של 20 בקשות לכל 5 דקות, שתואם לבקשות עם הנתיב /login, על סמך טביעת האצבע של הלקוח ב-JA4. בקשות שחורגות ממגבלת ההגבלה נדחות.
gcloud compute security-policies rules create 1000 \
--security-policy SECURITY_POLICY \
--expression "request.path.matches('/login')" \
--action throttle \
--rate-limit-threshold-count 20 \
--rate-limit-threshold-interval-sec 300 \
--conform-action allow \
--exceed-action deny-429 \
--enforce-on-key-configs tls-ja4-fingerprint
הגבלת קצב של יצירת בקשות על סמך כתובת ה-IP של המשתמש
כשמקבלים בקשות שמגיעות דרך שרת proxy במעלה הזרם, אפשר להחיל הגבלת קצב של יצירת בקשות על סמך כתובת ה-IP של הלקוח המקורי. בדוגמה הבאה נוצר כלל throttle בעדיפות 1000 עם הגבלת קצב של 20 בקשות לכל 5 דקות, שתואם לבקשות עם הנתיב /login, על סמך כתובת ה-IP של הלקוח המקורי. בקשות שחורגות ממגבלת הוויסות יידחו.
gcloud compute security-policies rules create 1000 \
--security-policy SECURITY_POLICY \
--expression "request.path.matches('/login')" \
--action throttle \
--rate-limit-threshold-count 20 \
--rate-limit-threshold-interval-sec 300 \
--conform-action allow \
--exceed-action deny-429 \
--enforce-on-key-configs user-ip
מידע נוסף על תמיכה בכתובות IP של משתמשים זמין במאמר בנושא הפניה לשפת הכללים.
הגבלת קצב על סמך כמה מפתחות
אפשר גם לווסת את התנועה על סמך כמה מפתחות להגבלת קצב של יצירת בקשות באמצעות הדגל enforce-on-key-configs. הדגל הזה מחליף את הדגל enforce-on-key ואת הדגל enforce-on-key-name. הדגל enforce-on-key-configs דורש רשימה מופרדת בפסיקים של זוגות KEY=NAME, אבל לא צריך לציין שם לחלק מהמפתחות.
בדוגמה הבאה נוצר כלל throttle למדיניות POLICY_NAME בעדיפות 105 עם מגבלת קצב של 100 בקשות כל 60 שניות לכל שילוב של HTTP-PATH ושל site_id בכל הבקשות שמגיעות מכתובות IP ב-1.2.3.0/24. בקשות שחורגות ממגבלת הוויסות יחזירו קוד סטטוס 429 Too Many Requests.
gcloud compute security-policies rules create 105 \
--security-policy=POLICY_NAME \
--src-ip-ranges="1.2.3.0/24" \
--action=throttle \
--rate-limit-threshold-count=100 \
--rate-limit-threshold-interval-sec=60 \
--conform-action=allow \
--exceed-action=deny-429 \
--enforce-on-key-configs="HTTP-PATH,HTTP-COOKIE=site_id"
כללים לחסימות מבוססות-תעריף
הפורמט של כללים להרחקות שמבוססות על קצב בקשות ב-CLI של gcloud הוא:
gcloud compute security-policies rules create PRIORITY \
--security-policy=SECURITY_POLICY \
{--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
--action "rate-based-ban" \
--rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
--rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
--ban-duration-sec=BAN_DURATION_SEC \
--ban-threshold-count=BAN_THRESHOLD_COUNT \
--ban-threshold-interval-sec=BAN_THRESHOLD_INTERVAL_SEC \
--conform-action=[allow] \
--exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
--exceed-redirect-type=[google-recaptcha|external-302] \
--exceed-redirect-target=REDIRECT_URL \
--enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
--enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]
לדוגמה, הפקודה הבאה ב-CLI של gcloud יוצרת כלל חסימה שמבוסס על קצב, בעדיפות 100 לכל כתובת IP שהבקשות שלה תואמות לכותרת fish עם הערך tuna, וחוסמת אותה למשך 300 שניות אם הקצב שלה חורג ממגבלה של 50 בקשות לכל 120 שניות. בקשות שנחסמו מחזירות קוד סטטוס של 404 Not Found.
gcloud compute security-policies rules create 100 \
--security-policy=sec-policy \
--expression="request.headers['fish'] == 'tuna'" \
--action=rate-based-ban \
--rate-limit-threshold-count=50 \
--rate-limit-threshold-interval-sec=120 \
--ban-duration-sec=300 \
--conform-action=allow \
--exceed-action=deny-404 \
--enforce-on-key=IP
לדוגמה, הפקודה הבאה ב-CLI של gcloud יוצרת כלל חסימה מבוסס-קצב בעדיפות 101 כדי להגביל את כל הבקשות שקוד האזור שלהן תואם ל-US ל-10 בקשות לכל 60 שניות. הכלל גם אוסר על בקשות מהאזור US למשך 300 שניות אם הקצב שלהן חורג מהמגבלה של 1,000 בקשות ל-600 שניות.
בקשות שנחסמו מחזירות קוד סטטוס 403 Forbidden.
gcloud compute security-policies rules create 101 \
--security-policy sec-policy \
--expression "origin.region_code == 'US'" \
--action rate-based-ban \
--rate-limit-threshold-count 10 \
--rate-limit-threshold-interval-sec 60 \
--ban-duration-sec 300 \
--ban-threshold-count 1000 \
--ban-threshold-interval-sec 600 \
--conform-action allow \
--exceed-action deny-403 \
--enforce-on-key ALL
לדוגמה, הפקודה הבאה ב-CLI של gcloud יוצרת כלל חסימה מבוסס-קצב בעדיפות 102 כדי להגביל את כל הבקשות מכל טווח של כתובות IP במקור ל-20 בקשות לכל 60 שניות. הכלל גם אוסר על בקשות מכל טווח כתובות IP של מקור למשך 600 שניות, אם קצב הבקשות חורג מהמגבלה של 500 בקשות לכל 400 שניות. בקשות שנחסמו מחזירות קוד סטטוס 429 Too Many Requests.
gcloud compute security-policies rules create 102 \
--security-policy sec-policy \
--src-ip-ranges="*" \
--action rate-based-ban \
--rate-limit-threshold-count 20 \
--rate-limit-threshold-interval-sec 60 \
--ban-duration-sec 600 \
--ban-threshold-count 500 \
--ban-threshold-interval-sec 400 \
--conform-action allow \
--exceed-action deny-429 \
--enforce-on-key ALL
שינוי כלל ויסות נתונים לכלל חסימה מבוסס-קצב
אפשר להשתמש בפקודה הבאה כדי לשנות את הפעולה של כלל קיים מפעולת ויסות נתונים (throttle) לכלל חסימה שמבוסס על קצב.
gcloud compute security-policies rules update 105 \
--action=rate-based-ban \
--security-policy=sec-policy \
--ban-duration-sec=600
אי אפשר לשנות את הפעולה של כלל קיים מפעולת חסימה שמבוססת על קצב בקשות לפעולת הגבלה.