חומת אש קובעת איזו תעבורת רשת מותרת ואיזו תעבורה נדחית. חומות אש יכולות לחול על תעבורה נכנסת (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 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.
מומלץ להשתמש באמצעי בקרה על תעבורת נכנסת כדי שהאפליקציה תקבל רק בקשות שנשלחות ממאזן העומסים (ומ-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 נמצאת מאחורי מנגנונים ששומרים תוכן במטמון, למשל שרתי Proxy ודפדפנים. כשהתוכן נשמר במטמון, הוא מוצג באופן ציבורי מכתובת ה-URL הספציפית עד שהוא פג תוקף, ואפשר לגשת אליו גם אחרי שיוצרים כללי חומת אש חדשים.
כדי למנוע שמירת תוכן במטמון, משתמשים בכותרות של תגובת HTTP Cache-Control ו-Expires. מידע נוסף על כותרות ה-HTTP האלה, כולל איך לשלוט בשמירה במטמון, מופיע במאמר הימנעות משמירה במטמון.
המאמרים הבאים
כדי ללמוד איך להגדיר כללים לחומת האש של App Engine, פועלים לפי ההוראות במאמר יצירת חומות אש.