הגדר גישה מתאימה עבור הרחבה

כדי שתוסף יבצע את הפעולות שצוינו, Firebase מעניק לכל מופע של תוסף מותקן גישה מוגבלת לפרויקט ולנתונים שלו באמצעות חשבון שירות .

מהו חשבון שירות?

חשבון שירות הוא סוג מיוחד של חשבון משתמש בגוגל. זה מייצג משתמש לא אנושי שיכול לבצע קריאות API מורשות לשירותי Google.

במהלך התקנת הרחבה, Firebase יוצר חשבון שירות עבור ההרחבה בפרויקט. לכל מופע מותקן של הרחבה יש חשבון שירות משלו. אם מופע של תוסף מוסר, Firebase מוחק את חשבון השירות של התוסף.

חשבונות שירות שנוצרו עבור הרחבות הם בפורמט:

ext- extension-instance-id @ project-id .iam.gserviceaccount.com

Firebase מגביל את הגישה של תוסף לפרויקט ולנתונים שלו על ידי הקצאת תפקידים ספציפיים (חבילות של הרשאות) לחשבון השירות של התוסף. כאשר אתה בונה הרחבה, אתה קובע אילו תפקידים ההרחבה שלך דורשת לפעול, ואז אתה מפרט את התפקידים הללו ואת הסיבה שהסיומת שלך זקוקה לתפקידים אלה בקובץ extension.yaml שלך (ראה דוגמה בתחתית דף זה).

קבע אילו תפקידים ההרחבה שלך דורשת

כאשר אתה בונה את התוסף שלך, אתה קובע את רמת הגישה שהתוסף שלך דורש כדי לפעול.

במהלך ההתקנה, ה-CLI של Firebase מבקש מהמשתמש לקבל את רמת הגישה המוענקת על ידי כל תפקיד. אם התוסף שלך מבקש יותר תפקידים ממה שהוא באמת צריך, סביר להניח שמשתמשים יתקינו אותו.

  1. קבע אם התוסף שלך מקיים אינטראקציה עם מוצר:

    • אם התוסף שלך יוצר אינטראקציה עם מוצר , עליך לתת לתוסף שלך גישה למוצר זה.

      לדוגמה, אם התוסף שלך כותב נתונים למופע של Realtime Database, אז התוסף שלך זקוק לתפקיד Realtime Database (באופן ספציפי, firebasedatabase.admin ).

    • אם התוסף שלך רק מאזין לאירוע מעורר ממוצר , אז התוסף שלך אינו זקוק לתפקיד המשויך למוצר זה.

      לדוגמה, אם ההרחבה שלך מופעלת בעת כתיבה למופע Realtime Database (אך אינו כותב דבר למסד הנתונים), אז ההרחבה שלך אינה זקוקה לתפקיד Realtime Database.

  2. לאחר שקבעתם עם אילו מוצרים התוסף שלכם מקיים אינטראקציה , עליכם להחליט איזה תפקיד נדרש עבור האינטראקציה הספציפית הזו. חלק מהמוצרים מציעים תפקידים שונים בהתאם לפעולה או לקבוצת הפעולות שבוצעו.

    לדוגמה, נניח שהתוסף שלך יוצר אינטראקציה עם דלי של 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 של משאב יש להוסיף תפקיד זה. אם מושמט, ברירת המחדל היא projects/${project_id} .

הערכים הנתמכים הם projects/* ו- projects/*/buckets/* .

צמצם את היקף התפקידים

הרחבות צריכות לפעול לפי עיקרון המינימום הזכויות ולבקש רק גישה למשאבים הדרושים להם. אתה יכול להגביל את היקף הגישה של תוסף באמצעות השדה 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