1. סקירה כללית
בשיעור ה-Lab הזה תפרסו את פורטל העובדים שמאפשר לעובדים לראות, לעדכן ולמחוק הזמנות מאפליקציית Cymbal Eats. צריך להשתמש בשרת proxy לאימות זהויות (IAP) כדי לאבטח גישה לפורטל בלי להשתמש ברשת וירטואלית פרטית (VPN). שימוש ב-IAP מפשט את ההטמעה של מודל גישה במודל אבטחה של אפס אמון, דורש פחות זמן מאשר שימוש ב-VPN לעובדים מרוחקים, גם בארגון וגם בסביבות ענן, עם נקודת בקרה אחת לניהול הגישה לאפליקציות שלכם.
מהו שרת proxy לאימות זהויות (IAP)?
שרת proxy לאימות זהויות (IAP) הוא שירות של Google Cloud שמיירט בקשות שנשלחות לאפליקציה שלכם, מאמת את המשתמש ששולח את הבקשה באמצעות שירות הזהויות של Google, ורק אם הן מגיעות ממשתמש שיש לו הרשאה לגשת לאפליקציה, הוא מאפשר לשלוח אותן. בנוסף, הוא יכול לשנות את כותרות הבקשה כך שיכללו מידע על המשתמש המאומת.
מה תלמדו
- איך להגדיר קבוצה של נקודות קצה (endpoint) של רשת ללא שרת (NEG)
- איך להגדיר מאזן עומסים
- איך להפעיל את האפליקציה IAP כדי להגביל את הגישה
- איך להגביל את הגישה באמצעות IAP
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט. - לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הגדרת סביבה
- יצירת משתני סביבה שקשורים לפרויקט ולמשאבים
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- הפעלת ממשקי ה-API של השירותים IAP ו-Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- משכפלים את מאגר האפליקציות לדוגמה ועוברים אל הספרייה
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- פורסים את פורטל העובדים באמצעות סקריפט ההגדרה. צריך להמתין להשלמת הסקריפט לפני שעוברים לשלב הבא
./setup.sh
פלט לדוגמה
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- לוחצים על הקישור 'כתובת ה-URL של השירות'.
3. הגדרת קבוצת נקודות קצה של רשת ללא שרת (NEG)
יוצרים קבוצה של נקודות קצה (endpoint) של רשת ללא שרת (serverless), Serverless NEG) לשירות Cloud Run בממשק המשתמש של העובדים. מפתחות NEG ללא שרת (serverless) מאפשרים להשתמש באפליקציות ב-Google Cloud ללא שרת (serverless) עם איזון עומסים חיצוני של HTTP(S).
- יוצרים קבוצה של נקודות קצה ברשת לשירות ממשק המשתמש של העובדים.
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
פלט לדוגמה
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
יצירת שירות לקצה העורפי והוספת ה-NEG ללא שרת (serverless)
שירות לקצה העורפי מגדיר את האופן שבו Cloud Load Balancing מפיץ את תעבורת הנתונים. הגדרת השירות לקצה העורפי מכילה קבוצת ערכים, כמו הפרוטוקול שמשמש לחיבור לקצה העורפי, הגדרות שונות של הפצה וסשן, בדיקות תקינות וחסימה זמנית. ההגדרות האלה מספקות שליטה פרטנית על אופן הפעולה של מאזן העומסים.
- יצירת שירות לקצה העורפי
gcloud compute backend-services create employee-ui-iap-backend \
--global
פלט לדוגמה
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- הוספת ה-NEG ללא שרת (serverless) כקצה עורפי לשירות לקצה העורפי
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
פלט לדוגמה
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- אפשר ליצור מפה של כתובות URL כדי לנתב בקשות נכנסות לשירות לקצה העורפי
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
4. הגדרת רכיבי מאזן העומסים
בתרשים הבא אפשר לראות שמאזן העומסים משתמש בקצה עורפי NEG ללא שרת (serverless) כדי להפנות בקשות לשירות Cloud Run ללא שרת.
שמירת כתובת IP סטטית
- שמירה של כתובת IPv4 סטטית ואחסון הדומיין
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
פלט לדוגמה
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- אחסון הדומיין nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
יצירת משאב של אישור SSL בניהול Google
- יצירת משאב של אישור SSL בניהול Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
פלט לדוגמה
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
יצירת שרת proxy המשמש כיעד ל-HTTPS
- צריך ליצור את שרת ה-proxy המיועד ל-HTTPS כדי לנתב בקשות למפת כתובות ה-URL שלך
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
פלט לדוגמה
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
הגדרת כללי העברה
- אפשר ליצור כלל העברה כדי לנתב בקשות נכנסות לשרת ה-proxy
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
פלט לדוגמה
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
הגבלת תעבורת נתונים נכנסת (ingress) לשירות Cloud Run
הגבלה של תעבורת הנתונים הנכנסת (ingress) כך שהיא תקבל רק בקשות פנימיות ובקשות שנשלחות דרך איזון עומסים מסוג HTTP(S).
- עדכון השירות כך שיאפשר תעבורת נתונים נכנסת (ingress) רק מבקשות פנימיות ובקשות דרך מאזן עומסים של HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
פלט לדוגמה
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- לוחצים על הקישור 'כתובת ה-URL של השירות'.
מעכשיו, הגישה לכתובת ה-URL של שירות Cloud Run מוצגת כאסורה.
5. הפעלת שרת proxy לאימות זהויות (IAP) ב-Cloud Identity במאזן העומסים
בעזרת IAP אפשר ליצור שכבת הרשאה מרכזית לאפליקציות שהגישה אליהן מתבצעת דרך HTTPS. ניתן להשתמש במודל בקרת גישה ברמת האפליקציה במקום בחומות אש ברמת הרשת.
הגדרה של מסך ההסכמה ב-OAuth
מותג הוא מסך ההסכמה ל-OAuth שכולל פרטי מיתוג של המשתמשים. מותגים עשויים להיות מוגבלים למשתמשים פנימיים או ציבוריים. מותג פנימי מאפשר לחבר באותו ארגון ב-Google Workspace שבו נמצא הפרויקט, לגשת לתהליך OAuth. תהליך OAuth שגלוי לכולם הופך את תהליך ה-OAuth לכל מי שיש לו גישה לאינטרנט.
- יצירת מותג
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
פלט לדוגמה
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
יצירת לקוח OAuth ל-IAP
- יצירת לקוח באמצעות שם המותג מהשלב הקודם
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
פלט לדוגמה
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- אחסון השם, המזהה והסוד של הלקוח
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- במסוף Cloud, בוחרים את הפרויקט מהתפריט הנפתח של בחירת הפרויקט.
- עוברים אל מסך ההסכמה של OAuth במסוף Cloud.
- לוחצים על 'יצרן חיצוני' בקטע 'סוג משתמש'
- בחירה באפשרות 'בדיקה' בתור סטטוס הפרסום
- לוחצים על 'אישור'.
6. הגבלת הגישה באמצעות IAP
יש להגביל את הגישה לשירות לקצה העורפי באמצעות IAP ולאחר מכן לוודא שלא ניתן לגשת לאפליקציה.
- הפעלת IAP בשירות לקצה העורפי
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
אימות ההגדרה של IAP
- יש לוודא שאישור ה-SSL פעיל
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- אחזור כתובת ה-URL של השירות
echo https://$DOMAIN
פלט לדוגמה
https://34.102.234.98.nip.io
- לוחצים על כתובת ה-URL של השירות כדי לפתוח את פורטל העובדים.
- מתחברים באמצעות פרטי הכניסה לשיעור ה-Lab.
- סגירת הדפדפן
הענקת גישה למשתמש לפורטל העובדים
- הוספת קישור מדיניות IAM לתפקיד של
'roles/iap.httpsResourceAccessor'
עבור המשתמש שנוצר בשלב הקודם
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
פלט לדוגמה
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
בדיקת הגישה לשירות
אישור שהגישה לפורטל העובדים ניתנה
- אחזור כתובת ה-URL של השירות
echo https://$DOMAIN
פלט לדוגמה
https://34.102.234.98.nip.io
- לוחצים על כתובת ה-URL של השירות כדי לפתוח את פורטל העובדים.
עכשיו אמורה להיות לך גישה לפורטל העובדים.
(אופציונלי) פורסים את כל יחסי התלות, פריסת המיקרו-שירותים האלו עשויה להימשך כ-20 דקות.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. מעולה!
כל הכבוד, סיימת את ה-Codelab!
השלב הבא:
בקישורים הבאים תוכלו למצוא עוד מעבדי קוד Labs של Cymbal Eats:
- הפעלת Cloud Workflows באמצעות Eventarc
- הפעלת עיבוד אירועים מ-Cloud Storage
- התחברות ל-Cloud SQL פרטי מ-Cloud Run
- התחברות למסדי נתונים מנוהלים מ-Cloud Run
- הפעלת משימות של Cloud Run באמצעות Cloud Scheduler
- פריסה מאובטחת ב-Cloud Run
- אבטחת תעבורת נתונים נכנסת (ingress) ב-Cloud Run
- התחברות מ-GKE Autopilot אל אפליקציה פרטית מסוג AlloyDB
הסרת המשאבים
כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שנעשה בהם שימוש במדריך הזה, צריך למחוק את הפרויקט שמכיל את המשאבים או לשמור את הפרויקט ולמחוק את המשאבים הספציפיים.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.