הגבלת תעבורת נכנסת (ingress) של נקודות קצה ברשת לשירותי Cloud Run

בדף הזה מוסבר איך להשתמש בהגדרות של תעבורת נכנסת כדי להגביל את הגישה לרשת לשירות Cloud Run.

ברמת הרשת, אפשר להגיע לנקודת הקצה של שירות Cloud Run דרך נתיבי הכניסה הבאים לרשת:

  • כתובות URL שמוגדרות כברירת מחדל run.app, שאפשר להשבית
  • כל מיפוי דומיין שהוגדר
  • כל מאזן עומסים חיצוני של אפליקציות (ALB) או מאזן עומסים פנימי של אפליקציות (ALB) שהוגדר

כל נתיבי הכניסה לרשת כפופים להגדרת הכניסה של השירות. הגדרת ברירת המחדל של תעבורת נתונים נכנסת ונתיבי ברירת המחדל של תעבורת נתונים נכנסת מאפשרים לכל משאב באינטרנט להגיע לשירות Cloud Run שלכם. אתם יכולים להשתמש באילוץ בהתאמה אישית כדי להגביל את הגדרות הכניסה לארגון או לקבוצה של פרויקטים. אימות IAM עדיין חל על בקשות שמגיעות לנקודות הקצה של השירות מכל אחד מנתיבי הכניסה לרשת שצוינו למעלה. כדי לנהל את הגישה בצורה מדורגת, כדאי להשתמש גם בהגדרות של תעבורת נכנסת ברשת וגם באימות IAM.

משתמשים בתגי רשת כדי להגביל את הגישה של מכונת ה-VM של המחבר למשאבי VPC.

הגדרות זמינות של תעבורת נכנסת לרשת

אלה ההגדרות שזמינות:

הגדרה תיאור
פנימי ההגבלות המחמירות ביותר. התרה של בקשות מהמקורות הבאים:
  • מאזן עומסים פנימי של אפליקציות (ALB), כולל בקשות מרשתות VPC משותפות כשמתבצע ניתוב דרך מאזן העומסים הפנימי של האפליקציות.
  • משאבים שמותרים על ידי כל גבול גזרה של VPC Service Controls שמכיל את שירות Cloud Run. צריך להגדיר את Cloud Run כשירות מוגבל.
  • רשתות VPC שנמצאות באותו פרויקט כמו שירות Cloud Run.
  • תעבורת נכנסת של VPC משותף: רשת ה-VPC המשולבת שהגרסה שלכם מוגדרת לשלוח אליה תעבורה. מידע על המקרים שבהם תנועה ב-VPC משותף מזוהה כ'פנימית' זמין במאמר שיקולים מיוחדים לגבי VPC משותף.
  • המוצרים הבאים Google Cloud , אם הם נמצאים באותו פרויקט או באותו מתחם אבטחה היקפית של VPC Service Controls כמו שירות Cloud Run שלכם, ואם הם משתמשים בכתובת ה-URL שמוגדרת כברירת מחדל run.app ולא בדומיין בהתאמה אישית:
בקשות מהמקורות האלה נשארות ברשת של Google, גם אם הן ניגשות לשירות שלכם בכתובת ה-URL‏ run.app. בקשות ממקורות אחרים, כולל האינטרנט, לא יכולות להגיע לשירות בכתובת ה-URL‏ run.app או בדומיינים מותאמים אישית.

איזון עומסים פנימי ו-Cloud Load Balancing ההגדרה הזו מאפשרת בקשות מהמקורות הבאים:
  • משאבים שמותרים בהגדרה המגבילה יותר 'פנימי'
  • מאזן עומסים חיצוני של אפליקציות (ALB)
אפשר להשתמש בהגדרה הזו כדי לבצע את הפעולות הבאות:
  • קבלת בקשות מהאינטרנט דרך מאזן העומסים של אפליקציות (ALB) החיצוני. אסור לשלוח בקשות ישירות לכתובת ה-URL‏ run.app מהאינטרנט.
  • מוודאים שהבקשות מהאינטרנט כפופות לתכונות של מאזן עומסים של אפליקציות (ALB) חיצוני, כמו שרת proxy לאימות זהויות (IAP),‏ Cloud Armor ו-Cloud CDN.

הערה: כדי להפעיל את ההגדרה הזו ב-CLI של gcloud, משתמשים בפקודה internal-and-cloud-load-balancing. כדי להפעיל את ההגדרה הזו במסוף Google Cloud , בוחרים באפשרות פנימי > אישור תעבורה ממאזני עומסים חיצוניים של אפליקציות.
הכול הכי פחות מגביל. מאפשרת את כל הבקשות, כולל בקשות ישירות מהאינטרנט לכתובת האתר run.app.

גישה לשירותים פנימיים

בנוסף, צריך להתחשב בשיקולים הבאים:

  • כשניגשים לשירותים פנימיים, קוראים להם כרגיל באמצעות כתובת ה-URL שלהם, כלומר כתובת ה-URL שמוגדרת כברירת מחדל run.app או דומיין בהתאמה אישית שהוגדר ב-Cloud Run.

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

  • כשמתקשרים מ-Cloud Run או מ-App Engine לשירות Cloud Run שהוגדר כ'פנימי' או כ'פנימי ו-Cloud Load Balancing', התעבורה צריכה לעבור דרך רשת VPC שנחשבת פנימית. ראו קבלת בקשות משירותים אחרים של Cloud Run או מ-App Engine.

  • בקשות ממשאבים ברשתות VPC באותו פרויקט הן 'פנימיות', גם אם למשאב שממנו הן מגיעות יש כתובת IP חיצונית.

  • בקשות ממשאבים מקומיים שמחוברים לרשת ה-VPC באמצעות Cloud VPN ו-Cloud Interconnect הן 'פנימיות'.

הגדרת תעבורת נכנסת לשירותי Cloud Run

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

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. אם אתם מגדירים שירות חדש, לוחצים על Deploy container (פריסת מאגר) כדי להציג את הטופס Create service (יצירת שירות). ממלאים את דף ההגדרות הראשוניות של השירות.

  3. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על הכרטיסייה Networking (רשת).

  4. בוחרים את תעבורת הנתונים הנכנסת שרוצים לאפשר:

    תמונה

  5. לוחצים על יצירה או על שמירה.

gcloud

  1. אם אתם פורסים שירות חדש, פורסים אותו עם הדגל --ingress:

    gcloud run deploy SERVICE --image IMAGE_URL --ingress INGRESS

    מחליפים את מה שכתוב בשדות הבאים:

    • INGRESS: אחת מהגדרות הכניסה הזמינות:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE: שם השירות שלכם
    • IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה, us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמט LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  2. אם משנים כניסה קיימת לשירות:

    gcloud run services update SERVICE --ingress INGRESS

    מחליפים את מה שכתוב בשדות הבאים:

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את ההערה run.googleapis.com/ingress::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/ingress: INGRESS
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE: השם של Cloud Run
    • INGRESS: אחת מהגדרות הכניסה הזמינות:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION עם שם חדש לגרסה או למחוק אותה (אם היא קיימת). אם מספקים שם חדש לגרסה, חובה שהוא יעמוד בקריטריונים הבאים:
      • מתחיל ב-SERVICE-
      • מכיל רק אותיות קטנות, מספרים ו-
      • לא מסתיים ב--
      • לא חורג מ-63 תווים
  3. מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

מוסיפים את הטקסט הבא למשאב google_cloud_run_v2_service בקובץ התצורה של Terraform:

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "ingress-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  # For valid annotation values and descriptions, see
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#ingress
  ingress = "INGRESS_TRAFFIC_INTERNAL_ONLY"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello" #public image for your service
    }
  }
}

השבתה של כתובת ה-URL שמוגדרת כברירת מחדל

משביתים את כתובות ה-URL שמוגדרות כברירת מחדל run.app של שירות Cloud Run כדי לאפשר תנועה רק מנתיבי הכניסה האחרים של השירות: Cloud Load Balancing וכל מיפוי דומיינים שהוגדר.

כדי להשבית את כתובת ה-URL שמוגדרת כברירת מחדל, מבצעים את השלבים הבאים באמצעות Google Cloud המסוף, Google Cloud CLI,‏ YAML או Terraform.

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. לוחצים על שירות קיים.

  3. בוחרים בכרטיסייה Networking.

  4. בכרטיס Endpoints, מבטלים את הסימון של Enable בקטע Default HTTPS endpoint URL.

  5. לוחצים על Save.

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

gcloud

  • בשביל שירות קיים, מריצים את הפקודה gcloud run services update עם הדגל --no-default-url, לדוגמה:

    gcloud run services update SERVICE_NAME --no-default-url
  • כדי להוסיף שירות חדש, מריצים את הפקודה gcloud run deploy עם הדגל --no-default-url, לדוגמה:

    gcloud run deploy SERVICE_NAME --no-default-url

    כאשר SERVICE_NAME הוא השם של שירות Cloud Run.

    בפלט, כתובת ה-URL מוצגת כ-None.

כדי לשחזר את כתובת ה-URL שמוגדרת כברירת מחדל, משתמשים בדגל --default-url.

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. כדי להשבית את כתובת ה-URL run.app, משתמשים בהערה run.googleapis.com/default-url-disabled:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/default-url-disabled: true
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE מחליפים בשם של שירות Cloud Run.
    • REVISION עם שם חדש לגרסה או למחוק אותה (אם היא קיימת). אם מספקים שם חדש לגרסה, חובה שהוא יעמוד בקריטריונים הבאים:
      • מתחיל ב-SERVICE-
      • מכיל רק אותיות קטנות, מספרים ו-
      • לא מסתיים ב--
      • לא חורג מ-63 תווים
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

    אם קיים קובץ service.yaml, הפקודה gcloud run services replace משתמשת בו כברירת מחדל.

כדי לשחזר את כתובת ה-URL שמוגדרת כברירת מחדל, מסירים את ההערה run.googleapis.com/default-url-disabled.

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

מוסיפים את הטקסט הבא למשאב google_cloud_run_v2_service בקובץ התצורה של Terraform:
  resource "google_cloud_run_v2_service" "disable_default_url_service" {
    name     = "cloudrun-service"
    location = "europe-west1"
    default_uri_disabled = true

    template {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/hello"
      }
      annotations = {
        "run.googleapis.com/ingress" = "all"   # "all" or "internal-only"
      }

    }
  }

מוודאים שהשורות launch_stage ו-default_uri_disabled מופיעות בקובץ main.tf. במשאב google_cloud_run_v2_service שלמעלה, כתובת ה-URL שמוגדרת כברירת מחדל בשירות Cloud Run מושבתת בתצוגה המקדימה.

כדי לשחזר את כתובת ה-URL שמוגדרת כברירת מחדל, מסירים את הארגומנטים default_uri_disabled ו-launch_stage.

השירותים הבאים של Google Cloud משתמשים בכתובת ה-URL שמוגדרת כברירת מחדלrun.appכדי להפעיל את Cloud Run. השבתה של כתובת ה-URL של run.app שמוגדרת כברירת מחדל תגרום לכך שהשירותים הבאים לא יפעלו כמו שצריך:

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