גישה למשאבים חיצוניים ברשת פרטית באמצעות כתובת IP חיצונית סטטית

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


לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :

תראו לי איך


לפני שמתחילים

  • מפעילים את ממשקי ה-API של Cloud Build,‏ Compute Engine ו-Service Networking.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    הפעלת ממשקי ה-API

  • כדי לקבל את ההרשאות שנדרשות להגדרת חיבור פרטי, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM‏ Compute Engine Network Admin (אדמין רשת של Compute Engine) ‏(roles/compute.networkAdmin) בפרויקט בענן שבו נמצאת רשת ה-VPC. להסבר על מתן תפקידים, ראו איך מנהלים את הרשאות הגישה.

  • כדי להשתמש בפקודות gcloud בדף הזה, צריך להתקין את Google Cloud CLI.

יצירת רשת VPC

המסוף

כדי ליצור רשת VPC באמצעות Google Cloud המסוף, מבצעים את השלבים הבאים:

  1. פותחים את הדף VPC networks במסוף Google Cloud .

    מעבר לרשתות VPC

  2. לוחצים על יצירת רשת VPC כדי ליצור רשת חדשה.

    יוצג הדף יצירת רשת VPC.

  3. מזינים שם לרשת.

  4. בקטע Subnet creation mode (מצב יצירת רשת משנה), בוחרים באפשרות Automatic (אוטומטי).

  5. אם רוצים להתאים אישית עוד שדות, אפשר לעיין במאמר יצירה וניהול של רשתות VPC. אחרת, משאירים את כל השדות כמו שהם.

  6. לוחצים על יצירה כדי ליצור את רשת ה-VPC.

    אחרי שלוחצים על יצירה, רשת ה-VPC החדשה מופיעה בדף רשתות VPC.

gcloud

כדי ליצור רשת VPC באמצעות כלי שורת הפקודה gcloud, מזינים את הפקודה הבאה בטרמינל, כאשר NETWORK_NAME הוא שם רשת ה-VPC:

gcloud compute networks create NETWORK_NAME \
  --subnet-mode=auto

אחרי שלוחצים על יצירה, רשת ה-VPC החדשה מופיעה בדף רשתות VPC.

מידע נוסף על יצירה וניהול של רשתות VPC זמין במאמר יצירה וניהול של רשתות VPC.

יצירת חיבור פרטי

המסוף

כדי ליצור חיבור פרטי בין רשת ה-VPC שלכם לבין הרשת של ספק השירות, צריך לבצע את השלבים הבאים:

  1. פותחים את הדף VPC networks במסוף Google Cloud .

    מעבר לרשתות VPC

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

    יוצג הדף VPC network details (פרטי רשת VPC).

  3. לוחצים על הכרטיסייה Private Service Connection (חיבור שירות פרטי).

    1. בוחרים בכרטיסייה Allocated IP ranges for services (טווחים של כתובות IP שהוקצו לשירותים).

    2. לוחצים על הקצאת טווח כתובות IP.

      יופיע חלון קופץ עם הכיתוב הקצאת טווח כתובות IP פנימיות.

      1. מזינים שם לטווח כתובות ה-IP.

      2. בקטע טווח כתובות IP, בוחרים באפשרות אוטומטי.

      3. בשדה אורך הקידומת, מזינים את אורך הקידומת של הרשת.

      4. לוחצים על הקצאה כדי להקצות את טווח כתובות ה-IP.

    3. לוחצים על הכרטיסייה Private Connections to Services (חיבורים פרטיים לשירותים).

    4. לוחצים על יצירת חיבור.

      יופיע החלון הקופץ יצירת חיבור פרטי.

      1. בקטע Assigned allocation, בוחרים את טווח כתובות ה-IP.

      2. לוחצים על Connect.

      החיבור יופיע בטבלה בכרטיסייה Private Connections to Services (חיבורים פרטיים לשירותים).

      לוחצים על הפעלה (ייצוא של נתיב מותאם אישית) כדי לוודא שהנתיבים של ה-VPC חלים על הרשת שבה פועלים המופעים של המאגר הפרטי.

עכשיו הרשת מוגדרת.

gcloud

כדי ליצור חיבור פרטי בין רשת ה-VPC שלכם לבין הרשת של ספק השירות, צריך לבצע את השלבים הבאים:

  1. מזינים את הפקודה הבאה בטרמינל כדי להקצות טווח כתובות IP לשירות:

        gcloud compute addresses create ALLOCATED_RANGE_NAME \
          --global \
          --prefix-length=PREFIX_LENGTH \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    כאשר:

    • ALLOCATED_RANGE_NAME הוא השם של הטווח שהוקצה. לדוגמה, my-allocated-range.
    • PREFIX_LENGTH הוא אורך הקידומת של הרשת. אורך הקידומת צריך להיות /24 או פחות, למשל /22, /21 וכו'.
    • VPC_NETWORK: השם של רשת ה-VPC, למשל my-vpc-network.
    • PROJECT_ID הוא מזהה הפרויקט שמכיל את רשת ה-VPC.
  2. כדי ליצור חיבור פרטי, מזינים את הפקודה הבאה בטרמינל:

        gcloud services vpc-peerings connect \
          --service=servicenetworking.googleapis.com \
          --ranges=ALLOCATED_RANGE_NAME \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    כאשר:

    • ALLOCATED_RANGE_NAME הוא השם של טווח הכתובות שהוקצה שיצרתם בשלב הקודם.
    • VPC_NETWORK: השם של רשת ה-VPC, למשל my-vpc-network.
    • PROJECT_ID הוא מזהה הפרויקט שמכיל את רשת ה-VPC.
  3. מזינים את הפקודה הבאה במסוף כדי לוודא שהמסלולים של ה-VPC חלים על הרשת שבה פועלות מכונות המאגר הפרטי:

        gcloud compute networks peerings update servicenetworking-googleapis-com \
          --export-custom-routes \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    כאשר:

    • VPC_NETWORK: השם של רשת ה-VPC, למשל my-vpc-network.
    • PROJECT_ID הוא מזהה הפרויקט שמכיל את רשת ה-VPC.

עכשיו הרשת מוגדרת.

מידע נוסף על הגדרת רשת זמין במאמר הגדרת חיבור פרטי בין רשת ה-VPC לרשת של בעלים של שירות מנוהל.

יצירת מאגר פרטי

המסוף

כדי ליצור מאגר פרטי באמצעות Google Cloud המסוף, מבצעים את השלבים הבאים:

  1. פותחים את הדף Worker Pool במסוף Google Cloud :

    פתיחת הדף Cloud Build Worker pool

  2. בוחרים את הפרויקט שבו רוצים ליצור את המאגר הפרטי.

  3. בדף Worker pool, לוחצים על Create.

    יוצג לכם החלונית יצירת מאגר פרטי.

  4. בחלונית הצדדית Create private pool, מזינים את הפרטים הבאים:

    1. מזינים Name (שם) למאגר הפרטי.

    2. בוחרים אזור מהתפריט הנפתח.

    3. בקטע רשת, מזינים את הפרטים הבאים:

    • Project (פרויקט): מזינים את מזהה הפרויקט או המספר שלו.
    • רשת: מזינים את השם של רשת ה-VPC.
    1. (אופציונלי) מבטלים את הסימון של התיבה הקצאת כתובות IP חיצוניות כדי להגדיר את רשת ה-VPC המוגבלת ביותר.

יצרתם מאגר פרטי.

gcloud

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

      gcloud builds worker-pools create PRIVATEPOOL_ID \
        --project=PRIVATEPOOL_PROJECT_ID \
        --region=REGION \
        --peered-network=PEERED_NETWORK \
        --no-public-egress

כאשר:

  • PRIVATEPOOL_ID הוא המזהה הייחודי של המאגר הפרטי.
  • PRIVATEPOOL_PROJECT_ID הוא המזהה של Google Cloud הפרויקט שבו רוצים ליצור את המאגר הפרטי.
  • REGION הוא אחד מהאזורים הנתמכים.
  • PEERED_NETWORK היא כתובת ה-URL של משאב הרשת
  • --no-public-egress: אם הדגל הזה מוגדר, המאגר הפרטי נוצר ללא כתובת IP חיצונית.

יצרתם מאגר פרטי.

מידע נוסף על יצירה וניהול של מאגרי כתובות פרטיים זמין במאמר יצירה וניהול של מאגרי כתובות פרטיים.

גישה למשאבים חיצוניים ברשת פרטית

כברירת מחדל, כתובות IP חיצוניות שמשויכות למאגרים פרטיים של Cloud Build הן לא סטטיות ולא ניתנות להגדרה. הם מוקצים על ידיGoogle Cloud. אם רוצים להגדיר את המאגרים הפרטיים כך שתהיה להם גישה למשאבים חיצוניים מהרשת הפרטית עם כתובת IP חיצונית סטטית, צריך להגדיר מכונה וירטואלית (VM) בפרויקט שתפעל כשער NAT בניהול עצמי כדי להעביר בקשות לאינטרנט הציבורי. לאחר מכן, צריך להגדיר מסלולים מותאמים אישית כדי להעביר את הבקשות האלה למכונה הווירטואלית, וכך לוודא שהמסלולים מוחלפים עם פרויקט הרשת של השירות.

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

  1. יוצרים סקריפט לטעינה בזמן ההפעלה כדי להגדיר את ה-VM כשרת proxy לכל תעבורה שמנותבת אל ה-VM, ולהסוות את התעבורה הזו כאילו היא מגיעה מכתובת ה-IP של ה-VM:

    #! /bin/bash
    set -e
    
    sysctl -w net.ipv4.ip_forward=1
    IFACE=$(ip -brief link | tail -1 | awk  {'print $1'})
    iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
    
  2. מגדירים מכונה וירטואלית באותו VPC כמו המאגר הפרטי עם כלל שמאפשר להעביר בקשות דרך ה-VPC:

    gcloud compute instances create VM_NAME \
      --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \
      --network=NETWORK_NAME \
      --private-network-ip=INTERNAL_IP --can-ip-forward \
      --zone=ZONE \
      --subnet=SUBNETWORK \
      --tags=NAT_TAG  \
      --metadata-from-file=startup-script=STARTUP_SCRIPT
    

    כאשר:

    • VM_NAME הוא השם שרוצים לתת למכונה הווירטואלית.
    • NETWORK_NAME הוא שם הרשת שיצרתם בקטע הקודם.
    • INTERNAL_IP היא כל כתובת IP פנימית חוקית בטווח של רשת המשנה באזור של המכונה הווירטואלית. לדוגמה, 10.128.0.2.
    • ZONE הוא האזור שמשויך לרשת שלכם, כמו us-central1-a.
    • ‫(Optional) ‏SUBNETWORK הוא השם של רשת המשנה. השם של רשת המשנה מופיע ב-REST המקביל של רשת המשנה בפורמט הבא: projects/project-id/regions/region/subnetworks/subnetwork-name. אם בחרתם באפשרות אוטומטי בקטע מצב חיבור לרשת משנה כשיצרתם רשת VPC, אתם לא צריכים לציין את השדה הזה.
    • NAT_TAG הוא השם של תג שער ה-NAT שמאפשר לכם לנתב בקשות באופן מותנה, בהתאם לשאלה אם יש להן תג מהמכונה הווירטואלית הזו. אפשר לציין כל שם לתג.
    • STARTUP_SCRIPT הוא השם של סקריפט ההפעלה שיצרתם בשלב הקודם. לדוגמה, startup-script-example.sh. בדוגמה הזו, נעשה שימוש בדגל --metadata-from-file כדי להעביר את התוכן של סקריפט לטעינה בזמן ההפעלה שציינתם למפתח שנקרא startup-script.

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

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

    gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-address=INTERNAL_IP \
      --network=NETWORK_NAME \
      --priority=POOL_ROUTE_PRIORITY
    

    כאשר:

    • PRIVATE_POOL_ROUTE_NAME הוא השם שרוצים לתת למסלול.
    • DESTINATION_RANGE הוא טווח כתובות CIDR תקין שכולל את היעד שאליו רוצים לנתב. לדוגמה, מופע של GitHub Enterprise Edition. לדוגמה, 8.8.8.0/24.
    • INTERNAL_IP הוא ערך כתובת ה-IP הפנימית שהתקבל בשלב הקודם. לדוגמה, 10.128.0.2.
    • NETWORK_NAME הוא שם הרשת שיצרתם בקטע הקודם.
    • POOL_ROUTE_PRIORITY הוא מספר העדיפות שרוצים לציין עבור המסלול.

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

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

    gcloud compute routes create NAT_EGRESS_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-gateway=default-internet-gateway \
      --network=NETWORK_NAME \
      --priority=NAT_ROUTE_PRIORITY \
      --tags=NAT_TAG
    

    כאשר:

    • NAT_EGRESS_ROUTE_NAME הוא השם שרוצים לתת לנתיב של שער ה-NAT.
    • DESTINATION_RANGE היא הכתובת של היעד שאליו רוצים לנתב. לדוגמה, מופע של GitHub Enterprise Edition. לדוגמה, 8.8.8.0/24.
    • NETWORK_NAME הוא שם הרשת שיצרתם בקטע הקודם.
    • NAT_TAG הוא השם של תג שער ה-NAT שמאפשר לכם לנתב בקשות באופן מותנה, בהתאם לשאלה אם יש להן תג מהמכונה הווירטואלית הזו. אפשר לציין כל שם לתג.
    • NAT_ROUTE_PRIORITY הוא מספר העדיפות שרוצים לציין עבור המסלול.

    הפקודה הזו מבטיחה שכל תעבורה ממכונת ה-VM של ה-proxy תופנה לאינטרנט הציבורי.

  5. מוסיפים כלל חומת אש שמאפשר תעבורת נתונים מהמאגר הפרטי אל המכונה הווירטואלית של שער ה-NAT:

    gcloud compute firewall-rules create RULE_NAME \
      --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \
      --network=NETWORK_NAME \
      --source-ranges=ALLOCATED_RANGE \
      --target-tags=NAT_TAG
    

    כאשר:

    • RULE_NAME הוא השם שרוצים לתת לכלל חומת האש.
    • FIREWALL_PRIORITY הוא מספר העדיפות שרוצים לציין לכלל חומת האש.
    • NETWORK_NAME הוא שם הרשת שיצרתם בקטע הקודם.
    • ALLOCATED_RANGE הוא טווח ה-CIDR שהקציתם כשיצרתם את החיבור הפרטי לשירות.
    • NAT_TAG הוא השם של תג שער ה-NAT שמאפשר לכם לנתב בקשות באופן מותנה, בהתאם לשאלה אם יש להן תג מהמכונה הווירטואלית הזו. אפשר לציין כל שם לתג.

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

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