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

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

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

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

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

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

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

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

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

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

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

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

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

  • כשניגשים לשירותים פנימיים, קוראים להם כרגיל באמצעות כתובת ה-URL שלהם, בין אם זו כתובת ה-URL שמוגדרת כברירת מחדל או דומיין בהתאמה אישית שהוגדר ב-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 הן 'פנימיות'.

הגדרת Ingress

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

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

אפשר להגדיר כניסה לשירות 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. בוחרים את תעבורת הנתונים הנכנסת (ingress) שרוצים לאפשר.

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

gcloud

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

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

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

    • 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 .
    • INGRESS: אחת מהגדרות הכניסה הזמינות:
      • all
      • internal
      • internal-and-cloud-load-balancing
  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:
      name: SERVICE
      annotations:
        run.googleapis.com/ingress: INGRESS
    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
    }
  }
}

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

אפשר להגדיר תעבורת נכנסת למופע של Cloud Run באמצעות Google Cloud CLI או YAML:

gcloud

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

    gcloud beta run instances deploy INSTANCE \
        --image IMAGE_URL \
        --ingress INGRESS

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

    • INSTANCE: שם המופע.
    • IMAGE_URL: הפניה לתמונת הקונטיינר, למשל us-docker.pkg.dev/cloudrun/container/hello:latest.
    • INGRESS: אחת מהגדרות הכניסה הזמינות:
      • all
      • internal
      • internal-and-cloud-load-balancing
  2. אם משנים את הכניסה למכונה קיימת:

    gcloud beta run instances update INSTANCE \
        --ingress INGRESS

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

YAML

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

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. מעדכנים את ההערה run.googleapis.com/ingress::

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/ingress: INGRESS
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - name: CONTAINER_NAME
        image: IMAGE_URL

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

    • INSTANCE: השם של מופע Cloud Run.
    • INGRESS: אחת מהגדרות הכניסה הזמינות:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • CONTAINER_NAME: השם של הקונטיינר.
    • IMAGE_URL: הפניה לתמונת המאגר, כמו us-docker.pkg.dev/cloudrun/container/hello:latest.
  3. יוצרים או מעדכנים את המכונה באמצעות הפקודה הבאה:

    gcloud beta run instances replace instance.yaml

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

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

בקטעים הבאים מוסבר איך להשבית את כתובת ה-URL שמוגדרת כברירת מחדל לשירותים ולמופעיםשל Cloud Run.

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

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

כדי לשחזר את כתובת ה-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.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.

השבתת כתובת ה-URL שמוגדרת כברירת מחדל למופעים של Cloud Run

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

gcloud

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

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

    gcloud beta run instances deploy INSTANCE \
        --image IMAGE_URL \
        --no-default-url

    מחליפים את INSTANCE בשם של מופע Cloud Run.

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

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

YAML

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

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. כדי להשבית את כתובת ה-URL שמוגדרת כברירת מחדל, מגדירים את ההערה run.googleapis.com/default-url-disabled לערך 'true':

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/default-url-disabled: 'true'
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - name: CONTAINER_NAME
        image: IMAGE_URL

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

    • INSTANCE: השם של מופע Cloud Run.
    • CONTAINER_NAME: השם של הקונטיינר.
    • IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, כמו us-docker.pkg.dev/cloudrun/container/hello:latest.
  3. יוצרים או מעדכנים את המכונה באמצעות הפקודה הבאה:

    gcloud beta run instances replace instance.yaml

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

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