1. סקירה כללית
במעבדה הזו תפרסו את פורטל העובדים שמאפשר לעובדים להציג, לעדכן ולמחוק הזמנות מאפליקציית Cymbal Eats. תשתמשו ב-Identity Aware Proxy (IAP) כדי לאבטח את הגישה לפורטל בלי להשתמש ברשת וירטואלית פרטית (VPN). IAP מפשט את ההטמעה של מודל גישה מבוסס אפס אמון, ומאפשר לעובדים מרחוק לעבוד בסביבות מקומיות ובענן בזמן קצר יותר מאשר VPN, עם נקודת בקרה אחת לניהול הגישה לאפליקציות.
מהו שרת proxy לאימות זהויות (IAP)?
שרת proxy לאימות זהויות (IAP) הוא שירות של Google Cloud שמנתב בקשות שנשלחות לאפליקציה, מאמת את המשתמש ששולח את הבקשה באמצעות Google Identity Service ומאפשר את שליחת הבקשות רק אם הן מגיעות ממשתמש שהוסמך לגשת לאפליקציה. בנוסף, הוא יכול לשנות את הכותרות של הבקשה כך שיכללו מידע על המשתמש המאומת.
מה תלמדו
- איך מגדירים קבוצת נקודות קצה ברשת ללא שרת (NEG)
- איך מגדירים מאזן עומסים
- איך מפעילים את IAP כדי להגביל את הגישה
- איך להגביל את הגישה באמצעות IAP
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט. זוהי מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שמגדירים אותו. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא משנה מה המחרוזת הזו. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מזוהה בתור
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלכם ולבדוק אם הוא זמין. לא ניתן לשנות את השם אחרי השלב הזה, והוא יישאר למשך כל תקופת הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שמשתמשים בו בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי העזרה.
- בשלב הבא, כדי להשתמש במשאבים או ב-API של Cloud, תצטרכו להפעיל את החיוב במסוף Cloud. השלמת הקודלאב הזה לא אמורה לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים אחרי סיום המדריך, אפשר למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
הגדרת הסביבה
- יצירת משתני סביבה שקשורים לפרויקטים ולמשאבים
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)
תיצורו קבוצה של נקודות קצה ברשת ללא שרת( Serverless NEG) לשירות Cloud Run של ממשק המשתמש של העובדים. באמצעות NEG ללא שרת אפשר להשתמש באפליקציות ללא שרת ב-Google Cloud עם איזון עומסים חיצוני מסוג 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 ללא שרת
שירות לקצה העורפי מגדיר את האופן שבו 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 ללא שרת כקצה עורפי לשירות הקצה העורפי
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 ללא שרת כדי להפנות בקשות לשירות ללא שרת ב-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].
הגבלת תעבורת הנתונים הנכנסת לשירות Cloud Run
הגבלת תעבורת הנתונים הנכנסת כך שתקבל רק בקשות פנימיות ובקשות שמגיעות דרך איזון עומסי HTTP(S).
- מעדכנים את השירות כך שיאפשר תעבורת נתונים נכנסת רק מבקשות פנימיות ומבקשות דרך מאזן עומסים מסוג 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. הפעלת Cloud Identity-Aware Proxy (IAP) במאזן העומסים
באמצעות IAP אפשר ליצור שכבת הרשאה מרכזית לאפליקציות שניתן לגשת אליהן באמצעות HTTPS. אפשר להשתמש במודל של בקרת גישה ברמת האפליקציה במקום בחומות אש ברמת הרשת.
הגדרת מסך ההסכמה של OAuth
מותג הוא מסך ההסכמה של OAuth שמכיל מידע על המותג למשתמשים. יכול להיות שהמותגים מוגבלים למשתמשים פנימיים או ציבוריים. מותג פנימי מאפשר למשתמש שנמצא באותו ארגון ב-Google Workspace כמו הפרויקט לגשת לתהליך ה-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 של השירות כדי לפתוח את פורטל העובדים.
- מתחברים באמצעות פרטי הכניסה של המעבדה.
- סוגרים את הדפדפן.
הענקת גישה של משתמשים לפורטל העובדים
- מוסיפים קישור של מדיניות 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 נוספים של Cymbal Eats:
- הפעלת תהליכי עבודה ב-Cloud באמצעות Eventarc
- הפעלת עיבוד אירועים מ-Cloud Storage
- התחברות ל-CloudSQL פרטי מ-Cloud Run
- חיבור למסדי נתונים מנוהלים מ-Cloud Run
- הפעלת משימות של Cloud Run באמצעות Cloud Scheduler
- פריסה מאובטחת ב-Cloud Run
- אבטחת תעבורת הנתונים הנכנסת (ingress) ב-Cloud Run
- התחברות ל-AlloyDB פרטי מ-GKE Autopilot
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים הנפרדים.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.