במדריך הזה מוסבר איך ליצור שירות הצבעה שכולל את הרכיבים הבאים:
לקוח מבוסס-דפדפן שמבצע את הפעולות הבאות:
- משתמש ב-Identity Platform כדי לאחזר אסימון מזהה.
- המשתמשים יכולים להצביע לחיית המחמד המועדפת עליהם.
- האסימון המזהה הזה מתווסף לבקשה לשרת Cloud Run שמטפל בהצבעה.
שרת Cloud Run שמבצע את הפעולות הבאות:
- הבדיקה מוודאת שהמשתמש הקצה עבר אימות בצורה תקינה על ידי אספקת אסימון מזהה תקף.
- מעבד את ההצבעה של משתמש הקצה.
- האפליקציה שולחת את ההצבעה ל-Cloud SQL כדי לאחסן אותה, באמצעות פרטי הכניסה שלה.
מסד נתונים של PostgreSQL שבו נשמרים הקולות.
כדי לפשט את המדריך, השתמשנו ב-Google כספק. כדי לקבל את טוקן ה-ID, המשתמשים צריכים לעבור אימות באמצעות חשבון המשתמש שלהם. עם זאת, אפשר להשתמש בספקים אחרים או בשיטות אימות אחרות כדי להיכנס לחשבונות של משתמשים.
במאמר הזה, המונח חשבון משתמש מתייחס לחשבון 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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-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) - צרכן שימוש בשירות (
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 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(מילאנו)europe-west9(פריז)רמה נמוכה של CO2
me-west1(תל אביב)northamerica-south1(מקסיקו)us-central1(אייווה)רמה נמוכה של CO2
us-east1(דרום קרוליינה)-
us-east4(צפון וירג'יניה) us-east5(Columbus)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(ורשה, פולין)-
europe-west10(Berlin) europe-west12(טורינו)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 ומוסיף אותו לכותרת של בקשת ההצבעה.
כשהשרת מקבל את הבקשה, הוא מאמת את טוקן ה-ID של Identity Platform כדי לוודא שמשתמש הקצה אומת בצורה מתאימה. לאחר מכן השרת שולח את ההצבעה ל-Cloud SQL באמצעות פרטי הכניסה שלו.
הסבר על קוד הליבה
הדוגמה מיושמת כלקוח ולשרת, כפי שמתואר בהמשך.
שילוב עם Identity Platform: קוד בצד הלקוח
בדוגמה הזו נעשה שימוש ב-Firebase SDKs כדי לבצע שילוב עם Identity Platform לצורך כניסה וניהול של משתמשים. כדי להתחבר אל Identity Platform, קובץ ה-JavaScript בצד הלקוח מכיל את ההפניה לפרטי הכניסה של הפרויקט כאובייקט הגדרה ומייבא את ערכות Firebase JavaScript SDK הנדרשות:
ה-SDK של Firebase JavaScript מטפל בתהליך הכניסה על ידי הצגת חלון דו-שיח למשתמש הקצה, שבו הוא מתבקש להיכנס לחשבון 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 כך שתגדיר אוטומטית רכיבDataSource bean, שביחד עם Spring JDBC מספק רכיב JdbcTemplate object bean שמאפשר פעולות כמו שליחת שאילתות ושינוי מסד נתונים.
טיפול בהגדרות רגישות באמצעות 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 (מתחילים) ופועלים לפי ההוראות להגדרת הפרויקט.
בתיבת הדו-שיח פרטי האפליקציה:
- מזינים את שם האפליקציה.
- בוחרים אחת מכתובות האימייל של תמיכת המשתמשים שמוצגות.
בתיבת הדו-שיח קהל, בוחרים באפשרות חיצוני.
בתיבת הדו-שיח פרטים ליצירת קשר, מזינים כתובת אימייל של איש קשר.
מאשרים את המדיניות בנושא נתוני משתמשים ולוחצים על יצירה.
יוצרים ומקבלים את מזהה הלקוח והסוד ב-OAuth:
במסוף Google Cloud , נכנסים לדף APIs & Services > Credentials.
בחלק העליון של הדף, לוחצים על יצירת פרטי כניסה ובוחרים באפשרות
OAuth client ID.בקטע Application Type (סוג האפליקציה), בוחרים באפשרות Web Application (אפליקציית אינטרנט) ומזינים את השם.
לוחצים על יצירה.
הערכים
client_idו-client_secretישמשו בשלב הבא.
מגדירים את Google כספק:
נכנסים לדף Identity Providers במסוף Google Cloud .
לוחצים על הוספת ספק.
בוחרים באפשרות Google מהרשימה.
בהגדרות של Web SDK Configuration, מזינים את הערכים
client_idו-client_secretמהשלב הקודם.בקטע הגדרת האפליקציה, לוחצים על פרטי ההגדרה.
מעתיקים את ההגדרות לאפליקציה:
- מעתיקים את הערכים
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 מבצע אופטימיזציה של בניית קונטיינרים בלי צורך בקובץ Dockerfile או בהתקנה של 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 כהפניה אוטומטית מותרת:
בדף ספקי זהויות, לוחצים על סמל העיפרון כדי לערוך את ספק Google.
בחלונית השמאלית, בקטע 'דומיינים מורשים', לוחצים על הוספת דומיין ומזינים את כתובת ה-URL של שירות Cloud Run.
אפשר לאתר את כתובת ה-URL של השירות ביומנים אחרי הבנייה או הפריסה, או למצוא אותה בכל שלב באמצעות:
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 שנוצרו במדריך הזה: