1. מבוא
אפשר להשתמש ב-Private Service Connect (PSC) כדי ליצור גישה פרטית ומאובטחת מאוד למודלים שנפרסו מ-Vertex AI Model Garden. במקום לחשוף נקודת קצה ציבורית, השיטה הזו מאפשרת לכם לפרוס את המודל לנקודת קצה פרטית של Vertex AI שאפשר לגשת אליה רק בתוך הענן הווירטואלי הפרטי (VPC).
Private Service Connect יוצר נקודת קצה עם כתובת IP פנימית בתוך ה-VPC שלכם, ומתחבר ישירות לשירות Vertex AI שמנוהל על ידי Google ומארח את המודל שלכם. כך אפשר לאפליקציות בסביבות ה-VPC והסביבות המקומיות (באמצעות Cloud VPN או Interconnect) לשלוח בקשות להיקשים באמצעות כתובות IP פרטיות.
חשוב לציין שכל תעבורת הנתונים ברשת בין ה-VPC לבין נקודת הקצה הפרטית של Vertex AI נשארת ברשת הייעודית של Google, ומבודדת לחלוטין מהאינטרנט הציבורי. בנוסף, החיבור הפרטי הזה מאובטח בזמן ההעברה באמצעות הצפנת TLS. ההצפנה מקצה לקצה מבטיחה שהבקשות לתחזיות והתשובות של המודל יהיו מוגנות, וכך משפרת את הסודיות והתקינות של הנתונים. השילוב של בידוד רשת באמצעות PSC והצפנת TLS מספק סביבה מאובטחת לחיזויים אונליין, מפחית את זמן האחזור ומחזק באופן משמעותי את מצב האבטחה.

מה תפַתחו
במדריך הזה תורידו את Gemma 3 מ-Model Garden, שמתארח ב-Vertex AI Online Inference כנקודת קצה פרטית שאפשר לגשת אליה דרך Private Service Connect. ההגדרה מקצה לקצה תכלול:
- מודל Model Garden: תבחרו את Gemma 3 מ-Vertex AI Model Garden ותפרסו אותו לנקודת קצה של Private Service Connect.
- Private Service Connect: תגדירו נקודת קצה (endpoint) לצרכן בענן הווירטואלי הפרטי (VPC) שלכם, שתכלול כתובת IP פנימית ברשת שלכם.
- חיבור מאובטח ל-Vertex AI: נקודת הקצה של PSC תכוון ל-Service Attachment שנוצר אוטומטית על ידי Vertex AI עבור פריסת המודל הפרטי שלכם. כך נוצר חיבור פרטי, שמבטיח שתעבורת הנתונים בין ה-VPC שלכם לבין נקודת הקצה של פרסום המודל לא תעבור דרך האינטרנט הציבורי.
- הגדרת לקוח ב-VPC: תגדירו לקוח (לדוגמה, מכונת VM של Compute Engine) ב-VPC כדי לשלוח בקשות הסקה למודל שנפרס באמצעות כתובת ה-IP הפנימית של נקודת הקצה של PSC.
- אימות הצפנת TLS: מה-VM של הלקוח ב-VPC, תשתמשו בכלים סטנדרטיים ( openssl s_client) כדי להתחבר לכתובת ה-IP הפנימית של נקודת הקצה של PSC. בשלב הזה תוכלו לבדוק את פרטי לחיצת היד ואת אישור השרת שמוצג כדי לוודא שערוץ התקשורת לשירות Vertex AI אכן מוצפן באמצעות TLS.
בסוף התהליך, יהיה לכם מודל לדוגמה של Model Garden שמופעל באופן פרטי ונגיש רק מתוך רשת ה-VPC שציינתם.
מה תלמדו
במדריך הזה נסביר איך פורסים מודל מ-Vertex AI Model Garden ואיך מגדירים גישה מאובטחת אליו מהענן הווירטואלי הפרטי (VPC) באמצעות Private Service Connect (PSC). השיטה הזו מאפשרת לאפליקציות ב-VPC (הצרכן) להתחבר באופן פרטי לנקודת הקצה של מודל Vertex AI (שירות היצרן) בלי לעבור דרך האינטרנט הציבורי.
במאמר הזה נסביר:
- הסבר על PSC ל-Vertex AI: איך PSC מאפשר חיבורים פרטיים ומאובטחים בין צרכנים לבין ספקים. ה-VPC שלכם יכול לגשת למודל Model Garden שנפרס באמצעות כתובות IP פנימיות.
- פריסת מודל עם גישה פרטית: איך מגדירים נקודת קצה של Vertex AI למודל Model Garden כדי להשתמש ב-PSC, וכך להפוך אותה לנקודת קצה פרטית.
- התפקיד של Service Attachment: כשפורסים מודל לנקודת קצה פרטית של Vertex AI, מערכת Google Cloud יוצרת באופן אוטומטי Service Attachment בפרויקט דייר שמנוהל על ידי Google. השירות המצורף הזה חושף את שירות ההצגה של המודל לרשתות של צרכנים.
- יצירת נקודת קצה של PSC ב-VPC:
- איך מקבלים את ה-URI הייחודי של Service Attachment מפרטי נקודת הקצה של Vertex AI שנפרסה.
- איך שומרים כתובת IP פנימית ברשת המשנה שבחרתם ב-VPC.
- איך יוצרים כלל העברה ב-VPC שפועל כנקודת קצה של PSC ומכוון ל-Vertex AI Service Attachment. נקודת הקצה הזו מאפשרת גישה למודל דרך כתובת ה-IP הפנימית השמורה.
- יצירת קישוריות פרטית: איך נקודת הקצה של PSC ב-VPC מתחברת ל-Service Attachment, ומגשרת בין הרשת שלכם לבין שירות Vertex AI בצורה מאובטחת.
- שליחת בקשות להיקשים באופן פרטי: איך לשלוח בקשות לחיזויים ממשאבים (כמו מכונות וירטואליות של Compute Engine) בתוך ה-VPC לכתובת ה-IP הפנימית של נקודת הקצה של PSC.
- אימות: שלבים לבדיקה ולווידוא שאפשר לשלוח בהצלחה בקשות הסקה מ-VPC למודל Model Garden שנפרס דרך החיבור הפרטי.
- אימות הצפנת TLS: איך משתמשים בכלים מתוך לקוח ה-VPC (למשל, מכונה וירטואלית ב-Compute Engine) כדי להתחבר באמצעות TLS לכתובת ה-IP הפנימית של נקודת הקצה של PSC.
כך תוכלו לארח מודלים מ-Model Garden שאפשר להגיע אליהם רק מתשתית הרשת הפרטית שלכם.
הדרישות
פרויקט ב-Google Cloud
הרשאות IAM
- אדמין של AI Platform (roles/ml.Admin)
- אדמין של רשת מחשוב (roles/compute.networkAdmin)
- אדמין מכונות של Compute (roles/compute.instanceAdmin)
- אדמין לענייני אבטחה ב-Compute (roles/compute.securityAdmin)
- אדמין DNS (roles/dns.admin)
- משתמש מנהרה באבטחת IAP (roles/iap.tunnelResourceAccessor)
- אדמין לניהול יומנים (roles/logging.admin)
- אדמין של Notebooks (roles/notebooks.admin)
- אדמין IAM בפרויקט (roles/resourcemanager.projectIamAdmin)
- אדמין בחשבון שירות (roles/iam.serviceAccountAdmin)
- אדמין של שימוש בשירות (roles/serviceusage.serviceUsageAdmin)
2. לפני שמתחילים
עדכון הפרויקט כדי לתמוך במדריך
במדריך הזה נעשה שימוש ב-$variables כדי לעזור בהטמעה של הגדרות gcloud ב-Cloud Shell.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
projectid=[YOUR-PROJECT-ID]
echo $projectid
הפעלת ה-API
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud services enable "compute.googleapis.com"
gcloud services enable "aiplatform.googleapis.com"
gcloud services enable "serviceusage.googleapis.com"
gcloud services enable dns.googleapis.com
3. פריסת מודל
כדי לפרוס את המודל מ-Model Garden, פועלים לפי השלבים הבאים:
במסוף Google Cloud, עוברים אל Model Garden, מחפשים את Gemma 3 ובוחרים אותו.

לוחצים על Deploy model (פריסת מודל) ובוחרים באפשרות Vertex AI.

בתחתית הקטע 'הגדרות הפריסה', לוחצים על 'עריכת ההגדרות'.

בחלונית Deploy on Vertex AI (פריסה ב-Vertex AI), מוודאים שגישת נקודת הקצה מוגדרת כ-Private Service Connect ואז בוחרים את הפרויקט.

משאירים את כל ברירות המחדל של האפשרויות האחרות, בוחרים באפשרות 'פריסה' בתחתית ובודקים את ההתראות כדי לראות את סטטוס הפריסה.

ב-Model Garden, בוחרים באזור us-central1 שבו זמינים מודל Gemma 3 ונקודת הקצה. פריסת המודל נמשכת כ-5 דקות.

תוך 30 דקות, נקודת הקצה תעבור לסטטוס 'פעיל' אחרי שהפעולה תושלם

בוחרים את נקודת הקצה ומקבלים את מזהה נקודת הקצה.

בוחרים את נקודת הקצה כדי לאחזר את מזהה נקודת הקצה ולעדכן את המשתנה. בדוגמה שמוצגת, המזהה הוא 1934769929467199488.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
endpointID=<Enter_Your_Endpoint_ID>
region=us-central1
כדי לקבל את ה-URI של קובץ מצורף עם השירות Private Service Connect, מבצעים את הפעולות הבאות. המחרוזת הזו של ה-URI משמשת את הלקוח כשהוא פורס נקודת קצה של לקוח PSC.
ב-Cloud Shell, משתמשים במשתנה Endpoint ID/Region (מזהה נקודת הקצה/אזור) ומריצים את הפקודה הבאה:
gcloud ai endpoints describe $endpointID --region=$region | grep -i serviceAttachment:
לדוגמה:
user@cloudshell:$ gcloud ai endpoints describe 1934769929467199488 --region=us-central1 | grep -i serviceAttachment:
Using endpoint [https://us-central1-aiplatform.googleapis.com/]
serviceAttachment: projects/o9457b320a852208e-tp/regions/us-central1/serviceAttachments/gkedpm-52065579567eaf39bfe24f25f7981d
מעתיקים את התוכן אחרי serviceAttachment למשתנה שנקרא Service_attachment. תצטרכו אותו בהמשך כשתיצרו את חיבור ה-PSC.
user@cloudshell:$ Service_attachment=<Enter_Your_ServiceAttachment>
4. הגדרת צרכן
יצירת רשת VPC של צרכן
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
יצירת רשת משנה של VM לצרכן
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud compute networks subnets create consumer-vm-subnet --project=$projectid --range=192.168.1.0/24 --network=consumer-vpc --region=$region --enable-private-ip-google-access
כדי ליצור את תת-הרשת של נקודת הקצה של PSC, מבצעים את הפעולות הבאות ב-Cloud Shell**:**
gcloud compute networks subnets create pscendpoint-subnet --project=$projectid --range=10.10.10.0/28 --network=consumer-vpc --region=$region
5. הפעלת רכישות מתוך האפליקציה
כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, צריך ליצור כלל חומת אש ש:
- רלוונטי לכל מכונות ה-VM שרוצים לגשת אליהן באמצעות IAP.
- מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-IP 35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP שמשמשות את IAP להעברת TCP.
ב-Cloud Shell, יוצרים את הכלל בחומת האש של IAP.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
6. יצירת מכונות וירטואליות לצרכנים
ב-Cloud Shell, יוצרים את מופע המכונה הווירטואלית של הצרכן, consumer-vm.
gcloud compute instances create consumer-vm \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--shielded-secure-boot \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=consumer-vm-subnet
7. נקודות קצה של Private Service Connect
הלקוח יוצר נקודת קצה ללקוח (כלל העברה) עם כתובת IP פנימית ב-VPC שלו. נקודת הקצה הזו של PSC מכוונת לחיבור השירות של הבעלים של השירות המנוהל. לקוחות ב-VPC של הצרכן או ברשת ההיברידית יכולים לשלוח תעבורת נתונים לכתובת ה-IP הפנימית הזו כדי להגיע לשירות של הספק.
שומרים כתובת IP לנקודת הקצה של הצרכן.
ב-Cloud Shell, יוצרים את כלל ההעברה.
gcloud compute addresses create psc-address \
--project=$projectid \
--region=$region \
--subnet=pscendpoint-subnet \
--addresses=10.10.10.6
מוודאים שכתובת ה-IP שמורה.
ב-Cloud Shell, מציגים את רשימת כתובות ה-IP השמורות.
gcloud compute addresses list
כתובת ה-IP 10.10.10.6 אמורה להיות שמורה.

יוצרים את נקודת הקצה של הצרכן על ידי ציון ה-URI של קובץ השירות המצורף, target-service-attachment, ששמרתם בשלב הקודם, בקטע 'פריסת המודל'.
ב-Cloud Shell, מתארים את קובץ הרשת המצורף.
gcloud compute forwarding-rules create psc-consumer-ep \
--network=consumer-vpc \
--address=psc-address \
--region=$region \
--target-service-attachment=$Service_attachment \
--project=$projectid
מוודאים שקובץ השירות המצורף מקבל את נקודת הקצה.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud compute forwarding-rules describe psc-consumer-ep \
--project=$projectid \
--region=$region
בתגובה, מוודאים שהסטטוס 'ACCEPTED' מופיע בשדה pscConnectionStatus.

8. הגדרה של חיבור לנקודת קצה (endpoint) של Vertex HTTPS באמצעות TLS
יוצרים אזור DNS פרטי כדי לקבל הסקת מסקנות אונליין בלי לציין כתובת IP.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
DNS_NAME_SUFFIX="prediction.p.vertexai.goog."
gcloud dns managed-zones create vertex \
--project=$projectid \
--dns-name=$DNS_NAME_SUFFIX \
--networks=consumer-vpc \
--visibility=private \
--description="A DNS zone for Vertex AI endpoints using Private Service Connect."
יוצרים רשומת A כדי למפות את הדומיין לכתובת ה-IP של ה-PSC.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud dns record-sets create "*.prediction.p.vertexai.goog." \
--zone=vertex \
--type=A \
--ttl=300 \
--rrdatas="10.10.10.6"
יוצרים מכונה של Cloud Router כתנאי מוקדם למכונת NAT.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud compute routers create consumer-cr \
--region=$region --network=consumer-vpc \
--asn=65001
יצירת מכונת Cloud NAT שמשמשת להורדה של חבילות openssl ו-dnsutils.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud compute routers nats create consumer-nat-gw \
--router=consumer-cr \
--region=$region \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
מתחברים באמצעות SSH (מסוף) למכונה הווירטואלית של הצרכן. ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud compute ssh --zone "us-central1-a" "consumer-vm" --tunnel-through-iap --project "$projectid"
צריך לעדכן את החבילות שלמטה, להתקין open-ssl ולהתקין כלי DNS
ב-Cloud Shell, מבצעים את הפעולות הבאות:
sudo apt update
sudo apt install openssl
sudo apt-get install -y dnsutils
תצטרכו את מספר הפרויקט בשלב הבא. כדי לקבל את מספר הפרויקט, מריצים את הפקודה הבאה מ-Cloud Shell ומציבים אותה במשתנה:
ב-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud projects describe $projectid --format="value(projectNumber)"
Example Output: 549538389202
projectNumber=549538389202
בשלבים הבאים תצטרכו להגדיר עוד כמה משתנים. כדי להגדיר את המשתנים האלה(ENDPOINT_ID, REGION, VERTEX_AI_PROJECT_ID), קודם צריך לתעד אותם מ-Cloud Shell ואז ליצור את אותם משתנים במכונה הווירטואלית.
ב-Cloud Shell, מבצעים את הפעולות הבאות:
echo $projectNumber
echo $projectid
echo $region
echo $endpointID
פלט לדוגמה:
549538389202
test4-473419
Us-central1
1934769929467199s
במכונה הווירטואלית של הצרכן, מוסיפים את המשתנים הבאים – דוגמה בהמשך:
projectNumber=1934769929467199488
projectid=test4-473419
region=us-central1
endpointID=1934769929467199488
מורידים את האישור של Vertex AI על ידי הפעלת הפקודה הבאה מהספרייה הראשית במכונה הווירטואלית. הפקודה הזו יוצרת קובץ בשם vertex_certificate.crt.
sudo openssl s_client -showcerts -connect $endpointID-$region-$projectNumber.prediction.p.vertexai.goog:443 </dev/null | openssl x509 -outform pem -out vertex_certificate.crt
Output should look like below, error is expected.

מעבירים את האישור למאגר האישורים המהימנים של המערכת.
sudo mv vertex_certificate.crt /usr/local/share/ca-certificates
מעדכנים את מנהל האישורים.
sudo update-ca-certificates
אחרי העדכון, היא אמורה להיראות כך.
user@linux-vm:~$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
Done.
9. בדיקה סופית מ-VM של צרכן
במכונה הווירטואלית של הצרכן, מבצעים אימות מחדש באמצעות Application Default Credentials ומציינים את היקפי ההרשאות של Vertex AI:
gcloud auth application-default login
--scopes=https://www.googleapis.com/auth/cloud-platform
ב-VM לצרכנים, מריצים את פקודת ה-curl הבאה כדי לבדוק את התחזית של מודל Gemini עם ההנחיה 'מה שוקל יותר, קילו נוצות או קילו אבנים?':
curl -v -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" -H "Content-Type: application/json" https://$endpointID-$region-$projectNumber.prediction.p.vertexai.goog/v1/projects/$projectid/locations/$region/endpoints/$endpointID/chat/completions -d '{"model": "google/gemma-3-12b-it", "messages": [{"role": "user","content": "What weighs more 1 pound of feathers or rocks?"}] }'
התוצאה הסופית – הצלחה!!!
בסוף הפלט אמורה להופיע התחזית של Gemma 3. זה אומר שהצלחתם לגשת לנקודת קצה ל-API באופן פרטי דרך נקודת הקצה של PSC.
Connection #0 to host 10.10.10.6 left intact
{"id":"chatcmpl-9e941821-65b3-44e4-876c-37d81baf62e0","object":"chat.completion","created":1759009221,"model":"google/gemma-3-12b-it","choices":[{"index":0,"message":{"role":"assistant","reasoning_content":null,"content":"This is a classic trick question! They weigh the same. One pound is one pound, regardless of the material. 😊\n\n\n\n","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":106}],"usage":{"prompt_tokens":20,"total_tokens":46,"completion_tokens":26,"prompt_tokens_details":null},"prompt_logprobs":null
10. הסרת המשאבים
ב-Cloud Shell, מוחקים את רכיבי ההדרכה.
Get Deployed Model ID first with this command, you will need it to delete the Endpoint ID:
gcloud ai endpoints describe $endpointID \
--region=$region \
--project=$projectid \
--format="table[no-heading](deployedModels.id)"
Example Output: 7389140900875599872
Put it in a Variable:
deployedModelID=7389140900875599872
Run following Commands:
gcloud ai endpoints undeploy-model $endpointID --deployed-model-id=$deployedModelID --region=$region --quiet
gcloud ai endpoints delete $endpointID --project=$projectid --region=$region --quiet
Run Following command to get $MODEL_ID to delete Model:
gcloud ai models list --project=$projectid --region=$region
Example Output:
Using endpoint [https://us-central1-aiplatform.googleapis.com/]
MODEL_ID: gemma-3-12b-it-1768409471942
DISPLAY_NAME: gemma-3-12b-it-1768409471942
Put MODEL_ID value in a variable:
MODEL_ID=gemma-3-12b-it-1768409471942
Run the follow command to delete Model:
gcloud ai models delete $MODEL_ID --project=$projectid --region=$region --quiet
Clean up rest of the lab:
gcloud compute instances delete consumer-vm --zone=us-central1-a --quiet
gcloud compute forwarding-rules delete psc-consumer-ep --region=$region --project=$projectid --quiet
gcloud compute addresses delete psc-address --region=$region --project=$projectid --quiet
gcloud compute networks subnets delete pscendpoint-subnet consumer-vm-subnet --region=$region --quiet
gcloud compute firewall-rules delete ssh-iap-consumer --project=$projectid
gcloud compute routers delete consumer-cr --region=$region
gcloud compute networks delete consumer-vpc --project=$projectid --quiet
11. מזל טוב
הגדרתם ואימתתם בהצלחה גישה פרטית ל-Gemma 3 API שמתארח ב-Vertex AI Prediction באמצעות נקודת קצה של Private Service Connect, באמצעות אישור בחתימה עצמית שהתקבל מ-Vertex AI ונפרס במאגר האישורים של מכונות וירטואליות.
יצרתם את התשתית של הצרכן, כולל שמירת כתובת IP פנימית, הגדרת נקודת קצה של Private Service Connect (כלל העברה) ב-VPC ושרת DNS פרטי כדי להתאים לאישור בחתימה עצמית *prediction.p.vertexai.goog. נקודת הקצה הזו מתחברת בצורה מאובטחת לשירות Vertex AI על ידי טירגוט של קובץ השירות שמשויך למודל Gemma 3 שפרסתם.
ההגדרה הזו מבטיחה שהאפליקציות שלכם ב-VPC או ברשתות המחוברות יוכלו לקיים אינטראקציה עם Gemma 3 API באופן פרטי באמצעות כתובת IP פנימית באמצעות אישורים. כל תעבורת הנתונים נשארת בתוך הרשת של Google, ולא עוברת דרך האינטרנט הציבורי.