כדי שהתוסף יוכל לבצע את הפעולות שצוינו, מערכת Firebase מעניקה לכל מכונה של תוסף מותקן גישה מוגבלת לפרויקט ולנתונים שלו באמצעות חשבון שירות.
מהו חשבון שירות?
חשבון שירות הוא סוג מיוחד של חשבון משתמש ב-Google. הוא מייצג משתמש לא אנושי שיכול לבצע קריאות מורשות ל-API לשירותי Google.
במהלך ההתקנה של התוסף, מערכת Firebase יוצרת חשבון שירות לתוסף בפרויקט. לכל מכונה מותקנת של תוסף יש חשבון שירות משלה. אם מבטלים את ההתקנה של מכונה של תוסף, מערכת Firebase מוחקת את חשבון השירות של התוסף.
חשבונות השירות שנוצרים עבור התוספים הם בפורמט:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
מערכת Firebase מגבילה את הגישה של התוסף לפרויקט ולנתונים שלו על ידי הקצאת תפקידים ספציפיים (חבילות של הרשאות) לחשבון השירות של התוסף. כשאתם מפתחים תוסף, אתם קובעים אילו תפקידים נדרשים לתוסף כדי לפעול, ואז מציינים את התפקידים האלה ואת הסיבה לכך שהתוסף זקוק להם בקובץ extension.yaml
(דוגמה בחלק התחתון של הדף הזה).
איך קובעים אילו תפקידים נדרשים לתוסף
כשאתם מפתחים את התוסף, אתם קובעים את רמת הגישה שנדרשת לו כדי לפעול.
במהלך ההתקנה, ה-CLI של Firebase ידרוש מהמשתמש לאשר את רמת הגישה שמוענקת לכל תפקיד. אם התוסף מבקש יותר תפקידים ממה שהוא באמת צריך, יכול להיות שהמשתמשים לא יתקינו אותו.
בודקים אם התוסף מקיים אינטראקציה עם מוצר:
אם התוסף מתקשר עם מוצר, צריך לתת לתוסף גישה למוצר הזה.
לדוגמה, אם התוסף כותב נתונים למכונה של Realtime Database, לתוסף צריך תפקיד Realtime Database (במיוחד
firebasedatabase.admin
).אם התוסף רק מקשיב לאירוע מפעיל ממוצר, אז לא נדרש לתוסף תפקיד שמשויך למוצר הזה.
לדוגמה, אם התוסף מפעיל במהלך הכתיבה במכונה של Realtime Database (אבל לא כותב שום דבר למסד הנתונים), לא נדרש התפקיד Realtime Database.
אחרי שתקבעו אילו מוצרים התוסף מתקשר איתם, תצטרכו להחליט איזה תפקיד נדרש לאינטראקציה הספציפית הזו. במוצרים מסוימים יש תפקידים שונים בהתאם לפעולה או לקבוצת הפעולות שמבצעים.
לדוגמה, נניח שהתוסף שלכם יוצר אינטראקציה עם קטגוריה (bucket) בשם Cloud Storage. התפקיד
storage.objectCreator
יאפשר לתוסף ליצור אובייקט בקטגוריה Cloud Storage, אבל התפקיד הזה לא יאפשר לתוסף להציג, למחוק או לשכתב אובייקטים. כדי לאפשר לתוסף לבצע את הפעולות הנוספות האלה, צריך להקצות לו את התפקידstorage.objectAdmin
במקום זאת.
בקטע שבתחתית הדף הזה מפורטים כל התפקידים הנתמכים שאפשר להקצות לחשבון השירות של התוסף. במסמכי התיעוד של Firebase או במאמרי העזרה של Google Cloud מפורט מידע נוסף על התיאור וההרשאות של כל תפקיד. אפשר גם לחפש תפקידים בלוח IAM ואדמין במסוף Google Cloud.
איך מקצים תפקידים לתוסף
בקטע roles
בקובץ extension.yaml
, מציינים את תפקידי ה-IAM הנדרשים כדי שהתוסף יפעל.
זוהי דוגמה לתוסף שמאזין לנתיב Firebase Realtime Database שצוין. כשהתוסף מופעל, הוא מעדכן את כתובת האימייל של חשבון המשתמש (אינטראקציה עם Firebase Authentication) ושולח התראה (אינטראקציה עם Firebase Cloud Messaging). חשוב לשים לב לדברים הבאים:
- למרות שהתוסף מופעל על ידי אירוע Realtime Database, התפקיד
firebasedatabase.admin
לא מופיע ברשימה (האזנה לא נחשבת אינטראקציה). - מכיוון שהתוסף מתקשר עם Authentication ו-Cloud Messaging, הוא דורש תפקידים כדי לגשת למוצרים האלה (
firebaseauth.admin
ו-firebasenotifications.admin
, בהתאמה).
# extension.yaml
...
# Roles assigned to the extension's service account by Firebase during installation
roles:
- role: firebaseauth.admin
reason: Required to update the email address of the user account
- role: firebasenotifications.admin
reason: Required to send a notification that the email address has been updated
...
בקובץ extension.yaml
, משתמשים בשדות הבאים כדי להקצות תפקיד לחשבון השירות של התוסף:
שדה | סוג | תיאור |
---|---|---|
role (חובה) |
מחרוזת | השם של תפקיד ה-IAM שנדרש לתוסף כדי לפעול. |
reason (חובה) |
מחרוזת |
תיאור קצר של הסיבה לכך שהתוסף זקוק לגישה שמקבלים מהתפקיד חשוב לספק מספיק פרטים כדי שהמשתמשים יוכלו להבין איך התוסף משתמש בתפקיד. |
resource (אופציונלי) |
מחרוזת |
למדיניות ה-IAM של איזה משאב צריך להוסיף את התפקיד הזה. אם לא צוין
הפרמטר הזה,
ברירת המחדל היא
הערכים הנתמכים הם |
צמצום היקף התפקידים
התוספים צריכים לפעול בהתאם לעיקרון של הרשאות מינימליות ולבקש גישה רק למשאבים שנחוצים להם.
אפשר להגביל את היקף הגישה של התוסף באמצעות השדה role.resource
.
לדוגמה, אם התוסף צריך לכתוב אובייקטים לקטגוריה של Cloud Storage, אפשר להשתמש בתפקיד הבא:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
כך התוסף יוכל לגשת רק לקטגוריה הדרושה, ולא לאחרות באותו פרויקט.
השדה הזה תומך בפרויקטים (projects/{project_id}
) ובקטגוריות אחסון (projects/{project_id}/buckets/{bucket_id}
).
התפקידים הנתמכים בתוספים
בטבלה הבאה מפורטים תפקידי IAM נתמכים ליצירת אינטראקציה עם מוצרי Firebase. רוב התפקידים בטבלה הזו הם תפקידים ברמת המוצר ב-Firebase, אבל חלקם מנוהלים ישירות על ידי Google Cloud (באופן ספציפי, Cloud Firestore ו-Cloud Storage).
מוצרי Firebase
אם התוסף שלכם יוצר אינטראקציה עם... | מקצים אחד מהתפקידים הבאים... |
---|---|
Cloud Firestore |
datastore.ImportExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
Cloud Storage for Firebase |
storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
Firebase App Distribution |
firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Authentication |
firebaseauth.admin firebaseauth.viewer |
Firebase A/B Testing |
firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging |
firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics |
firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase Hosting |
firebasehosting.admin firebasehosting.viewer |
Firebase In-App Messaging |
firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML |
firebaseml.admin firebaseml.viewer |
Firebase Performance Monitoring |
firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
Firebase Realtime Database |
firebasedatabase.admin firebasedatabase.viewer |
כללי אבטחה |
firebaseכללי.viewer firebaseכללים.developer firebaseכללים.Deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
מוצרי Google Cloud
מידע נוסף על התפקידים האלה זמין במסמכי התיעוד של Google Cloud.
אם התוסף שלכם יוצר אינטראקציה עם... | מקצים אחד מהתפקידים הבאים... |
---|---|
פעולות |
actions.Admin actions.Viewer |
Apigee |
apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
App Engine |
appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
AutoML |
automl.editor automl.predictor automl.viewer |
BigQuery |
bigquery.connectAdmin bigquery.connectUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
Cloud Bigtable |
bigtable.reader bigtable.user bigtable.viewer |
חיוב | billing.viewer |
צ'אטים ב-Hangouts |
chat.owner chat.Reader |
נכס ענן |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
כלי לניפוי באגים בענן |
Clouddebugger.agent clouddebugger.user |
Cloud Functions |
cloudfunctions.invoker cloudfunctions.viewer |
Cloud IAP |
iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
Cloud IoT |
cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler |
cloudprofiler.agent cloudprofiler.user |
Cloud Scheduler |
cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Cloud Security Scanner |
cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL |
cloudsql.client cloudsql.editor cloudsql.viewer |
Cloud Trace |
cloudtrace.admin cloudtrace.agent cloudtrace.user |
Dataflow |
dataflow.developer dataflow.viewer dataflow.worker |
Dialogflow |
speechflow.admin Dialogflow.client Dialogflow.Reader |
מניעת אובדן נתונים בענן |
dlp.reader dlp.user |
Error Reporting |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
רישום ביומן |
logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Machine Learning Engine |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
מעקב |
monitoring.editor monitoring.metricWriter monitoring.viewer |
AI Notebooks |
notebooks.admin notebooks.viewer |
Pub/Sub |
pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis |
redis.editor redis.viewer |
Cloud Run | run.invoker |
מקור |
source.reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
שימוש בשירות | serviceusage.apiKeysMetadataViewer |
שירות העברה של Cloud Storage |
storagetransfer.user storagetransfer.viewer |
המרת קידוד בענן |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
אחר |
identitytoolkit.admin identitytoolkit.viewer |