כדי שהתוסף יוכל לבצע את הפעולות שצוינו, מערכת 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.
אחרי שתקבעו אילו מוצרים התוסף מתקשר איתם, תצטרכו להחליט איזה תפקיד נדרש לאינטראקציה הספציפית הזו. במוצרים מסוימים יש תפקידים שונים בהתאם לפעולה או לקבוצת הפעולות שבוצעו.
לדוגמה, נניח שהתוסף מקיים אינטראקציה עם 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}
) ובקטגוריות של Storage (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 |
כללי אבטחה |
firebaserules.viewer firebaserules.developer firebaserules.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.syncrManager |
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 |
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 |
Cloud Scheduler.admin Cloudscheduler.jobRunner Cloud Scheduler.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 |
dialogflow.admin dialogflow.client dialogflow.reader |
מניעת אובדן נתונים בענן |
dlp.Reader dlp.user |
Error Reporting |
errorreporting.user errorreporting.viewer errorReporting.write |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
רישום ביומן |
Log.configWriter Log.logWriter Log.privateLogViewer Log.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 Transfer Service |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
אחר |
identitytoolkit.admin identitytoolkit.viewer |