1. סקירה כללית
בשיעור ה-Lab הזה נראה איך להגביל את הגישה לשירות Cloud Run ולאפשר רק בקשות מכוח עבודה שפועל במקום או ב-VPC של הפרויקט. יש שתי שכבות של בקרת גישה שבהן אפשר להשתמש: הגדרות של תעבורת נכנסת ומדיניות של ניהול זהויות והרשאות גישה (IAM).

הגדרות של תעבורת נתונים נכנסת (ingress)
הגדרות הכניסה מאפשרות לסנן בקשות על סמך מקור הרשת שלהן (פנימי או חיצוני). כברירת מחדל, כל הבקשות מורשות לעבור, כולל בקשות מהאינטרנט הציבורי.
מדיניות IAM
כללי המדיניות ב-IAM מאפשרים לסנן בקשות על סמך הזהות של השולח, והם משמשים בדרך כלל לאימות בקשות משירות לשירות.
בשיעור ה-Lab הזה תלמדו איך ומתי להשתמש בהגדרות של Ingress.
מארחים מקומיים מתחברים דרך ה-VPC
בשיעור ה-Lab הזה נדמה עומס עבודה מקומי. כדי לחבר מארח מקומי ל-Cloud Run, צריך להגדיר גישה פרטית ל-Google למארחים מקומיים. התהליך כולל הגדרה של שער Cloud VPN ברשת ה-VPC, כמו שמוצג בהמשך.

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

למכונה הווירטואלית של Compute Engine שתשמש כשרת מעבר יש את אותו מקור רשת כמו ל-Cloud VPN Gateway, ולכן אפשר להשתמש בה כדי לדמות שליחת בקשות מעומס עבודה מקומי.
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מזוהה כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. כדי להשבית את המשאבים ולא לחייב אתכם אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את כל הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
הגדרת הסביבה
- מגדירים משתנה סביבה למזהה הפרויקט כדי להשתמש בו בפקודות מאוחרות יותר:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
- מפעילים את ממשקי ה-API שנדרשים כדי לבצע את ה-Lab הזה.
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
compute.googleapis.com \
artifactregistry.googleapis.com
- משכפלים את מאגר האפליקציה לדוגמה ועוברים לספרייה
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
- הגדרת אזור ותחום ברירת מחדל ל-Compute Engine ול-Cloud Run
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}
3. פריסת השירות
קודם פורסים את השירות ומשאירים אותו נגיש לכולם. אחרי שתאמתו שאפשר לשלוח בקשות מהדפדפן, ננעל את השירות ונאפשר רק בקשות ממקורות ברשת הפנימית.
כשמריצים את הפקודה הבאה, פועלים לפי ההוראות האלה:
- מיקום קוד המקור (...): מוודאים שאתם בספרייה partner-registration-service ומקישים על Enter כדי לאשר את ברירת המחדל
- שם השירות (partner-registration-service): לוחצים על Enter כדי לאשר את ברירת המחדל
- האם לאפשר הפעלות לא מאומתות של [partner-registration-service] (y/N)? Y
gcloud run deploy
בסיום הפקודה, כתובת ה-URL של שירות Cloud Run מופיעה. הפלט ייראה בערך כך:
Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic. Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app
פותחים את כתובת ה-URL של השירות בדפדפן. הפלט שיוצג יהיה:
Partner registration service: RUNNING
הגדרת השירות כך שיאפשר רק בקשות פנימיות
עכשיו משתמשים בהגדרות של תעבורת נתונים נכנסת (ingress) בשירות Cloud Run כדי לאפשר רק בקשות ממקורות פנימיים. מקורות פנימיים כוללים משאבים ברשתות VPC שנמצאים באותו פרויקט (או באותו מתחם היקפי של VPC Service Controls) כמו שירות Cloud Run – מה שהופך אותו למושלם לתרחיש השימוש שלנו.
בנוסף, בקשות ממוצרים אחרים של Google Cloud נחשבות פנימיות, גם אם הן לא חלק מה-VPC. דוגמאות למוצרים כאלה: Pub/Sub ו-Workflows.
בקשות מהמקורות האלה נשארות ברשת של Google, גם אם הן ניגשות לשירות שלכם בכתובת ה-URL run.app, והגישה הציבורית אסורה.
מעדכנים את השירות כך שיאפשר רק בקשות פנימיות:
gcloud run services update partner-registration-service --ingress=internal
אם פותחים שוב את כתובת ה-URL של השירות, מופיעה ההודעה Error: Forbidden - Access is forbidden (שגיאה: אסור – הגישה אסורה).
הדפדפן שולח את הבקשה ממקור חיצוני ברשת, ולא ממקור פנימי לפרויקט בענן ב-Google Cloud, ולכן זה בדיוק מה שצריך לקרות. השירות שלכם מאובטח יותר עכשיו.
4. יצירת מכונה וירטואלית ב-Compute Engine כשרת מעבר
השלב הבא הוא לדמות בקשות משרת מקומי דרך שער Cloud VPN, על ידי יצירת מופע Compute Engine ב-VPC לשימוש כשרת מעבר:
gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform
הפלט של הפקודה הזו אמור להיראות כך:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS jump-server us-central1-a n1-standard-1 10.128.0.10 34.170.108.8 RUNNING
שליחת בקשה ממכונת Compute Engine לשירות
עכשיו פותחים טרמינל במכונה הווירטואלית ושולחים בקשה ישירות מהמכונה ברשת ה-VPC.
אם הפקודה הבאה מבקשת להגדיר SSH ב-Cloud Shell, פועלים לפי ההוראות:
gcloud compute ssh jump-server
מריצים את הפקודה הבאה כדי לקבל את כתובת ה-URL של שירות Cloud Run:
gcloud run services describe partner-registration-service --region us-central1
השורות הראשונות של הפלט אמורות להיראות כך:
✔ Service partner-registration-service in region us-central1 URL: https://partner-registration-service-ssssssssss-uc.a.run.app Ingress: internal
עכשיו מעתיקים את כתובת ה-URL ושולחים בקשה מהמכונה של Compute Engine באמצעות curl. הבקשה הזו אמורה להצליח, כי המכונה הווירטואלית פועלת ברשת ה-VPC של הפרויקט – זהו מקור פנימי.
export SERVICE_URL=https://
curl ${SERVICE_URL}
הפלט אמור להיות:
Partner registration service: RUNNING
5. מה לגבי בקרת גישה שמבוססת על IAM?
בשיעור ה-Lab הזה למדתם איך ומתי להשתמש בהגדרות של תעבורת נכנסת. הגדרות Ingress הן התחלה מצוינת אם אתם מחברים עומס עבודה מקומי ל-Cloud Run.
בקרת גישה שמבוססת על IAM דורשת יותר מאמץ להטמעה, במיוחד אם אתם מתקשרים ממארח מקומי:
- ב-IAM נדרש לנהל פרטי כניסה של חשבון שירות לטווח ארוך במארח
- ב-IAM נדרשים שינויים בקוד כדי לחתום על בקשות באמצעות פרטי הכניסה של חשבון השירות.
Google ממליצה על גישה רב-שכבתית לבקרת גישה. שימוש בהגדרות של תעבורת נכנסת כדי להגביל את הגישה רק למארחים פנימיים הוא התחלה מצוינת, אבל אל תעצרו שם!
6. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
השלב הבא:
כדאי לעיין במדריכי Codelab נוספים של Cymbal Eats:
- הפעלת Cloud Workflows באמצעות Eventarc
- הפעלת עיבוד אירועים מ-Cloud Storage
- התחברות ל-CloudSQL פרטי מ-Cloud Run
- התחברות למסדי נתונים מנוהלים מ-Cloud Run
- אבטחת אפליקציה בלי שרת (serverless) באמצעות שרת proxy לאימות זהויות (IAP)
- הפעלת משימות של Cloud Run באמצעות Cloud Scheduler
- פריסה מאובטחת ב-Cloud Run
- התחברות ל-AlloyDB פרטי מ-GKE Autopilot
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
מקורות מידע שימושיים
ריכזנו כאן מקורות מידע נוספים שיעזרו לכם להבין טוב יותר את שתי שכבות בקרת הגישה ב-Cloud Run.