במדריך הזה נסביר איך ליצור שירות הצבעה שמורכב מהרכיבים הבאים:
לקוח מבוסס-דפדפן שמבצע את הפעולות הבאות:
- משתמש ב-Identity Platform כדי לאחזר טוקן של מזהה.
- המשתמשים יכולים להצביע לחיית הבית האהובה עליהם.
- מוסיף את הטוקן של המזהה לבקשה לשרת Cloud Run שמעבד את ההצבעה.
שרת Cloud Run שמבצע את הפעולות הבאות:
- בודק שהמשתמש ביצע אימות כמו שצריך על ידי מתן טוקן של מזהה תקין.
- מעבד את ההצבעה של משתמש הקצה.
- באמצעות פרטי הכניסה שלו, הוא שולח את ההצבעה ל-Cloud SQL לאחסון.
מסד נתונים של PostgreSQL שבו נשמרות ההצבעות.
כדי לפשט את המדריך, השתמשנו ב-Google בתור ספק. כדי לקבל את טוקן המזהה, המשתמשים צריכים לבצע אימות באמצעות חשבון המשתמש שלהם. עם זאת, אתם יכולים להשתמש בספקים או בשיטות אימות אחרות כדי להכניס משתמשים.
המונח חשבון משתמש במאמר הזה מתייחס לחשבון Google או לחשבון משתמש שמנוהל על ידי ספק הזהויות שלכם ומאוחד עם איחוד שירותי אימות הזהות של כוח עבודה.
אתם משתמשים בפרטי הכניסה של חשבון המשתמש שלכם כדי להיכנס לכלי.
השירות הזה ממזער את סיכוני האבטחה באמצעות Secret Manager, כדי להגן על נתונים רגישים שמשמשים להתחברות למכונה של Cloud SQL. בנוסף, הוא משתמש בזהות שירות עם הרשאות מינימליות כדי לאבטח את הגישה למסד הנתונים.
מטרות
כתיבה, פיתוח ופריסה של שירות ב-Cloud Run שמראה איך:
משתמשים ב-Identity Platform כדי לאמת משתמש קצה ב-backend של שירות Cloud Run.
יצירת זהות עם הרשאות מינימליות לשירות כדי לתת גישה מינימלית למשאבי Google Cloud .
משתמשים ב-Secret Manager כדי לטפל בנתונים רגישים כשמחברים את שירות Cloud Run למסד נתונים של PostgreSQL.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
מפעילים את ממשקי ה-API של Cloud Run, Secret Manager, Cloud SQL, Artifact Registry ו-Cloud Build, אם הם עדיין לא מופעלים.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, בקשו מהאדמין לתת לכם את התפקידים הבאים ב-IAM ברמת הפרויקט:
- אדמין של מאגר Artifact Registry (
roles/artifactregistry.repoAdmin) - עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Cloud Run (
roles/run.admin) - Cloud SQL Admin (
roles/cloudsql.admin) - יצירת חשבונות שירות (
roles/iam.serviceAccountCreator) - אדמין ב-Identity Platform (
roles/identityplatform.admin) - עריכת הגדרות OAuth (
roles/oauthconfig.editor) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - אדמין ב-Secret Manager (
roles/secretmanager.admin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) - אדמין באחסון (
roles/storage.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הגדרת ברירות המחדל של ה-CLI של gcloud
כדי להגדיר את Google Cloud CLI עם ברירות מחדל לשירות Cloud Run:
מגדירים את פרויקט ברירת המחדל:
gcloud config set project PROJECT_ID
מחליפים את PROJECT_ID בשם הפרויקט שיצרתם בשביל המדריך הזה.
מגדירים את Google Cloud CLI לאזור שבחרתם:
gcloud config set run/region REGION
מחליפים את REGION באזור הנתמך של Cloud Run לבחירתכם.
מיקומים של Cloud Run
Cloud Run הוא שירות אזורי, כלומר התשתית שמפעילה את שירותי Cloud Run נמצאת באזור ספציפי ומנוהלת על ידי Google, כך שהיא זמינה באופן יתיר בכל האזורים באותו אזור.
הגורמים העיקריים לבחירת האזור שבו יפעלו שירותי Cloud Run הם עמידה בדרישות של זמן אחזור, זמינות או עמידות.
בדרך כלל אפשר לבחור את האזור הכי קרוב למשתמשים, אבל כדאי להביא בחשבון את המיקום של המוצרים Google Cloudהאחרים שמשמשים את שירות Cloud Run.
שימוש במוצרי Google Cloud בכמה מיקומים יכול להשפיע על זמן האחזור של השירות וגם על העלות.
אפשר להשתמש ב-Cloud Run באזורים הבאים:
בכפוף לתמחור ברמה 1
asia-east1(טייוואן)asia-northeast1(טוקיו)asia-northeast2(אוסקה)-
asia-south1(מומבאי, הודו) asia-southeast3(בנגקוק)-
europe-north1(פינלנד)רמה נמוכה של CO2
europe-north2(שטוקהולם)רמה נמוכה של CO2
-
europe-southwest1(מדריד)רמה נמוכה של CO2
-
europe-west1(בלגיה)רמה נמוכה של CO2
-
europe-west4(הולנד)רמה נמוכה של CO2
-
europe-west8(מילאנו)רמה נמוכה של CO2
-
europe-west9(פריז)רמה נמוכה של CO2
me-west1(תל אביב)northamerica-south1(מקסיקו)-
us-central1(אייווה)רמה נמוכה של CO2
us-east1(קרוליינה הדרומית)us-east4(צפון וירג'יניה)us-east5(קולומבוס)us-south1(דאלאס)רמה נמוכה של CO2
us-west1(אורגון)רמה נמוכה של CO2
בכפוף לתמחור ברמה 2
africa-south1(יוהנסבורג)asia-east2(הונג קונג)asia-northeast3(סיאול, דרום קוריאה)asia-southeast1(סינגפור)asia-southeast2(ג'קרטה)asia-south2(דלהי, הודו)australia-southeast1(סידני)australia-southeast2(מלבורן)-
europe-central2(ורשה, פולין)רמה נמוכה של CO2
europe-west10(ברלין)-
europe-west12(טורינו)רמה נמוכה של CO2
-
europe-west2(לונדון, בריטניה)רמה נמוכה של CO2
europe-west3(פרנקפורט, גרמניה)europe-west6(ציריך, שווייץ)רמה נמוכה של CO2
me-central1(דוחא)me-central2(דמאם)-
northamerica-northeast1(מונטריאול)רמה נמוכה של CO2
-
northamerica-northeast2(טורונטו)רמה נמוכה של CO2
-
southamerica-east1(סאו פאולו, ברזיל)רמה נמוכה של CO2
southamerica-west1(סנטיאגו, צ'ילה)רמה נמוכה של CO2
us-west2(לוס אנג'לס)us-west3(סולט לייק סיטי)us-west4(לאס וגאס)
אם כבר יצרתם שירות Cloud Run, אתם יכולים לראות את האזור במרכז הבקרה של Cloud Run במסוףGoogle Cloud .
אחזור של דוגמת הקוד
כדי לאחזר את דוגמת הקוד לשימוש:
משכפלים את המאגר של האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
אפשר גם להוריד את הדוגמה כקובץ ZIP ולחלץ אותו.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
אפשר גם להוריד את הדוגמה כקובץ ZIP ולחלץ אותו.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
אפשר גם להוריד את הדוגמה כקובץ ZIP ולחלץ אותו.
עוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:
Node.js
cd nodejs-docs-samples/run/idp-sql/
Python
cd python-docs-samples/run/idp-sql/
Java
cd java-docs-samples/run/idp-sql/
המחשה של הארכיטקטורה
משתמש קצה שולח את הבקשה הראשונה לשרת Cloud Run.
הלקוח נטען בדפדפן.
המשתמש מספק את פרטי הכניסה דרך תיבת הדו-שיח של הכניסה באמצעות חשבון Google מ-Identity Platform. המשתמש המחובר מקבל הודעת פתיחה.
השליטה מופנית חזרה לשרת. משתמש הקצה מצביע באמצעות הלקוח, שמאחזר טוקן של מזהה מ-Identity Platform ומוסיף אותו ל-request header של בקשת ההצבעה.
כשהשרת מקבל את הבקשה, הוא מאמת את אסימון המזהה של פלטפורמת הזהויות, ומאשר שמשתמש הקצה מאומת כראוי. לאחר מכן השרת שולח את ההצבעה ל-Cloud SQL באמצעות פרטי הכניסה שלו.
הבנת הקוד המרכזי
הדוגמה מיושמת כלקוח וכשרת, כפי שמתואר בהמשך.
שילוב עם Identity Platform: קוד בצד הלקוח
הדוגמה הזו משתמשת ב-Firebase SDK כדי לשלב עם Identity Platform לצורך כניסה וניהול של משתמשים. כדי להתחבר ל-Identity Platform, קוד ה-JavaScript בצד הלקוח מכיל את ההפניה לפרטי הכניסה של הפרויקט כאובייקט config ומייבא את ערכות ה-SDK של Firebase ל-JavaScript הנדרשות:
Firebase JavaScript SDK מטפל בתהליך הכניסה על ידי הצגת חלון דו-שיח שבו משתמש הקצה מתבקש להיכנס לחשבון Google שלו. ואז מפנה אותם בחזרה לשירות.
כשהמשתמש נכנס לחשבון, הלקוח משתמש בשיטות של Firebase כדי להנפיק טוקן של מזהה. הלקוח מוסיף את הטוקן של המזהה לכותרת Authorization של הבקשה לשרת.
שילוב עם Identity Platform: קוד בצד השרת
השרת משתמש ב-SDK של Firebase לאדמינים כדי לאמת את טוקן המזהה של המשתמש שנשלח מהלקוח. אם הטוקן של המזהה שסופק הוא בפורמט הנכון, לא פג תוקף ונחתם כראוי, השיטה מחזירה את הטוקן של המזהה המפוענח. השרת מחלץ את uid של המשתמש מ-Identity Platform.
Node.js
Python
Java
חיבור השרת ל-Cloud SQL
השרת מתחבר לשקע הדומיין של Unix במכונה של Cloud SQL בפורמט: /cloudsql/CLOUD_SQL_CONNECTION_NAME.
Node.js
Python
Java
משתמשים בשילוב של Spring Cloud Google Cloud PostgreSQL starter כדי ליצור אינטראקציה עם מסדי הנתונים של PostgreSQL ב-Cloud SQL באמצעות ספריות Spring JDBC. מגדירים את Cloud SQL ל-MySQL כך שיגדיר באופן אוטומטי bean שלDataSource. בשילוב עם Spring JDBC, הוא מספק bean של אובייקט JdbcTemplate שמאפשר לבצע פעולות כמו שליחת שאילתות למסד נתונים ושינוי שלו.
טיפול בהגדרות רגישות באמצעות Secret Manager
ב-Secret Manager אפשר לאחסן באופן מאובטח ומרכזי נתונים רגישים, כמו הגדרות אישיות של Cloud SQL. השרת מוסיף את פרטי הכניסה ל-Cloud SQL מ-Secret Manager בזמן הריצה באמצעות משתנה סביבה. מידע נוסף על שימוש בסודות ב-Cloud Run
Node.js
Python
Java
הגדרת Identity Platform
כדי להשתמש ב-Identity Platform, צריך להגדיר אותו ידנית במסוף Google Cloud .
במסוף Google Cloud , מפעילים את Identity Platform API:
מגדירים את הפרויקט:
בחלון חדש, נכנסים לדף "סקירה כללית" בפלטפורמת האימות של Google.
לוחצים על Get Started (שנתחיל?) ומגדירים את הפרויקט.
בתיבת הדו-שיח פרטי האפליקציה:
- מזינים את שם האפליקציה.
- בוחרים אחת מכתובות האימייל שמוצגות לתמיכה במשתמשים.
בתיבת הדו-שיח Audience, בוחרים באפשרות External.
בתיבת הדו-שיח Contact information, מזינים כתובת אימייל ליצירת קשר.
מאשרים את המדיניות בנושא נתוני משתמשים ולוחצים על יצירה.
יוצרים ומקבלים את מזהה הלקוח ואת סוד הלקוח ב-OAuth:
במסוף Google Cloud , נכנסים לדף APIs & Services > Credentials.
בחלק העליון של הדף, לוחצים על Create Credentials ובוחרים באפשרות
OAuth client ID.ב-Application Type, בוחרים באפשרות אפליקציית אינטרנט ומזינים את השם.
לוחצים על יצירה.
הערכים
client_idו-client_secretישמשו אתכם בשלב הבא.
מגדירים את Google כספק:
במסוף Google Cloud , נכנסים לדף Identity Providers.
לוחצים על הוספת ספק.
בוחרים באפשרות Google מהרשימה.
בהגדרות של Web SDK Configuration, מזינים את הערכים של
client_idו-client_secretמהשלב הקודם.בקטע Configure your application, לוחצים על Setup Details.
מעתיקים את ההגדרות לאפליקציה:
- מעתיקים את הערכים של
apiKeyו-authDomainאלstatic/config.jsשל הדוגמה כדי לאתחל את Identity Platform Client SDK.
- מעתיקים את הערכים של
פריסת השירות
כדי להשלים את ההקצאה והפריסה של התשתית, פועלים לפי השלבים הבאים:
יוצרים מכונה של Cloud SQL עם מסד נתונים של PostgreSQL באמצעות המסוף או ה-CLI:
gcloud sql instances create CLOUD_SQL_INSTANCE_NAME \ --database-version=POSTGRES_16 \ --region=CLOUD_SQL_REGION \ --cpu=2 \ --memory=7680MB \ --root-password=DB_PASSWORD
מוסיפים את ערכי פרטי הכניסה של Cloud SQL אל
postgres-secrets.json:Node.js
Python
Java
יוצרים סוד עם גרסאות באמצעות המסוף או ה-CLI:
gcloud secrets create idp-sql-secrets \ --replication-policy="automatic" \ --data-file=postgres-secrets.json
יוצרים חשבון שירות לשרת באמצעות המסוף או ה-CLI:
gcloud iam service-accounts create idp-sql-identity
מקצים תפקידים לגישה ל-Secret Manager ול-Cloud SQL באמצעות המסוף או ה-CLI:
מאפשרים לחשבון השירות שמשויך לשרת לגשת לסוד שנוצר:
gcloud secrets add-iam-policy-binding idp-sql-secrets \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
נותנים לחשבון השירות שמשויך לשרת גישה ל-Cloud SQL:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudsql.client
יוצרים Artifact Registry:
gcloud artifacts repositories create REPOSITORY \ --repository-format docker \ --location REGION
-
REPOSITORYהוא שם המאגר. לכל מיקום של מאגר בפרויקט, שמות המאגרים חייבים להיות ייחודיים.
-
יוצרים את קובץ האימג' של הקונטיינר באמצעות Cloud Build:
Node.js
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Python
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Java
בדוגמה הזו משתמשים ב-Jib כדי ליצור קובצי אימג' של Docker באמצעות כלי Java נפוצים. Jib מבצע אופטימיזציה של גרסאות build של קונטיינרים בלי צורך בקובץ Docker או בהתקנה של Docker. מידע נוסף על יצירת קונטיינרים של Java באמצעות Jib
משתמשים בכלי העזר של פרטי הכניסה של gcloud כדי לתת ל-Docker הרשאה להעביר קבצים בדחיפה ל-Artifact Registry.
gcloud auth configure-docker
משתמשים בפלאגין Jib Maven כדי ליצור את הקונטיינר ולהעביר אותו בדחיפה ל-Artifact Registry.
mvn compile jib:build -Dimage=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
פורסים את קובץ האימג' של הקונטיינר ב-Cloud Run באמצעות המסוף או ה-CLI. שימו לב שהשרת נפרס כדי לאפשר גישה ללא אימות. כך המשתמש יכול לטעון את הלקוח ולהתחיל בתהליך. השרת מאמת באופן ידני את אסימון המזהה שנוסף לבקשת ההצבעה, ומאמת את משתמש הקצה.
gcloud run deploy idp-sql \ --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql \ --allow-unauthenticated \ --service-account idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --add-cloudsql-instances PROJECT_ID:REGION:CLOUD_SQL_INSTANCE_NAME \ --update-secrets CLOUD_SQL_CREDENTIALS_SECRET=idp-sql-secrets:latest
שימו לב גם לדגלים
--service-account,--add-cloudsql-instancesו---update-secrets, שמציינים את זהות השירות, את החיבור למכונה של Cloud SQL ואת שם הסוד עם הגרסה כמשתנה סביבה, בהתאמה.
ליטושים אחרונים
ב-Identity Platform צריך לאשר את כתובת ה-URL של השירות ב-Cloud Run ככתובת URL מותרת להפניה אוטומטית אחרי שהמשתמש נכנס לחשבון:
עורכים את הספק של Google בלחיצה על סמל העט בדף Identity Providers.
לוחצים על Add Domain בקטע Authorized Domains בחלונית השמאלית, ומזינים את כתובת ה-URL של שירות Cloud Run.
אפשר לאתר את כתובת ה-URL של השירות ביומנים אחרי ה-build או הפריסה, או למצוא אותה בכל שלב באמצעות:
gcloud run services describe idp-sql --format 'value(status.url)'
נכנסים לדף APIs & Services > Credentials.
לוחצים על סמל העיפרון לצד מזהה הלקוח ב-OAuth כדי לערוך אותו, ומתחת ללחצן
Authorized redirect URIs click theהוספת URI.מעתיקים את כתובת ה-URL הבאה ומדביקים אותה בשדה, ואז לוחצים על הכפתור שמירה בתחתית הדף.
https://PROJECT_ID.firebaseapp.com/__/auth/handler
רוצה לנסות?
כדי לנסות את השירות המלא:
בדפדפן, עוברים לכתובת ה-URL שסופקה בשלב הפריסה הקודם.
לוחצים על הכפתור כניסה באמצעות חשבון Google ומבצעים את תהליך האימות.
הצביעו גם אתם!
הוא אמור להיראות כך:
אם תבחרו להמשיך לפתח את השירותים האלה, זכרו שיש להם גישה מוגבלת לניהול זהויות והרשאות גישה (IAM) לשאר השירותים של Google Cloud , וצריך לתת להם תפקידי IAM נוספים כדי לגשת לשירותים רבים אחרים.
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון Google Cloud , צריך למחוק את כל המשאבים שפרסתם באמצעות המדריך הזה.
מחיקת הפרויקט
אם יצרתם פרויקט חדש בשביל המדריך הזה, מחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שהוספתם במדריך הזה, מחקו את המשאבים שיצרתם בשביל המדריך.
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבי המדריך
מוחקים את שירות Cloud Run שפרסתם במדריך הזה. שירותי Cloud Run לא צוברים עלויות עד שהם מקבלים בקשות.
כדי למחוק את השירות ב-Cloud Run, מריצים את הפקודה הבאה:
gcloud run services delete SERVICE-NAME
מחליפים את SERVICE-NAME בשם השירות.
אפשר גם למחוק שירותי Cloud Run ממסוףGoogle Cloud .
מסירים את הגדרת ברירת המחדל של האזור
gcloudשהוספתם במהלך הגדרת המדריך:gcloud config unset run/regionמסירים את הגדרות הפרויקט:
gcloud config unset projectמוחקים משאבים אחרים של Google Cloud שנוצרו במדריך הזה: