חומת אש קובעת איזו תעבורת נתונים ברשת מורשית לעבור ואיזו תעבורה נדחית. חומות אש יכולות לחול על תעבורה נכנסת (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 רגילה לא ייחסמו. אלה כל סוגי התעבורה שנדרשים בהגדרה של האפליקציה עצמה, או שנשלחים מאותה אפליקציה. בקשות שעוקפות את כללי חומת האש בדרך הזו כוללות:
- בקשות לחימום
- משימות של Cloud Scheduler באמצעות App Engine HTTP (כולל App Engine Cron)
- משימות App Engine ב-Cloud Tasks (כולל תורי משימות של 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 | 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 עם HTTP של App Engine כדי לשלוח הודעות אל 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.
מומלץ להשתמש באמצעי בקרה על תעבורת נכנסת כדי שהאפליקציה תקבל רק בקשות שנשלחות ממאזן העומסים (ומ-VPC אם משתמשים בו). אחרת, המשתמשים יכולים להשתמש בכתובת ה-URL של האפליקציה ב-App Engine כדי לעקוף את מאזן העומסים, את מדיניות האבטחה של Cloud Armor, את אישורי ה-SSL ואת המפתחות הפרטיים שמועברים דרך מאזן העומסים.
אם אמצעי הבקרה על תעבורת נתונים נכנסת מוגדרים לקבלת תעבורת נתונים מסוג
internal-and-cloud-load-balancing, לא משנים את כלל חומת האש של ברירת המחדל ב-App Engine (allow) ומשתמשים בכללים של חומת אש ליישומי אינטרנט (WAF) ב-Google Cloud Armor.
מניעת גישה לתוכן שמור במטמון
חומת האש של App Engine נמצאת מאחורי מנגנונים שמטמנים תוכן במטמון, למשל דפדפנים ופרוקסי אינטרנט. כשתוכן נשמר במטמון, הוא מוצג באופן ציבורי מכתובת ה-URL הספציפית עד שתוקף השמירה שלו במטמון פג. אפשר לגשת לתוכן גם אחרי שיוצרים כללי חומת אש חדשים.
מידע על שינוי זמן התפוגה שמוגדר כברירת מחדל לתוכן סטטי או על מניעת שמירה של תוכן סטטי במטמון זמין במאמר תפוגת מטמון.כדי למנוע שמערכת תאחסן במטמון את הפלט של תוכן דינמי מקוד האפליקציה, צריך להשתמש בכותרות תגובת ה-HTTP Cache-Control ו-Expires. מידע נוסף על כותרות ה-HTTP האלה, כולל איך לשלוט בשמירה במטמון, זמין במאמר מניעת שמירה במטמון.
המאמרים הבאים
כדי ללמוד איך להגדיר כללים לחומת האש של App Engine, פועלים לפי ההוראות במאמר יצירת חומות אש.