חומת אש קובעת איזו תעבורת נתונים ברשת מורשית לעבור ואיזו תעבורה נדחית. חומות אש יכולות לחול על תעבורה נכנסת (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 יכולה להגדיר באופן אוטומטי כללים של חומת אש ברמה של הענן הווירטואלי הפרטי (VPC), אבל חשוב לזכור שחומת האש של ה-VPC לא פועלת עם חומת האש של App Engine.
איך מאפשרים בקשות נכנסות מהשירותים
בטבלה הבאה מפורטים טווחי כתובות ה-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 עם HTTP של App Engine כדי לשלוח הודעות אל 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.
חומת אש של VPC
חומות אש של App Engine מוגדרות ונאכפות בנפרד מחומות אש מבוססות VPC. כללי חומת האש של VPC חלים על משאבים שפועלים ברשת ה-VPC, כמו מכונות וירטואליות של Compute Engine, בעוד שכללי חומת האש של App Engine חלים על בקשות נכנסות לאפליקציה או לשירות.
אם בסביבת הרשת שלכם מוגדרים כללים של חומת אש שמבוססים על VPC (כמו כללים של חומת אש ב-VPC או מדיניות היררכית של חומת אש), גם חומות אש ברמת ה-VPC וגם חומות אש של App Engine צריכות לאפשר את טווח כתובות ה-IP של בקשה נכנסת כדי שאפליקציית App Engine שלכם תוכל לקבל אותה.
במקרה של חומות אש ברמת ה-VPC, המערכת בודקת את מדיניות חומת האש ההיררכית לפני כללי חומת האש של ה-VPC, והיא פועלת לפי רצף מסוים במהלך הבדיקה של חומת האש של ה-VPC. בקשות שמותרות על ידי חומת האש ברמת ה-VPC וחומת האש של App Engine מתקבלות על ידי האפליקציה או השירות שלכם ב-App Engine. אם חומת האש של ה-VPC דוחה בקשות מאותו טווח כתובות IP שמותר על ידי חומת האש של App Engine, הגישה לאפליקציית App Engine לא תורשה.
VPC משותף
בסביבה הגמישה של App Engine אפשר ליצור חומת אש, בהתאם להגדרה של האפליקציה לשימוש ברשת VPC דרך VPC משותף.
אם האפליקציה הגמישה של App Engine משתמשת ב-VPC משותף, סביבת App Engine הגמישה לא יוצרת באופן אוטומטי כללי חומת אש. אם אתם צריכים לשלוט בגישה ולאפשר תעבורה ברשת ה-VPC, אתם יכולים ליצור כללי חומת אש ברשת ה-VPC המשותפת.
בנוסף, כדי לאפשר בקשות ממקור תעבורה, צריך לאפשר את אותו טווח כתובות IP בחומת האש של ה-VPC וגם בחומת האש של App Engine. אם לא מציינים את טווח כתובות ה-IP בשני המקומות (חומת האש של ה-VPC וחומת האש של App Engine), לא תהיה לטווח כתובות ה-IP הזה הרשאה לגשת לאפליקציה או לשירות של App Engine.
אם האפליקציה בסביבה הגמישה של App Engine לא מוגדרת לשימוש ב-VPC משותף, הסביבה הגמישה של App Engine יוצרת עד שני כללי חומת אש מוסתרים של VPC, בהתאם לשאלה אם האפליקציה משתמשת בבדיקות תקינות מפוצלות (ברירת מחדל) או בבדיקות תקינות מדור קודם. כללי חומת האש המוסתרים האלה מאפשרים להציג תעבורת נתונים ותעבורת בדיקת תקינות בסביבה הגמישה:
- שם הרשת: הרשת שצוינה ב-
app.yaml, או רשת ברירת המחדל אם לא הוגדרה רשת. - תג יעד: התג
instance_tagsשצוין בקובץapp.yaml. כברירת מחדל, אם לא מספקים תגי יעד, הסביבה הגמישה של App Engine יוצרת תג ייחודי בפורמטaef-INSTANCE_ID. התג הזה משפיע רק על המקרים של הגרסה הגמישה הספציפית הזו, וכלל חומת האש יטרגט את התג הזה. - כיוון התנועה: כניסה
- פעולה בהתאמה: אישור
- טווחי כתובות ה-IP של המקור:
35.191.0.0/16ו-130.211.0.0/22 - פרוטוקולים ויציאות:
- tcp:
8443(לבדיקות תקינות מדור קודם) או10402(לבדיקות תקינות מפוצלות)
- tcp:
- עדיפות:
1000
מניעת גישה לתוכן שמור במטמון
חומת האש של App Engine נמצאת מאחורי מנגנונים שמטמנים תוכן במטמון, למשל דפדפנים ופרוקסי אינטרנט. כשתוכן נשמר במטמון, הוא מוצג באופן ציבורי מכתובת ה-URL הספציפית עד שתוקף השמירה שלו במטמון פג. אפשר לגשת לתוכן גם אחרי שיוצרים כללי חומת אש חדשים.
כדי למנוע שמירה במטמון של התוכן, משתמשים בכותרות תגובת ה-HTTP Cache-Control ו-Expires. מידע נוסף על כותרות HTTP האלה, כולל איך לשלוט בשמירה במטמון, מופיע במאמר הימנעות משמירה במטמון.
המאמרים הבאים
כדי ללמוד איך להגדיר כללים לחומת האש של App Engine, פועלים לפי ההוראות במאמר יצירת חומות אש.