הסבר על חומת האש של App Engine

חומת אש קובעת איזו תעבורת רשת מותרת ואיזו תעבורה נדחית. חומות אש יכולות לחול על תעבורה נכנסת (ingress), תעבורה יוצאת (egress) או על שתיהן. ב-App Engine, חומת האש של App Engine חלה רק על תעבורה נכנסת שמנותבת לאפליקציה או לשירות.

סקירה כללית

חומת האש של App Engine נבדקת עבור כל סוגי הבקשות לאפליקציה, כולל:

  • תעבורת אינטרנט רגילה שמנותבת לכתובת appspot.com של האפליקציה או לדומיין מותאם אישית.
  • בקשות שמגיעות מ-Cloud Load Balancing.
  • תנועה ממקורות פנימיים כמו מכונות וירטואליות (VM) של Compute Engine ו-Cloud Tasks.

במקרים שבהם האפליקציה שלכם מוגדרת להשתמש בשירותים או במוצרים אחרים של רשתות, יכול להיות שתצטרכו ליצור כללים לשליטה בתנועה הנכנסת בחומת האש של App Engine ובחומת האש או בהגדרות האבטחה של מוצרים אחרים. במדריך הזה מוסבר על ההתנהגות הכללית של חומת האש של App Engine, וגם על מקרים מיוחדים כאלה.

כללים לחומת אש ב-App Engine

אפשר להגדיר כללי חומת אש ב-App Engine באמצעות מסוף Google Cloud , ‏ Google Cloud CLI או Admin API. כדי לעשות את זה, צריך לציין כללים שמאפשרים או חוסמים טווחי כתובות IP מסוימים.

כברירת מחדל, כל בקשה שלא תואמת לכלל מקבלת גישה לאפליקציה. אם אתם רוצים לחסום את כל הבקשות שלא תואמות לכלל ספציפי (לא כולל בקשות משירותים פנימיים שמורשים כברירת מחדל), אתם צריכים לשנות את הפעולה של הכלל default לdeny.

תכונת חומת האש

בסביבה הרגילה של App Engine, חומת האש של App Engine יכולה לאפשר לתעבורה פנימית מסוימת לעקוף את חומת האש. כלומר, אם מגדירים את הכלל default ל-deny, בקשות משירותים מסוימים שמיועדות לסביבה הרגילה של App Engine לא נחסמות. אלה כל סוגי התעבורה שנדרשים בהגדרה של האפליקציה עצמה, או שנשלחים מאותה אפליקציה. בקשות שעוקפות את כללי חומת האש בדרך הזו כוללות:

באפליקציות שמשתמשות בסביבה הרגילה של App Engine ובשירותים שכלולים בזמני הריצה מהדור הראשון, גם ההתראות מ-Mail API מדור קודם עוקפות את חומת האש.

איך מאפשרים בקשות נכנסות מהשירותים

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

שירות טווח כתובות ה-IP לבקשות שנשלחות לסביבה הרגילה של App Engine טווח כתובות ה-IP לבקשות שנשלחות לסביבה הגמישה של App Engine
‫App Engine Cron ‫0.1.0.1/32 או 0.1.0.2/32, עוקף את כלל חומת האש שמוגדר כברירת מחדל אם הוא מוגדר כדחייה ‫0.1.0.1/32 או 0.1.0.2/32
מכונות Compute Engine עם כתובות IP חיצוניות כתובת ה-IP החיצונית של המכונה כתובת ה-IP החיצונית של המכונה
מכונות Compute Engine ללא כתובת IP חיצונית 0.0.0.0/32 0.0.0.0/32
מכונות וירטואליות ב-Compute Engine ללא כתובת IP חיצונית שמשתמשות ב-Cloud NAT לחיבורים יוצאים 0.0.0.0/32 0.0.0.0/32
משימות של Cloud Scheduler באמצעות HTTP של App Engine ומשימות של App Engine ב-Cloud Tasks (כולל תורי משימות של App Engine) ‫0.1.0.2/32, עוקף את כלל חומת האש של ברירת המחדל אם הוא מוגדר כדחייה 0.1.0.2/32
‫Cloud Storage או Blobstore 0.1.0.30/32 לא רלוונטי
URL Fetch 0.1.0.40/32 0.1.0.40/32
בקשות חימום ‫0.1.0.3/32, עוקף את כלל חומת האש של ברירת המחדל אם הוא מוגדר כ'דחייה' לא רלוונטי

בהתאם לתרחיש השימוש, יכול להיות שההוראות הנוספות האלה רלוונטיות כשמגדירים כללי חומת אש של App Engine:

  • בקשות מעבודות Cron חדשות או מעודכנות של App Engine שנשלחות לסביבה הרגילה או הגמישה של App Engine מגיעות מכתובת 0.1.0.2. במשימות Cron שנוצרו בגרסאות ישנות יותר של gcloud (קודמות לגרסה 326.0.0), בקשות Cron יגיעו מ-0.1.0.1. מידע נוסף על זיהוי בקשות משירות Cron של App Engine זמין במאמר אימות בקשות Cron.
  • אם האפליקציה שלכם מקיימת אינטראקציה עם Cloud Load Balancing או שהיא מחוברת לרשת VPC, כדאי לעיין בקטע אינטראקציה עם מוצרים או שירותים אחרים בהמשך.

דוגמה ל-App Engine Standard

לאפליקציה שפועלת בסביבה הרגילה יש שני שירותים: frontend_service ו-backend_service. שירות frontend_service משתמש ב-Cloud Tasks עם App Engine HTTP כדי לשלוח הודעות ל-backend_service. מכיוון שכלל חומת האש default מאפשר בקשות של Cloud Tasks גם אם הוא מוגדר ל-deny, אין צורך ליצור כלל חומת אש עבור Cloud Tasks.

עם זאת, אם רוצים להגביל את הגישה לאפליקציה ולחסום במפורש בקשות של Cloud Tasks, צריך ליצור deny כלל חומת אש לטווח כתובות IP 0.1.0.2/32.

דוגמה לסביבה גמישה של App Engine

לאפליקציה שפועלת בסביבה הגמישה יש שני שירותים: frontend_service ו-backend_service, וחומת אש שמוגדרת לדחיית תעבורה כברירת מחדל. frontend_service משתמש ב-Cloud Tasks עם App Engine HTTP כדי לשלוח הודעות ל-backend_service. מכיוון שכלל חומת האש default דוחה בקשות של Cloud Tasks, צריך ליצור כלל חומת אש allow עבור 0.1.0.2/32.

אינטראקציה עם מוצרים או שירותים אחרים

Cloud Load Balancing

אם אתם משתמשים ב-Cloud Load Balancing וב-NEGs ללא שרתים, חשוב לשים לב לנקודות הבאות:

  • מאזן העומסים לא מפריע לכללי חומת האש של App Engine ולא מתקשר איתם. כללי חומת האש של App Engine נבדקים רק כש-NEG ללא שרת מפנה תנועה ל-App Engine.

מניעת גישה לתוכן שנשמר במטמון

חומת האש של App Engine נמצאת מאחורי מנגנונים ששומרים תוכן במטמון, למשל שרתי Proxy ודפדפנים. כשהתוכן נשמר במטמון, הוא מוצג באופן ציבורי מכתובת ה-URL הספציפית עד שהוא פג תוקף, ואפשר לגשת אליו גם אחרי שיוצרים כללי חומת אש חדשים.

מידע על שינוי זמן התפוגה שמוגדר כברירת מחדל לתוכן סטטי או על מניעת שמירה של תוכן סטטי במטמון זמין במאמר בנושא תפוגת מטמון.

כדי למנוע שמערכת תאחסן במטמון פלט של תוכן דינמי מקוד האפליקציה, צריך להשתמש בכותרות התגובה של HTTP‏ Cache-Control ו-Expires. מידע נוסף על כותרות ה-HTTP האלה, כולל איך לשלוט באחסון במטמון, זמין במאמר מניעת אחסון במטמון.

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

כדי ללמוד איך להגדיר כללים לחומת האש של App Engine, פועלים לפי ההוראות במאמר יצירת חומות אש.