הסבר על חומת האש של 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 יכולה להגדיר באופן אוטומטי כללים של חומת אש ברמה של הענן הווירטואלי הפרטי (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

חומות אש של 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 (לבדיקות תקינות מפוצלות)
  • עדיפות: 1000

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

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

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

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

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