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

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

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

המכונה הווירטואלית של Compute Engine שתשמש כשרת מעבר היא מאותו מקור ברשת כמו שער Cloud VPN, ולכן אפשר להשתמש בה כדי לדמות שליחת בקשות מעומס עבודה מקומי.
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 של השירות, מופיעה ההודעה שגיאה: אסור – הגישה אסורה
הדפדפן שולח את הבקשה ממקור חיצוני ברשת, ולא ממקור פנימי לפרויקט בענן ב-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). הגדרות של Ingress הן התחלה מצוינת אם אתם מחברים עומס עבודה מקומי ל-Cloud Run.
בקרת גישה שמבוססת על IAM דורשת יותר מאמץ להטמעה, במיוחד אם אתם מתקשרים ממארח מקומי:
- ב-IAM נדרש לנהל פרטי כניסה של חשבון שירות לטווח ארוך במארח
- כדי לחתום על בקשות באמצעות פרטי הכניסה של חשבון השירות, צריך לבצע שינויים בקוד ב-IAM.
Google ממליצה על גישה רב-שכבתית לבקרת גישה. שימוש בהגדרות של תעבורת נתונים נכנסת (ingress) כדי להגביל את הגישה רק למארחים פנימיים הוא התחלה מצוינת, אבל אל תעצרו שם!
6. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
השלב הבא:
כדאי לעיין במדריכי Codelab נוספים של Cymbal Eats:
- הפעלת Cloud Workflows באמצעות Eventarc
- הפעלת עיבוד אירועים מ-Cloud Storage
- התחברות ל-Cloud SQL פרטי מ-Cloud Run
- חיבור למסדי נתונים מנוהלים באופן מלא מ-Cloud Run
- אבטחת אפליקציה ללא שרת באמצעות שרת proxy לאימות זהויות (IAP)
- הפעלת משימות של Cloud Run באמצעות Cloud Scheduler
- פריסה מאובטחת ב-Cloud Run
- התחברות ל-AlloyDB פרטי מ-GKE Autopilot
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
מקורות מידע שימושיים
ריכזנו כאן מקורות מידע נוספים שיעזרו לכם להבין טוב יותר את שתי שכבות בקרת הגישה ב-Cloud Run.