כדי שתוסף יבצע את הפעולות שצוינו, Firebase מעניק לכל מופע של תוסף מותקן גישה מוגבלת לפרויקט ולנתונים שלו באמצעות חשבון שירות .
מהו חשבון שירות?
חשבון שירות הוא סוג מיוחד של חשבון משתמש בגוגל. זה מייצג משתמש לא אנושי שיכול לבצע קריאות 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.
לאחר שקבעתם עם אילו מוצרים התוסף שלכם מקיים אינטראקציה , עליכם להחליט איזה תפקיד נדרש עבור האינטראקציה הספציפית הזו. חלק מהמוצרים מציעים תפקידים שונים בהתאם לפעולה או לקבוצת הפעולות שבוצעו.
לדוגמה, נניח שהתוסף שלך יוצר אינטראקציה עם דלי של Cloud Storage. התפקיד
storage.objectCreator
יאפשר לתוסף ליצור אובייקט בדלי של Cloud Storage, אך תפקיד זה לא יאפשר לתוסף להציג, למחוק או להחליף אובייקטים. כדי לאפשר לתוסף לבצע את הפעולות הנוספות האלה, עליך להקצות את התפקידstorage.objectAdmin
במקום זאת.
עיין בסעיף בתחתית דף זה כדי להציג את כל התפקידים הנתמכים שאתה יכול להקצות לחשבון השירות של התוסף שלך. כדי ללמוד על התיאור של כל תפקיד וההרשאות שניתנו, בקר בתיעוד של Firebase או בתיעוד של Google Cloud . אתה יכול גם לחפש תפקידים בפאנל IAM & Admin של מסוף Google Cloud .
כיצד להקצות תפקידים להרחבה
רשום את תפקידי IAM הדרושים כדי שהסיומת שלך תפעל בקטע roles
של קובץ extension.yaml
שלך.
הנה דוגמה לתוסף שמאזין לנתיב מוגדר של Firebase Realtime Database. כשהתוסף מופעל, התוסף מעדכן אימייל של חשבון משתמש (אינטראקציה עם אימות Firebase) ושולח הודעה (אינטראקציה עם Firebase Cloud Messaging). שימו לב לדברים הבאים:
- למרות שהתוסף מופעל מאירוע Realtime Database, תפקיד
firebasedatabase.admin
אינו מופיע (האזנה לא נחשבת כאינטראקציה ). - מכיוון שהתוסף מקיים אינטראקציה עם אימות והודעות ענן, התוסף דורש תפקידים כדי לגשת למוצרים אלה (
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 bucket, תוכל להשתמש בתפקיד הבא:
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 |
אחסון בענן עבור Firebase | storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
הפצת אפליקציות Firebase | firebaseappdistro.admin firebaseappdistro.viewer |
אימות Firebase | firebaseuth.admin firebaseuth.viewer |
בדיקת A/B של Firebase | firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging | firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
אירוח ב-Firebase | firebasehosting.admin firebasehosting.viewer |
הודעות באפליקציה של Firebase | firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML | firebaseml.admin firebaseml.viewer |
ניטור ביצועי Firebase | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
מסד נתונים בזמן אמת של Firebase | firebasedatabase.admin firebasedatabase.viewer |
כללי אבטחה | firebaserules.viewer firebaserules.developer firebaserules.deployer |
גוגל ניתוח נתונים | firebaseanalytics.admin firebaseanalytics.viewer |
מוצרי Google Cloud
למד על תפקידים אלה בתיעוד של Google Cloud .
אם התוסף שלך יוצר אינטראקציה עם... | הקצה אחד מהתפקידים האלה... |
---|---|
פעולות | פעולות.מנהל פעולות.צופה |
אפיג'י | apigee.analyticsAgent עורך apigee.analytics 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.connectionAdmin bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
Cloud Bigtable | bigtable.reader bigtable.user bigtable.viewer |
חיוב | billing.viewer |
Hangout Chat | צ'אט.בעלים chat.reader |
נכס ענן | cloudasset.owner cloudasset.viewer |
Cloud Data Fusion | datafusion.admin datafusion.viewer |
מאתר באגים בענן | clouddebugger.agent clouddebugger.user |
פונקציות ענן | cloudfunctions.invoker cloudfunctions.viewer |
ענן IAP | iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
ענן IoT | cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler | cloudprofiler.agent cloudprofiler.user |
מתזמן ענן | cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
סורק אבטחה בענן | cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL | cloudsql.client cloudsql.editor cloudsql.viewer |
ענן טרייס | cloudtrace.admin cloudtrace.agent cloudtrace.user |
זרימת נתונים | dataflow.developer dataflow.viewer dataflow.worker |
זרימת דיאלוג | dialogflow.admin dialogflow.client dialogflow.reader |
מניעת אובדן נתונים בענן | dlp.reader dlp.user |
דיווח שגיאות | errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc | eventarc.publisher eventarc.eventReceiver |
חנות קבצים בענן | file.editor file.viewer |
רישום | logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
מנוע למידת מכונה | ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
ניטור | עורך ניטור monitoring.metricWriter monitoring.viewer |
מחברות AI | notebooks.admin Notebooks.Viewer |
פאב/סאב | pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis | redis.editor redis.viewer |
הפעלת ענן | run.invoker |
מָקוֹר | source.reader source.writer |
ענן מפתח | spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
שימוש בשירות | serviceusage.apiKeysMetadataViewer |
שירות העברת אחסון בענן | storagetransfer.user storagetransfer.viewer |
Transcoder בענן | transcoder.admin transcoder.viewer |
קודקוד AI | aiplatform.user |
אַחֵר | identitytoolkit.admin identitytoolkit.viewer |