ההוראות האלה יעזרו לכם לפתור בעיות שקשורות לכללי מדיניות האבטחה של Google Cloud Armor.
בעיות כלליות
בקטע הזה מפורטות בעיות נפוצות שנתקלים בהן במהלך השימוש ב-Cloud Armor.
ניפוי באגים במדיניות אבטחה
אם אתם צריכים מידע נוסף על מה שמפעיל אירוע מסוים בכללים שהוגדרו מראש, כדאי לקרוא את המאמר שימוש ברישום ביומן של בקשות, ואז להפעיל רישום ביומן מפורט. ב-Cloud Logging נרשמים ביומנים פרטים ברמה גבוהה יותר, שאפשר להשתמש בהם כדי לנתח ולנפות באגים במדיניות ובכללים.
התעבורה מורשית למרות שמוגדר כלל דחייה במדיניות האבטחה של Cloud Armor
כדי לפתור את הבעיה, פועלים לפי השלבים הבאים:
מוודאים שמדיניות האבטחה של Cloud Armor מצורפת לשירות קצה עורפי של יעד. לדוגמה, הפקודה הבאה מתארת את כל הנתונים שמשויכים לשירות לקצה העורפי
BACKEND. התוצאות שמוחזרות חייבות לכלול את השם של כללי מדיניות האבטחה של Cloud Armor שמשויכים לשירות הקצה העורפי הזה.gcloud compute backend-services describe BACKEND
מחליפים את
BACKENDבשם של שירות ה-Backend.בודקים את יומני הרישום של HTTP(S) כדי לראות לאיזו מדיניות ולאיזה כלל התאימה התעבורה שלכם, ומה הייתה הפעולה שבוצעה. כדי לראות את היומנים, משתמשים ב-Cloud Logging.
זוהי דוגמה ליומן של בקשה מותרת, עם הדגשה של השדות הרלוונטיים. בודקים את השדות הבאים ומוודאים שהם תואמים לכלל שהגדרתם כדי לחסום את התנועה:
- הערך של
configuredActionצריך להיות זהה לפעולה שהוגדרה בכלל. - הערך של
nameצריך להיות זהה לשם של כללי מדיניות האבטחה של Cloud Armor שמצורפים לשירות לקצה העורפי הזה. - הערך של
outcomeצריך להיות זהה לערך שלconfiguredAction. - הערך של
priorityצריך להיות זהה למספר העדיפות של הכלל.
httpRequest: remoteIp: 104.133.0.95 requestMethod: GET requestSize: '801' requestUrl: http://74.125.67.38/ responseSize: '246' serverIp: 10.132.0.4 status: 200 userAgent: curl/7.35.0 insertId: ajvis5ev4i60 internalId: projectNumber: '895280006100' jsonPayload: '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry enforcedSecurityPolicy: configuredAction: ACCEPT name: mydev-policy-log-test1 outcome: ACCEPT priority: 2147483647 statusDetails: response_sent_by_backend logName: projects/mydev-staging/logs/requests resource: labels: backend_service_name: BACKEND_SERVICE_NAME forwarding_rule_name: FORWARDING_RULE_NAME project_id: PROJECT_ID target_proxy_name: TARGET_HTTP_PROXY_NAME url_map_name: URL_MAP_NAME zone: global type: http_load_balancer severity: INFO timestamp: '2017-04-18T18:57:05.845960288Z'הפלט הזה כולל את הערכים הבאים:
-
BACKEND_SERVICE_NAME: השם של שירות הקצה העורפי -
FORWARDING_RULE_NAME: השם של כלל ההעברה -
PROJECT_ID: מזהה הפרויקט -
TARGET_HTTP_PROXY_NAME: השם של ה-proxy ל-HTTP עם היעד -
URL_MAP_NAME: השם של מפת URL
- הערך של
בודקים את היררכיית הכללים כדי לוודא שהכלל הנכון הותאם. יכול להיות שכלל בעדיפות גבוהה יותר עם פעולת אישור מתאים לתנועה שלכם. משתמשים בפקודה
describeב-security-policiesב-Google Cloud CLI כדי לראות את התוכן של מדיניות האבטחה של Cloud Armor.לדוגמה, בדוגמה הבאה אפשר לראות איך כלל הרשאה בעדיפות גבוהה יותר (בעדיפות 100) תואם לתנועה שמגיעה מכתובת ה-IP 1.2.3.4, ומונע את ההפעלה של כלל הדחייה בעדיפות נמוכה יותר (בעדיפות 200) וחסימה של התנועה.
gcloud compute security-policies describe POLICY_NAME
מחליפים את
POLICY_NAMEבשם של מדיניות האבטחה.הפלט אמור להיראות כך:
creationTimestamp: '2017-04-18T14:47:58.045-07:00 description: '' fingerprint: Yu5spBjdoC0= id: '2560355463394441057' kind: compute#securityPolicy name: POLICY_NAME rules: -action: allow description: allow high priority rule kind: compute#securityPolicyRule match: srcIpRanges: -'1.2.3.4/32' preview: false priority: 100 -action: deny description: deny lower priority rule kind: compute#securityPolicyRule match: srcIpRanges: -'1.2.3.0/24 preview: false priority: 200 -action: deny description: default rule kind: compute#securityPolicyRule match: srcIpRanges: -'*' preview: false priority: 2147483647 selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp
כלל שהוגדר מראש מחזיר תוצאות חיוביות כוזבות
הזיהוי של XSS ו-SQLi מבוסס על התאמה סטטית של חתימות בכותרות של בקשות HTTP ובפרמטרים אחרים בשכבה 7. תבניות הביטויים הרגולריים האלה נוטות להחזיר תוצאות חיוביות שגויות. אפשר להשתמש בכלל שהוגדר מראש לזיהוי XSS ו-SQLi במצב תצוגה מקדימה, ואז לבדוק ביומן אם יש תוצאות חיוביות שגויות.
אם מצאתם תוצאת חיובית שגויה, אתם יכולים להשוות את תוכן התנועה עם הכללים של OWASP CRS.
אם אתם מבצעים מיגרציה מגרסה ישנה יותר של CRS, תוכלו לעיין בהשוואה בין גרסאות של כללי WAF כדי לראות רשימה של שינויים ושינויי שמות בכללים.
אם הכלל לא תקף או לא רלוונטי, משביתים אותו באמצעות הביטוי evaluatePreconfiguredWaf ומציינים את מזהה הכלל בארגומנט exclude ID list.
אחרי שבודקים את היומנים ומסירים את כל התוצאות החיוביות הכוזבות, משביתים את מצב התצוגה המקדימה.
כדי להוסיף כלל שהוגדר מראש במצב תצוגה מקדימה:
יוצרים מדיניות אבטחה עם קבוצת הביטויים שהוגדרה מראש במצב תצוגה מקדימה:
gcloud compute security-policies rules create 1000 --security-policy POLICY_NAME --expression "evaluatePreconfiguredWaf('xss-stable')" --action deny-403 --previewמחליפים את
POLICY_NAMEבשם של מדיניות האבטחה.בודקים את היומנים של HTTP(S) כדי לראות את השדות של בקשות HTTP, כמו
urlו-cookie. לדוגמה, התוצאה שלrequestUrlטובה יותר בהשוואה לתוצאה של כלל OWASP CRS עם מזהה 941180:httpRequest: remoteIp: 104.133.0.95 requestMethod: GET requestSize: '801' requestUrl: http://74.125.67.38/foo?document.cookie=1010" responseSize: '246' serverIp: 10.132.0.4 status: 200 userAgent: curl/7.35.0 insertId: ajvis5ev4i60 internalId: projectNumber: '895280006100' jsonPayload: '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry enforcedSecurityPolicy: configuredAction: ACCEPT name: POLICY_NAME outcome: ACCEPT priority: 2147483647 preconfiguredExprIds: [ 'owasp-crs-v042200-id941180-xss' ] statusDetails: response_sent_by_backend logName: projects/mydev-staging/logs/requests resource: labels: backend_service_name: BACKEND_SERVICE forwarding_rule_name: mydev-forwarding-rule project_id: mydev-staging target_proxy_name: mydev-target-http-proxy url_map_name: mydev-url-map zone: global type: http_load_balancer severity: INFO timestamp: '2017-04-18T18:57:05.845960288Z'
היומן הזה כולל את הערכים הבאים:
POLICY_NAME: השם של מדיניות האבטחה-
BACKEND_SERVICE: השם של שירות הקצה העורפי
כדי להחריג את מזהה הכלל 941180 של OWASP CRS, צריך לעדכן את הכלל במדיניות האבטחה של Cloud Armor:
gcloud compute security-policies rules update 1000 \ --security-policy POLICY_NAME \ --expression "evaluatePreconfiguredWaf('xss-v422-stable', ['owasp-crs-v042200-id941180-xss'])" \ --action deny-403 \ --previewמחליפים את
POLICY_NAMEבשם של מדיניות האבטחה.בודקים שוב את היומנים ומשביתים את מצב התצוגה המקדימה כדי להטמיע את הכלל.
לקוחות עם חתימות שנדחו לא נחסמים ולא נדחים
אם אתם משתמשים ב-Cloud Armor עם Cloud CDN, מדיניות האבטחה נאכפת רק על בקשות לתוכן דינמי, על החמצות מטמון או על בקשות אחרות שמיועדות לשרת המקור של ה-CDN. התגובות שמוחזרות מהמטמון מוגשות גם אם כללי מדיניות האבטחה של Cloud Armor במורד הזרם יכולים למנוע מהבקשה להגיע לשרת המקור של ה-CDN.
בעיות ברשימות של כתובות IP עם שמות
בקטע הזה מוסבר איך לפתור בעיות שקשורות לרשימות של כתובות IP עם שמות.
כתובות IP ברשימה של כתובות IP עם שם
כתובות ה-IP ברשימות תמיד תואמות לכתובות ה-IP באתרי הספקים שמפורטים במדריך לרשימות כתובות IP עם שמות ב-Cloud Armor. אם יש לכם שאלות לגבי הרשימות, אתם יכולים לפנות לצוות התמיכה ב-Cloud.
כתובות IP ברשימת כתובות IP עם שם לא עדכניות ב-Cloud Armor
מערכת Cloud Armor מסנכרנת את הרשימות שלה עם ספקי רשימות של כתובות IP מדי יום. יכול להיות שיהיו נתונים לא עדכניים, שיהיה עיכוב של כמה שעות או יום בהצגתם בהשוואה לנתונים אצל הספק. עם זאת, אם לדעתכם הנתונים המיושנים מפגרים יותר מהצפוי, למשל יותר משבוע, פנו לצוות התמיכה של Cloud.
בעיה ביצירת מדיניות אבטחה שמפנה לרשימה של כתובות IP עם שמות
אפשר לנסות ליצור מדיניות אבטחה שמפנה לרשימת כתובות IP עם שם, באמצעות פקודה כמו זו:
gcloud compute security-policies rules create 750 \
--security-policy my \
--expression "evaluatePreconfiguredExpr('sourceiplist-example')" \
--action "allow"
אם הפקודה נכשלת, השגיאה שמופיעה נראית בערך כך:
ERROR: (gcloud.compute.security-policies.rules.create) Could not fetch resource:
- Invalid value for field 'resource.match.expr': '{ "expression": "evaluatePreconfiguredExpr(\u0027sourceiplist-example\u0027)"}'.
Error parsing Cloud Armor rule matcher expression: sourceiplist-example
isn't a valid preconfigured expression set.
חשוב לוודא שהספק הספציפי נתמך, וששם רשימת כתובות ה-IP ניתן בצורה נכונה. כדי לבדוק את זה, אפשר להשתמש בפקודה gcloud הבאה כדי להציג את קבוצות הביטויים שהוגדרו מראש:
gcloud compute security-policies list-preconfigured-expression-sets
התנועה נחסמת למרות כלל שהוגדר מראש לרשימת היתרים של כתובות IP עם שם
יכול להיות שתגלו שתנועה נחסמת מכתובת IP שנמצאת ברשימה של כתובות IP עם שם:
מוודאים שהתנועה מגיעה מכתובת IP שנמצאת ברשימת כתובות IP מותרות עם שם.
בודקים אם יש כללי אבטחה אחרים עם עדיפות גבוהה יותר שיכולים לחסום את התנועה. אם הבעיה נמשכת, אפשר לפנות לצוות התמיכה של Cloud.
מוודאים שמדיניות האבטחה מצורפת לשירות הנכון של הקצה העורפי:
gcloud compute backend-services describe BACKEND_SERVICE
בודקים את הכללים שמופיעים במדיניות האבטחה. לדוגמה:
gcloud compute security-policies describe POLICY_NAME
הפקודה מחזירה מידע שדומה לזה:
--- … name: POLICY_NAME rules: -action: allow description: allow fastly ip addresses kind: compute#securityPolicyRule match: expr: expression: evaluatePreconfiguredExpr('sourceiplist-fastly') preview: false priority: 100 -action: deny(403) description: Default rule, higher priority overrides it kind: compute#securityPolicyRule match: config: srcIpRanges: -'*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 -action: deny(404) description: deny altostrat referer kind: compute#securityPolicyRule match: expr: expression: request.headers['Referer'].contains('altostrat') preview: false priority: 50 …