כדי שהתוסף יוכל לבצע את הפעולות שצוינו, מערכת 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}
) ובקטגוריות של 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.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 |
צ'אטים ב-Hangouts |
chat.owner chat.reader |
נכס ב-Cloud |
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 |
dialogflow.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 Transfer Service |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
אחר |
identitytoolkit.admin identitytoolkit.viewer |