הגדרת הגדרות רשת (דור ראשון) (original) (raw)

הגדרת הגדרות רשת (דור ראשון)

הגדרות הרשת של פונקציות Cloud Run מאפשרות לכם לשלוט בתעבורת נתונים נכנסת (ingress) ובתעבורת נתונים יוצאת (egress) אל פונקציות בודדות ומפונקציות בודדות. לדוגמה, אפשר להשתמש בהגדרות הרשת בתרחישי השימוש הבאים:

פרטים נוספים על תרחישים לדוגמה מופיעים בקטע תרחישים לדוגמה.

הגדרות של תעבורת נתונים נכנסת (ingress)

הגדרות התעבורה הנכנסת (ingress) קובעות אם משאבים מחוץ לפרויקט Google Cloud או לגבולות גזרה לשירות VPC Service Controls יכולים להפעיל פונקציה.

כדי שמשאב יהיה כפוף למדיניות של היקף VPC Service Controls, הוא צריך להיות חלק מהשירות שרוצים להגביל. בפונקציות Cloud Run (דור ראשון), השירות המוגבל הוא Cloud Functions API.

מגבלות

אפשר להפעיל פונקציות עם טריגר HTTP שזמינות רק באופן פנימי רק באמצעות בקשות HTTP שנוצרו ברשת VPC, כמו בקשות מ-Kubernetes Engine, מ-Compute Engine, מהסביבה הגמישה של App Engine, או באמצעות בקשות ממשאבי Cloud Scheduler,‏ Cloud Tasks,‏ Workflows או BigQuery שנמצאים באותו פרויקט או באותו VPC Service Controls perimeter. המשמעות היא שבקשות HTTP שנוצרו על ידי או מנותבות דרך Pub/Sub או Eventarc לא יכולות להפעיל את הפונקציות האלה. טריגרים של אירועים נחשבים תמיד כ'פנימיים' ומותרים לשימוש ללא קשר להגדרת ה-Ingress.

הגדרת תעבורת נתונים נכנסת (ingress)

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

אפשר לציין הגדרות של תעבורת נכנסת כשפורסים או מעדכנים את הפונקציה באמצעות מסוף Google Cloud ,‏ Google Cloud CLI או Terraform:

המסוף

  1. פותחים את הדף Functions Overview במסוף Google Cloud :
    כניסה לדף סקירה כללית של פונקציות Cloud Run
  2. לוחצים על יצירת פונקציה. לחלופין, לוחצים על פונקציה קיימת כדי לעבור לדף הפרטים שלה, ואז לוחצים על עריכה.
  3. מרחיבים את ההגדרות המתקדמות על ידי לחיצה על Runtime, build ...‎.
  4. בקטע Connections, בוחרים ערך לIngress settings.

gcloud

משתמשים בפקודה gcloud functions deploy כדי לפרוס או לעדכן את הפונקציה ומציינים את הדגל --ingress-settings:

gcloud functions deploy FUNCTION_NAME

--trigger-http

--ingress-settings INGRESS_SETTINGS

FLAGS...

where:

Terraform

זה שינוי אופציונלי. כדי לעדכן את השדה של הגדרות ה-Ingress בקובץ main.tf של משאב Terraform, צריך לכלול את הארגומנט ingress_settings שרוצים לפרוס או לעדכן. ביצוע שינויים בהגדרות הכניסה יוצר מחדש את הפונקציה.

  1. בקובץ main.tf, מאתרים את המשאב שרוצים להגביל את הגדרות ה-Ingress שלו ומעדכנים אותו להגדרה הרצויה, לדוגמה:
    resource "google_cloudfunctions_function" "function" {
    name = "function"
    location = "us-central1"
    description = "Sample function"
    ingress_settings = "INGRESS_SETTINGS"
    }
    כאשר INGRESS_SETTINGS הוא אחד מהערכים הנתמכים של הגדרות הכניסה. הערכים האפשריים הם:
    • ALLOW_ALL (ברירת מחדל): כל הבקשות הנכנסות לפונקציה מותרות, גם מהאינטרנט וגם ממשאבים באותו פרויקט.
    • ALLOW_INTERNAL_ONLY: מותרת רק תעבורה מ-Cloud Scheduler,‏ Cloud Tasks,‏ Eventarc,‏ Workflows ומרשתות VPC באותו פרויקט או בהיקף של VPC Service Controls.
    • ALLOW_INTERNAL_AND_GCLB: מאפשר תנועה פנימית וגם תנועה שנשלחת לכתובת IP ציבורית שנחשפת על ידי Cloud Load Balancing. חסימת תעבורת נתונים שנשלחת אל cloudfunctions.net או אל כל דומיין מותאם אישית שהוגדר באמצעות פונקציות Cloud Run. ההגדרה מונעת ממשתמשים לעקוף אמצעי בקרת גישה (Cloud Armor, ‏ IAP) שהם מגדירים באמצעות Cloud Load Balancing.

אם אתם משתמשים ב-Google Cloud Armor עם Cloud Load Balancing, אתם יכולים ליצור מדיניות אבטחה שמסננת תנועה על סמך תנאים כמו כתובת ה-IP של בקשה נכנסת, טווח ה-IP, קוד האזור או כותרות הבקשה. מידע נוסף זמין במאמר סקירה כללית על כללי מדיניות האבטחה של Google Cloud Armor.

.

הגדרות של תעבורת נתונים יוצאת (egress)

הגדרות היציאה קובעות את הניתוב של בקשות HTTP יוצאות מפונקציה. כדי לציין הגדרות של תעבורת יציאה, צריך לקשר את הפונקציה לרשת VPC באמצעות מחבר Serverless VPC Access. הגדרות היציאה קובעות מתי התנועה מנותבת דרך המחבר ברשת ה-VPC.

מגבלות

הגדרת הגדרות של תעבורת נתונים יוצאת (egress)

בהגדרות תעבורת נתונים יוצאת (egress) אפשר לציין את הפרטים הבאים:

אפשר לציין הגדרות של תעבורת נתונים יוצאת (egress) כשפורסים או מעדכנים את הפונקציה באמצעות מסוף Google Cloud או Google Cloud CLI.

המסוף

  1. פותחים את הדף Functions Overview במסוף Google Cloud :
    כניסה לדף סקירה כללית של פונקציות Cloud Run
  2. לוחצים על יצירת פונקציה. לחלופין, לוחצים על פונקציה קיימת כדי לעבור לדף הפרטים שלה, ואז לוחצים על עריכה.
  3. מרחיבים את ההגדרות המתקדמות על ידי לחיצה על Runtime, build ...‎.
  4. בקטע Connections (חיבורים), בקטע Egress settings (הגדרות יציאה), בוחרים מחבר Serverless VPC Access.
  5. בוחרים את הגדרת היציאה המתאימה בהתאם לאופן שבו רוצים לנתב תנועה יוצאת דרך המחבר.

gcloud

משתמשים בפקודה gcloud functions deploy כדי לפרוס או לעדכן את הפונקציה ומציינים את הדגל --egress-settings:

gcloud functions deploy FUNCTION_NAME

--vpc-connector CONNECTOR_NAME

--egress-settings EGRESS_SETTINGS

FLAGS...

where:

תרחישים לדוגמה

בדוגמאות הבאות מוסבר איך להגדיר גישה לרשת בכמה תרחישים נפוצים.

יצירת פונקציה שלא ניתן להפעיל על ידי לקוחות חיצוניים

כדי לאבטח את פונקציות ה-HTTP, אפשר לאפשר קריאה שלהן רק על ידי משאבים באותו Google Cloud פרויקט או על ידי גבולות גזרה לשירות של VPC Service Controls.

  1. פורסים את הפונקציה ומאפשרים רק תנועה פנימית. משתמשים במסוףGoogle Cloud או ב-Google Cloud CLI:

המסוף

  1. פותחים את הדף Functions Overview במסוף Google Cloud :
    כניסה לדף סקירה כללית של פונקציות Cloud Run
  2. לוחצים על יצירת פונקציה. לחלופין, לוחצים על פונקציה קיימת כדי לעבור לדף הפרטים שלה, ואז לוחצים על עריכה.
  3. מרחיבים את ההגדרות המתקדמות על ידי לחיצה על Runtime, build ...‎.
  4. בקטע Connections, בקטע Ingress settings, בוחרים באפשרות Allow internal traffic only.

gcloud

משתמשים בפקודה gcloud functions deploy:
gcloud functions deploy FUNCTION_NAME \
--ingress-settings internal-only \
FLAGS...

אחרי שפורסים את הפונקציה, בקשות שמגיעות מחוץ לפרויקטGoogle Cloud נחסמות ולא מגיעות לפונקציה. אם משתמשים ב-VPC Service Controls, בקשות שמגיעות מחוץ לגבולות גזרה לשירות נחסמות. מופעי VM בתוך הפרויקט או גבולות גזרה לשירות עדיין יכולים לגשת לפונקציה על ידי שליחת בקשות לנקודת הקצה שלה ב-HTTPS.

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

שימוש בהגדרות של תעבורת נתונים יוצאת ותעבורת נתונים נכנסת כדי להגביל את הגישה

אתם יכולים לשלב גם תעבורת נתונים נכנסת (ingress) וגם תעבורת נתונים יוצאת (egress) בשירותים שלכם כדי להוסיף עוד שכבת הגבלה.

  1. משכפלים את מאגר cloud-run-sample ועוברים לספרייה vpc-sample:
    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    cd vpc-sample
  2. מתקינים את יחסי התלות של Python:
    pip3 install -r requirements.txt
  3. אפשר לפתוח את הקובץ main.py בספרייה vpc-sample כדי לראות את הפונקציה שפורסתם:
  4. פורסים את הפונקציה:
    gcloud functions deploy restricted-function
    --runtime=python38
    --trigger-http
    --no-allow-unauthenticated
    --ingress-settings=internal-only
    --entry-point=hello_world
  5. הגדרת מחבר של חיבור לרשת (VPC) מאפליקציית serverless:
    gcloud compute networks vpc-access connectors create serverless-connector
    --region=SERVICE_REGION
    --range=10.8.0.0/28
    כאשר SERVICE_REGION הוא אזור של המחבר, והוא צריך להיות זהה לאזור של שירות בלי שרת (serverless). אם השירות שלכם נמצא באזור us-central או europe-west, אתם צריכים להשתמש ב-us-central1 או ב-europe-west1.
  6. יוצרים את קובץ האימג' של הקונטיינר:
    gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .
    כאשר PROJECT_ID הוא מזהה הפרויקט.
    הפעולה הזו יוצרת קובץ אימג' של קונטיינר שמפעיל את get_hello_world כשפורסים אותו מהקובץ main.py:
  7. משתמשים בפקודה gcloud run deploy run-function כדי לפרוס את קונטיינר Cloud Run:
    gcloud run deploy run-function
    --image gcr.io/PROJECT_ID/restricted-function-caller
    --no-allow-unauthenticated
    --update-env-vars=URL=https://SERVICE_REGION-PROJECT_ID.cloudfunctions.net/restricted-function-caller
    --vpc-egress=all
    --vpc-connector=serverless-connector
    --region=SERVICE_REGION
    where:
    • PROJECT_ID הוא מזהה הפרויקט.
    • SERVICE_REGION הוא אזור של המחבר; הוא חייב להיות זהה לאזור של השירות בלי שרת (serverless). אם השירות שלכם נמצא באזור us-central או europe-west, אתם צריכים להשתמש ב-us-central1 או ב-europe-west1.
      שירות Cloud Run run-function מוגדר עכשיו לשלוח בקשת GET ממחבר ה-VPC לפונקציה המוגבלת לרשת.

ניתוב יציאה של פונקציה דרך רשת ה-VPC

רשתות VPC ב- Google Cloud תומכות במגוון רחב של הגדרות ותכונות רישות. על ידי ניתוב תעבורת נתונים יוצאת (egress) מהפונקציה לרשת ה-VPC, אתם יכולים לוודא שתעבורת נתונים יוצאת (egress) של פונקציות Cloud Run תפעל לפי חומת האש, ה-DNS, הניתוב וכללים אחרים של רשת ה-VPC, ותוכלו להשתמש במוצרים כמו Cloud NAT.

  1. הגדרת רשת VPC מגדירים רשת VPC קיימת או יוצרים רשת חדשה לפי ההוראות במאמר שימוש ברשתות VPC.
  2. **מגדירים מחבר של חיבור לרשת (VPC) מאפליקציית serverless.**פונקציות Cloud Run צריכות מחבר של חיבור לרשת (VPC) מאפליקציית serverless כדי לנתב תעבורה לרשת ה-VPC. כדי ליצור מחבר ולהגדיר את ההרשאות המתאימות, פועלים לפי ההוראות במאמר חיבור לרשת VPC.
  3. פורסים פונקציה שמשתמשת במחבר ומנתבים את כל התעבורה היוצאת דרך המחבר. משתמשים במסוף Google Cloud או בכלי שורת הפקודה gcloud:

המסוף

  1. פותחים את הדף Functions Overview במסוף Google Cloud :
    כניסה לדף סקירה כללית של פונקציות Cloud Run
  2. לוחצים על יצירת פונקציה. לחלופין, לוחצים על פונקציה קיימת כדי לעבור לדף הפרטים שלה, ואז לוחצים על עריכה.
  3. מרחיבים את ההגדרות המתקדמות על ידי לחיצה על Runtime, build ...‎.
  4. בקטע Connections (חיבורים), בקטע Egress settings (הגדרות יציאה), בוחרים את מחבר הגישה ל-VPC של Serverless ובוחרים באפשרות Route all traffic through the VPC connector (ניתוב כל התנועה דרך מחבר ה-VPC).

gcloud

משתמשים בפקודה gcloud functions deploy:
gcloud functions deploy FUNCTION_NAME \
--vpc-connector CONNECTOR_NAME \
--egress-settings all \
FLAGS...

אחרי שפורסים את הפונקציה, כל התנועה שמגיעה מהפונקציה מנותבת דרך רשת ה-VPC ופועלת בהתאם לכללים שמוגדרים ברשת ה-VPC. שימו לב שהפונקציה לא יכולה לגשת לאינטרנט הציבורי אלא אם מגדירים Cloud NAT. בנוסף, צריך למפות את כל טווחי כתובות ה-IP הראשיים והמשניים של כל רשתות המשנה לשער NAT, כדי לכלול את רשת המשנה של המחבר במיפוי.

שיוך יציאה של פונקציה לכתובת IP סטטית

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

  1. **הפניית תעבורת הנתונים היוצאת של הפונקציה דרך רשת ה-VPC.**פרטים נוספים זמינים בסעיף הקודם, ניתוב יציאה של פונקציות דרך רשת ה-VPC.
  2. **מגדירים Cloud NAT ומציינים כתובת IP סטטית.**כדי להגדיר Cloud NAT עבור רשת המשנה שמשויכת למחבר Serverless VPC Access של הפונקציה, פועלים לפי ההנחיות במאמרים הגדרת טווחי כתובות של רשתות משנה ל-NAT והגדרת כתובות IP ל-NAT. כל טווחי כתובות ה-IP הראשיים והמשניים של כל רשתות המשנה צריכים להיות ממופים לשער ה-NAT ב-Cloud NAT, כדי שרשת המשנה של המחבר תיכלל במיפוי.

איזון עומסים במספר אזורים

אפשר לפרוס פונקציה באזורים שונים ולאפשר לשלוח את הבקשה לאזור הקרוב ביותר שפועל בצורה תקינה. כדי לעשות את זה, צריך להגדיר קבוצת נקודות קצה ברשת (NEG) בלי שרת (serverless) עבור הפונקציה ולחבר אותה למאזן עומסים (LB), כמו שמתואר במאמר הגדרת מאזן עומסים (LB) HTTP(S) עם קבוצות נקודות קצה ברשת (NEG) בלי שרת (serverless).