בקרת גישה מבוססת-נקודת קצה (endpoint) של ספק PSC

1. מבוא

Private Service Connect

‫Private Service Connect היא יכולת של רשת Google Cloud שמאפשרת לצרכנים לגשת לשירותים מנוהלים באופן פרטי מתוך רשת ה-VPC שלהם. באופן דומה, הוא מאפשר לספקי שירותים מנוהלים לארח את השירותים האלה ברשתות VPC נפרדות משלהם ולהציע חיבור פרטי לצרכנים שלהם.

50b907b09af4d8ac.png

בקרת גישה לשירות ההפקה של Private Service Connect

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

בכל אחת מהעדפות החיבור, אפשר לבטל חיבורים שאושרו ולדחות אותם באמצעות מדיניות ארגונית (compute.restrictPrivateServiceConnectConsumer) שחוסמת חיבורים נכנסים.

חשוב לשים לב שמדיניות הארגון (compute.restrictPrivateServiceConnectConsumer) חלה על ארגון,תיקייה או פרויקט. אם רוצים בקרת גישה פרטנית לנקודת הקצה של PSC, אפשר להשתמש ברשימת הצרכנים המורשים של נקודות קצה ספציפיות של PSC.

בקרת גישה שמבוססת על נקודות קצה

בקרת גישה שמבוססת על נקודות קצה (endpoints) של PSC היא היכולת של ספק להעניק הרשאה לצרכנים באמצעות נקודות קצה (endpoints) נפרדות של PSC במדיניות של קובץ השירות.

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

ה-Codelab הזה מתמקד בהסבר על הגדרת התכונה הזו.

שימו לב: השיטה הזו לא רלוונטית לשרתי קצה עורפיים של Private Service Connect.

2. מה תלמדו

  • איך מפרסמים שירות באמצעות PSC.
  • בעלי שירותים מנוהלים יכולים ליצור בקרת גישה שמבוססת על נקודת קצה מסוג PSC.
  • איך ניגשים לשירות PSC בתור צרכן.

3. ארכיטקטורת Lab כוללת

3d7cbafaffb50d2d.png

4. שלבי ההכנה

תפקידי IAM שנדרשים כדי לעבוד על ה-Lab

מתחילים בהקצאת תפקידי IAM הנדרשים לחשבון GCP ברמת הפרויקט.

  • אדמין של רשת מחשוב (roles/compute.networkAdmin) התפקיד הזה מאפשר לכם שליטה מלאה במשאבי הרשת של Compute Engine.
  • אדמין של רישום ביומן (roles/logging.admin) התפקיד הזה נותן גישה לכל ההרשאות שקשורות לרישום ביומן, ולהרשאות שתלויות בהן.
  • אדמין בממשק 'שימוש בשירות' (roles/serviceusage.serviceUsageAdmin) התפקיד הזה מאפשר להפעיל, להשבית ולבדוק את מצבי השירות, לבדוק פעולות ולצרוך מכסות וחיובים בפרויקט צרכן.
  • אדמין מכונות של Compute ‏ (roles/compute.instanceAdmin.v1) התפקיד הזה נותן לכם שליטה מלאה במכונות, בקבוצות של מכונות, בדיסקים, בקובצי snapshot ובתמונות ב-Compute Engine. הרשאת קריאה לכל משאבי הרשת של Compute Engine.
  • אדמין אבטחה של Compute ‏ (roles/compute.securityAdmin) התפקיד הזה נותן הרשאות ליצור, לשנות ולמחוק כללי חומת אש ואישורי SSL, וגם להגדיר הגדרות של מכונות וירטואליות מוגנות.

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

ב-Cloud Shell, מוודאים שהפרויקט מוגדר בצורה נכונה ומגדירים את משתני הסביבה.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud auth login
gcloud config set project <your project id>
export project_id=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project_id
echo $region
echo $zone

מפעילים את כל ממשקי ה-API הנדרשים של Google בפרויקט. ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud services enable \
  compute.googleapis.com 
  

יצירת VPC של יצרן

בפרויקט, יוצרים רשת VPC עם מצב תת-רשת מותאם אישית. מבצעים את הפעולות הבאות ב-Cloud Shell:

gcloud compute networks create producer-net \
    --subnet-mode=custom

יצירת רשתות משנה ב-VPC של הספק

תצטרכו שלוש רשתות משנה: producer-subnet לשירות שלכם, proxy-only-subnet למאזן העומסים לפרסום השירות ו-psc-subnet ל-PSC לפרסום השירות.

ב-Cloud Shell, מבצעים את הפעולות הבאות כדי ליצור רשתות משנה של IPv4:

gcloud compute networks subnets create producer-subnet \
    --network=producer-net \
    --range=10.10.0.0/24 \
    --region=$region
gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=$region \
    --network=producer-net \
    --range=10.30.0.0/24
gcloud compute networks subnets create psc-subnet \
    --network=producer-net \
    --region=$region \
    --range=192.168.0.0/16 \
    --purpose=PRIVATE_SERVICE_CONNECT

יצירה של Cloud NAT ו-Cloud Router עבור VPC של יצרן

משתמשים ב-Cloud NAT כדי לאפשר למכונה וירטואלית להוריד ולהתקין אפליקציות.

gcloud compute routers create $region-cr \
   --network=producer-net \
   --region=$region
gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

יצירת VPC של צרכן

בפרויקט, יוצרים רשת VPC עם מצב תת-רשת מותאם אישית. מבצעים את הפעולות הבאות ב-Cloud Shell:

gcloud compute networks create consumer-net \
    --subnet-mode=custom

יצירת רשת משנה ב-VPC של הלקוח

ב-Cloud Shell, מבצעים את הפעולות הבאות כדי ליצור תת-רשת IPv4:

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-net \
    --range=10.20.0.0/24 \
    --region=$region

יצירת מדיניות חומת אש גלובלית עבור VPC של יצרן ו-VPC של צרכן

תצרו מדיניות חומת אש גלובלית ברשת ותשייכו אותה ל-VPC של הספק ול-VPC של הצרכן.

gcloud compute network-firewall-policies create global-fw-policy \
--global
gcloud compute network-firewall-policies associations create \
    --firewall-policy=global-fw-policy \
    --name=producer-fw-policy \
    --network=producer-net \
    --global-firewall-policy 
gcloud compute network-firewall-policies associations create \
    --firewall-policy=global-fw-policy \
    --name=consumer-fw-policy \
    --network=consumer-net \
    --global-firewall-policy 

אישור SSH

כדי לאפשר לשרת proxy לאימות זהויות (IAP) להתחבר למכונות הווירטואליות, צריך ליצור כלל חומת אש שכולל את התנאים הבאים:

  • רלוונטי לכל מכונות ה-VM שרוצים לגשת אליהן באמצעות IAP.
  • מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-IP‏ ‎35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP שמשמשות את IAP להעברת TCP.
gcloud compute network-firewall-policies rules create 100 \
    --action=ALLOW \
    --firewall-policy=global-fw-policy \
    --description="producer-allow-iap" \
    --direction=INGRESS \
    --src-ip-ranges=35.235.240.0/20 \
    --layer4-configs=tcp:22  \
    --global-firewall-policy

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

תשתמשו במאזן עומסים אזורי פנימי של אפליקציות (ALB) כדי לפרסם את השירות.כלל חומת האש של תעבורת הנתונים הנכנסת (ingress) y צריך לאפשר ל-proxy-only-subnet לגשת לשירות. מידע מפורט זמין במסמך הזה.

gcloud compute network-firewall-policies rules create 200 \
    --action=ALLOW \
    --firewall-policy=global-fw-policy \
    --description="producer-allow-access-service" \
    --direction=INGRESS \
    --src-ip-ranges=10.30.0.0/24 \
    --layer4-configs=tcp:80  \
    --global-firewall-policy

אישור בדיקת תקינות של מאזן העומסים בשירות

בדיקות תקינות של מאזן עומסים פנימי אזורי של אפליקציות (ALB) משתמשות בטווחים 35.191.0.0/16 ו-130.211.0.0/22. תצטרכו ליצור כלל חומת אש לתעבורת נתונים נכנסת (ingress) כדי לאפשר בדיקות תקינות מהבדיקות. פרטים נוספים זמינים במסמך הזה.

gcloud compute network-firewall-policies rules create 300 \
    --action=ALLOW \
    --firewall-policy=global-fw-policy \
    --description="producer-allow-health-check" \
    --direction=INGRESS \
    --src-ip-ranges=35.191.0.0/16,130.211.0.0/22\
    --layer4-configs=tcp:80  \
    --global-firewall-policy

יצירת VM כלקוח HTTP ב-VPC של הצרכן

ב-Cloud Shell, מבצעים את הפעולות הבאות כדי ליצור מכונה וירטואלית כלקוח בדיקה:

gcloud compute instances create myclient \
    --zone=$zone \
    --subnet=consumer-subnet \
    --shielded-secure-boot \
    --no-address

יצירת מכונה וירטואלית כשרת HTTP ב-VPC של הספק

ב-Cloud Shell, מבצעים את הפעולות הבאות כדי ליצור מכונה וירטואלית כשרת HTTP:

gcloud compute instances create myserver \
    --subnet=producer-subnet \
    --zone=$zone \
    --no-address \
    --shielded-secure-boot \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Http Server." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

5. פרסום שירות PSC של הבעלים של שירות מנוהל

יצירת מאזן עומסים פנימי אזורי של אפליקציות (ALB)

תיצרו מאזן עומסים אזורי של אפליקציות (ALB) פנימית כחלק הקדמי של השירות, והבק-אנד הוא קבוצת מופעים לא מנוהלת שנקודת הקצה (endpoint) שלה היא שרת ה-HTTP שיצרנו קודם.

שמירת כתובת ה-IP של מאזן העומסים

gcloud compute addresses create l7-ilb-ip-address \
    --region=$region \
    --subnet=producer-subnet

יצירת קבוצת מופעים

תצרו קבוצה של מופעי מכונה לא מנוהלים ותוסיפו את המכונה הווירטואלית myserver לקבוצת המופעים.

gcloud compute instance-groups unmanaged create my-service-ig \
    --zone=$zone
gcloud compute instance-groups unmanaged add-instances my-service-ig \
    --zone=$zone \
    --instances=myserver

יצירת בדיקת תקינות של HTTP

gcloud compute health-checks create http l7-ilb-basic-check \
     --region=$region \
     --use-serving-port

יצירת שירות הקצה העורפי

gcloud compute backend-services create l7-ilb-backend-service \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --health-checks=l7-ilb-basic-check \
    --health-checks-region=$region \
    --region=$region

הוספת קצה עורפי לשירות הקצה העורפי

gcloud compute backend-services add-backend l7-ilb-backend-service \
    --balancing-mode=UTILIZATION \
    --instance-group=my-service-ig \
    --instance-group-zone=$zone \
    --region=$region

יצירת מפת URL

gcloud compute url-maps create l7-ilb-map \
    --default-service=l7-ilb-backend-service \
    --region=$region

יצירת שרת proxy ליעד

gcloud compute target-http-proxies create l7-ilb-proxy \
    --url-map=l7-ilb-map \
    --url-map-region=$region \
    --region=$region

יצירת כלל ההעברה

gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --network=producer-net \
    --subnet=producer-subnet \
    --address=l7-ilb-ip-address \
    --ports=80 \
    --region=$region \
    --target-http-proxy=l7-ilb-proxy \
    --target-http-proxy-region=$region

הבעלים של השירות המנוהל ב-PSC מפרסם את השירות

תשתמשו ב-PSC כדי לפרסם את השירות עם connection-preference=ACCEPT_MANUAL ורשימות צרכנים ריקות.

gcloud compute service-attachments create my-psc-service \
    --region=$region \
 --target-service=projects/$project_id/regions/$region/forwardingRules/l7-ilb-forwarding-rule \
    --connection-preference=ACCEPT_MANUAL \
    --nat-subnets=psc-subnet
export myserver_service_attachment=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(selfLink.scope(v1))")

echo $myserver_service_attachment

6. הצרכן יוצר את נקודת הקצה של PSC

שמירת כתובת IP לנקודת קצה של PSC

gcloud compute addresses create myserver-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-subnet \
    --ip-version=IPV4

יצירת נקודת קצה של PSC

יוצרים נקודת קצה של PSC ומקבלים את כתובת ה-IP של נקודת הקצה של PSC לצורך בדיקה בשלב הבא.

gcloud compute forwarding-rules create myserver-psc-endpoint \
    --region=$region \
    --network=consumer-net \
    --address=myserver-psc-endpoint-ip \
    --target-service-attachment=$myserver_service_attachment
psc_endpoint_ip=$(gcloud compute forwarding-rules describe myserver-psc-endpoint \
    --region=$region --format="value(IPAddress)")

echo $psc_endpoint_ip

הצרכן בודק את הסטטוס של נקודת הקצה ב-PSC

לפני שהיצרן מוסיף את נקודת הקצה של ה-PSC לרשימת הצרכנים, החיבור מופיע בנקודת הקצה המקושרת בצד הצרכן עם הסטטוס 'בהמתנה'.

gcloud compute forwarding-rules describe myserver-psc-endpoint \
    --region=$region

תוצג תוצאה דומה לזו שבהמשך.

IPAddress: 10.20.0.3
allowPscGlobalAccess: false
creationTimestamp: '2026-02-23T16:27:27.920-08:00'
fingerprint: yh_UiYqjHCc=
id: '934193159895862912'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: myserver-psc-endpoint
network: https://www.googleapis.com/compute/v1/projects/<project_id>/global/networks/consumer-net
networkTier: PREMIUM
pscConnectionId: '160443618817212419'
pscConnectionStatus: PENDING
region: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
serviceDirectoryRegistrations:
- namespace: goog-psc-default
target: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service

7. בדיקת הגישה ממכונת VM צרכנית למכונת VM יצרנית

בודקים את כתובת ה-IP של נקודת הקצה של PSC.

echo $psc_endpoint_ip

מתחברים ל-VM בשם myclient באמצעות SSH ובודקים אם יש לו גישה ל-myserver ביציאה 80 של HTTP.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute ssh \
    --zone=$zone "myclient" \
    --tunnel-through-iap 

משתמשים ב-curl כדי לגשת לנקודת הקצה של PSC שיצרתם.

curl -m 10 <psc_endpoint_ip> 

יוצג שהפקודה curl הסתיימה בגלל חריגה מזמן קצוב לתפוגה. לקוח הבדיקה מרשת ה-VPC של הצרכן לא יכול לגשת לשרת ה-HTTP ברשת ה-VPC של הספק.

curl: (28) Connection timed out after 10001 milliseconds

כדי לחזור ל-Cloud Shell, יוצאים מסשן ה-SSH.

exit

8. הבעלים של השירות המנוהל מאשר את נקודת הקצה של PSC

הפקת בדיקות של סטטוס נקודת הקצה של PSC

לפני שהיצרן מוסיף את נקודת הקצה של PSC לרשימת הצרכנים, החיבור מוצג בחיבור השירות עם הסטטוס Pending (בהמתנה).

gcloud compute service-attachments describe my-psc-service --region=$region 

תוצג תוצאה דומה לזו שבהמשך.

connectedEndpoints:
- consumerNetwork: https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net
  endpoint: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
  endpointWithId: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
  pscConnectionId: '160443618817212419'
  status: PENDING
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2026-02-23T13:27:33.886-08:00'
description: ''
enableProxyProtocol: false
fingerprint: -9EI8FCALrA=
id: '2578692595155826858'
kind: compute#serviceAttachment
name: my-psc-service
natSubnets:
- https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/subnetworks/psc-subnet
pscServiceAttachmentId:
  high: '149466704441770984'
  low: '2578692595155826858'
reconcileConnections: false
region: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service
targetService: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/l7-ilb-forwarding-rule

קבלת ה-URI מבוסס-המזהה של נקודת הקצה של PSC

ה-URI מבוסס-המזהה של נקודת הקצה של PSC הוא המזהה של כלל ההעברה שהלקוח יצר. בדוגמה שלמעלה, endpointWithId הוא ה-URI של נקודת הקצה של PSC שנוצרה על ידי הלקוח. היצרן יצטרך את ה-URI הזה כדי ליצור בקרת גישה מבוססת-נקודת קצה.

( לתשומת ליבך, מזהה החיבור של PSC הוא לא המזהה שאנחנו מחפשים. )

export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")

echo $psc_endpoint_uri

הוספת URI מבוסס-מזהה של נקודת קצה של PSC לרשימת ההסכמה של הצרכן

gcloud compute service-attachments update my-psc-service \
    --region=$region \
    --consumer-accept-list=$psc_endpoint_uri

הפקת בדיקות של סטטוס נקודת הקצה של PSC

gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"

תוצג תוצאה דומה לזו שבהמשך. הסטטוס השתנה ל'התקבל'.

{'consumerNetwork': 'https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net', 'endpoint': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint', 'endpointWithId': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/47564871796017232', 'pscConnectionId': '54547416268144643', 'status': 'ACCEPTED'}

9. בדיקת הגישה ממכונת VM צרכנית למכונת VM יצרנית

בודקים את כתובת ה-IP של נקודת הקצה של PSC.

echo $psc_endpoint_ip

מתחברים ל-VM בשם myclient באמצעות SSH ובודקים אם יש לו גישה ל-myserver ביציאה 80 של HTTP.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute ssh \
    --zone=$zone "myclient" \
    --tunnel-through-iap 

משתמשים ב-curl כדי לגשת לנקודת הקצה של PSC שיצרתם.

curl <psc_endpoint_ip>

פקודת curl תחזיר תשובה מ-myserver בהצלחה. לקוח הבדיקה מ-VPC של הצרכן ניגש לשרת ה-HTTP ב-VPC של הספק.

I am a Http Server.

כדי לחזור ל-Cloud Shell, יוצאים מסשן ה-SSH.

exit

10. הסרת המשאבים

ניקוי המכונות הווירטואליות

ב-Cloud Shell, מבצעים את הפעולות הבאות:

gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet

ניקוי רכיבי צרכן של PSC

gcloud compute forwarding-rules delete myserver-psc-endpoint \
    --region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
    --region=$region --quiet

ניקוי רכיבי PSC producer

gcloud compute service-attachments delete my-psc-service \
    --region=$region --quiet
gcloud compute forwarding-rules delete l7-ilb-forwarding-rule \
    --region=$region --quiet
gcloud compute target-http-proxies delete l7-ilb-proxy \
    --region=$region --quiet
gcloud compute url-maps delete l7-ilb-map \
    --region=$region --quiet
gcloud compute backend-services remove-backend l7-ilb-backend-service \
    --instance-group=my-service-ig \
    --instance-group-zone=$zone \
    --region=$region --quiet
gcloud compute backend-services delete l7-ilb-backend-service \
    --region=$region --quiet
gcloud compute health-checks delete l7-ilb-basic-check \
     --region=$region --quiet
gcloud compute instance-groups unmanaged delete my-service-ig \
    --zone=$zone --quiet
gcloud compute addresses delete l7-ilb-ip-address \
    --region=$region --quiet

ניקוי של חומת אש, Cloud NAT, ‏ Cloud Router ו-VPC

gcloud compute network-firewall-policies rules delete 100 \
    --firewall-policy=global-fw-policy \
    --global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 200 \
    --firewall-policy=global-fw-policy \
    --global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 300 \
    --firewall-policy=global-fw-policy \
    --global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
    --firewall-policy=global-fw-policy \
    --name=producer-fw-policy \
    --global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
    --firewall-policy=global-fw-policy \
    --name=consumer-fw-policy \
    --global-firewall-policy --quiet
gcloud compute network-firewall-policies delete global-fw-policy \
    --global --quiet
gcloud compute routers nats delete $region-nat \
    --router=$region-cr \
    --region=$region --quiet
gcloud compute routers delete $region-cr \
    --region=$region --quiet
gcloud compute networks subnets delete producer-subnet \
    --region=$region --quiet
gcloud compute networks subnets delete proxy-only-subnet \
    --region=$region --quiet
gcloud compute networks subnets delete psc-subnet \
    --region=$region --quiet
gcloud compute networks delete producer-net --quiet
gcloud compute networks subnets delete consumer-subnet \
    --region=$region --quiet
gcloud compute networks delete consumer-net --quiet

11. מזל טוב

הצלחתם לבדוק את בקרת הגישה שמבוססת על נקודת קצה של שירות הפקה ב-Private Service Connect.