הגדרת הגבלת קצב של יצירת בקשות

בדף הזה מוסבר איך להגדיר כללים ב-Google Cloud Armor כדי לאכוף הגבלות קצב לכל לקוח, על ידי הגדרת פעולת ויסות או חסימה לפי קצב. לפני שמגדירים הגבלת קצב, חשוב לקרוא את המידע בסקירה הכללית על הגבלת קצב.

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

בסעיפים הבאים מוסבר על כל התפקידים וההרשאות בניהול הזהויות והרשאות הגישה (IAM) שנדרשים להגדרת מדיניות אבטחה ב-Cloud Armor. במקרים לשימוש שמתוארים במסמך הזה, נדרשת רק ההרשאה compute.securityPolicies.create.

הגדרת הרשאות IAM למדיניות אבטחה של Cloud Armor

כדי לבצע את הפעולות הבאות, צריך את התפקיד 'אדמין אבטחה ב-Compute' (roles/compute.securityAdmin) בניהול הזהויות והגישה (IAM):

  • הגדרה, שינוי, עדכון ומחיקה של כללי מדיניות האבטחה של Cloud Armor
  • באמצעות השיטות הבאות של API:
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

משתמש עם התפקיד 'אדמין של רשת מחשוב' (roles/compute.networkAdmin) יכול לבצע את הפעולות הבאות:

  • הגדרת מדיניות אבטחה של Cloud Armor לשירות קצה עורפי
  • באמצעות השיטות הבאות של API:
    • BackendServices setSecurityPolicy
    • BackendServices list (gcloud בלבד)

משתמשים עם התפקיד 'אדמין אבטחה' (roles/iam.securityAdmin) ועם התפקיד 'אדמין של רשתות Compute' (roles/compute.networkAdmin) יכולים להציג מדיניות אבטחה של Cloud Armor באמצעות שיטות ה-API ‏SecurityPoliciesget, ‏list ו-getRule.

הגדרת הרשאות IAM לתפקידים בהתאמה אישית

בטבלה הבאה מפורטות הרשאות הבסיס של תפקידי IAM, שיטות ה-API שמשויכות להן והתפקידים שמעניקים את ההרשאה הזו.

הרשאת IAM שיטות API תפקידים
compute.securityPolicies.create SecurityPolicies insert אדמין אבטחת מחשוב (roles/compute.securityAdmin)
compute.securityPolicies.delete SecurityPolicies delete אדמין אבטחת מחשוב (roles/compute.securityAdmin)
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
אדמין אבטחה (roles/iam.securityAdmin)
compute.securityPolicies.list SecurityPolicies list אדמין אבטחה (roles/iam.securityAdmin)
שני התנאים הבאים:
  • compute.securityPolicies.use
  • compute.backendServices.
    setSecurityPolicy
BackendServices
setSecurityPolicy
אדמין ברשת Compute (roles/compute.networkAdmin)
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
אדמין אבטחת מחשוב (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

אי אפשר לשנות את הפעולה של כלל קיים מפעולת חסימה שמבוססת על קצב בקשות לפעולת הגבלה.

המאמרים הבאים