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

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

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

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

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

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

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

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

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

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

הערה: כדי להפעיל את ההגדרה הזו ב-CLI של gcloud, משתמשים בפקודה internal-and-cloud-load-balancing. כדי להפעיל את ההגדרה הזו במסוף Google Cloud , בוחרים באפשרות Internal > Allow traffic from external Application Load Balancers (פנימי > אישור תעבורה ממאזני עומסים חיצוניים של אפליקציות).
הכול הכי פחות מגביל. מאפשרת את כל הבקשות, כולל בקשות ישירות מהאינטרנט לכתובת האתר 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. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-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 כדי לאפשר תנועה רק מנתיבי ה-Ingress האחרים של השירות: Cloud Load Balancing וכל מיפוי דומיין שהוגדר.

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

המסוף

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

    כניסה ל-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

כדי לשחזר את כתובת ה-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 שמוגדרת כברירת מחדל תגרום לכך שהשירותים הבאים לא יפעלו כמו שצריך:

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