אבטחת תעבורת נתונים נכנסת (ingress) של Cloud Run

1. סקירה כללית

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

5aed47d10595c878.png

הגדרות של תעבורת נתונים נכנסת (ingress)

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

המדיניות ב-IAM

כללי מדיניות IAM מאפשרים לסנן בקשות על סמך זהות השולח, ומשמשים בדרך כלל לאימות בקשות שירות.

בשיעור ה-Lab הזה תלמדו איך ומתי להשתמש בהגדרות של תעבורת נתונים נכנסת (ingress).

מארחים מקומיים מתחברים באמצעות ה-VPC

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

31611f6a2f12fd0c.png

הדמיה של עומס עבודה בארגון באמצעות שרת דילוג ב-VPC

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

aebf22740c7a84f0.png

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

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הגדרת סביבה

  1. מגדירים משתנה סביבה למזהה הפרויקט לשימוש בפקודות מאוחרות יותר:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. הפעלת ממשקי ה-API הנדרשים להפעלת שיעור ה-Lab הזה.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. משכפלים את מאגר האפליקציות לדוגמה ועוברים אל הספרייה
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. הגדרת האזור והתחום (zone) שמוגדרים כברירת מחדל ב-Compute Engine וב-Cloud Run
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. פריסת השירות

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

כאשר מריצים את הפקודה הבאה, מבצעים את ההוראות הבאות:

  • המיקום של קוד המקור (...): יש לוודא שהספרייה שלך נמצאת בספריית שירותי הרישום של השותף ולהקיש על Enter כדי לאשר את ברירת המחדל
  • שם השירות (שירות רישום-שותף): יש להקיש על Enter כדי לאשר את ברירת המחדל
  • לאפשר הפעלות לא מאומתות ל-[partner-enroll-service] (y/N)? כן
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!

השלב הבא:

בקישורים הבאים תוכלו למצוא עוד מעבדי קוד Labs של Cymbal Eats:

הסרת המשאבים

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

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.

הפניות שימושיות

לפניכם משאבים נוספים שיעזרו לכם לקבל מידע נוסף על שתי השכבות של בקרת הגישה ב-Cloud Run.