Damit eine Erweiterung die angegebenen Aktionen ausführen kann, gewährt Firebase jeder Instanz einer installierten Erweiterung über ein Dienstkonto eingeschränkten Zugriff auf das Projekt und die zugehörigen Daten.
Was ist ein Dienstkonto?
Ein Dienstkonto ist eine spezielle Art von Google-Nutzerkonto. Es repräsentiert einen Nutzer nicht menschlicher Natur, der autorisierte API-Aufrufe an Google-Dienste senden kann.
Während der Installation einer Erweiterung erstellt Firebase ein Dienstkonto für die Erweiterung im Projekt. Jede installierte Instanz einer Erweiterung hat ein eigenes Dienstkonto. Wenn eine Erweiterungsinstanz deinstalliert wird, löscht Firebase das Dienstkonto der Erweiterung.
Dienstkonten, die für Erweiterungen erstellt werden, haben das Format:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase beschränkt den Zugriff einer Erweiterung auf ein Projekt und dessen Daten, indem dem Dienstkonto der Erweiterung bestimmte Rollen (Berechtigungspakete) zugewiesen werden. Beim Erstellen einer Erweiterung legen Sie fest, welche Rollen die Erweiterung benötigt. Anschließend listen Sie diese Rollen in der Datei extension.yaml
auf und geben an, aus welchem Grund die Erweiterung sie benötigt (siehe Beispiel unten auf dieser Seite).
Bestimmen, welche Rollen für die Erweiterung erforderlich sind
Beim Erstellen der Erweiterung legen Sie fest, welche Zugriffsrechte für die Funktion der Erweiterung erforderlich sind.
Während der Installation fordert die Firebase-Befehlszeile den Nutzer auf, die Zugriffsebene zu akzeptieren, die von jeder Rolle gewährt wird. Wenn für Ihre Erweiterung mehr Rollen angefordert werden, als tatsächlich erforderlich sind, ist die Wahrscheinlichkeit geringer, dass Nutzer sie installieren.
So prüfen Sie, ob Ihre Erweiterung mit einem Produkt interagiert:
Wenn Ihre Erweiterung mit einem Produkt interagiert, müssen Sie Ihrer Erweiterung Zugriff auf dieses Produkt gewähren.
Wenn Ihre Erweiterung beispielsweise Daten in eine Realtime Database-Instanz schreibt, benötigt sie eine Realtime Database-Rolle (genauer gesagt
firebasedatabase.admin
).Wenn Ihre Erweiterung nur auf ein auslösendes Ereignis von einem Produkt wartet, muss sie nicht mit diesem Produkt verknüpft sein.
Wenn Ihre Erweiterung beispielsweise bei einem Schreibvorgang in eine Realtime Database-Instanz ausgelöst wird, aber nichts in die Datenbank schreibt, benötigt sie keine Realtime Database-Rolle.
Nachdem Sie festgelegt haben, mit welchen Produkten Ihre Erweiterung interagiert, müssen Sie entscheiden, welche Rolle für die jeweilige Interaktion erforderlich ist. Bei einigen Produkten sind je nach Aktion oder Aktionsreihe unterschiedliche Rollen verfügbar.
Angenommen, Ihre Erweiterung interagiert mit einem Cloud Storage-Bucket. Mit der Rolle
storage.objectCreator
kann die Erweiterung ein Objekt in einem Cloud Storage-Bucket erstellen, aber keine Objekte ansehen, löschen oder überschreiben. Damit die Erweiterung diese zusätzlichen Aktionen ausführen kann, müssen Sie ihr stattdessen die Rollestorage.objectAdmin
zuweisen.
Im Abschnitt unten auf dieser Seite finden Sie eine Liste aller unterstützten Rollen, die Sie dem Dienstkonto Ihrer Erweiterung zuweisen können. Eine Beschreibung der einzelnen Rollen und die erteilten Berechtigungen finden Sie in der Firebase-Dokumentation oder in der Google Cloud-Dokumentation. Sie können Rollen auch im Bereich IAM & Verwaltung der Google Cloud Console aufrufen.
Rollen einer Erweiterung zuweisen
Geben Sie die IAM-Rollen, die für die Funktion Ihrer Erweiterung erforderlich sind, im Abschnitt roles
der Datei extension.yaml
an.
Hier ist ein Beispiel für eine Erweiterung, die auf einen bestimmten Firebase Realtime Database-Pfad achtet. Wenn die Erweiterung ausgelöst wird, aktualisiert sie die E-Mail-Adresse eines Nutzerkontos (Interaktion mit Firebase Authentication) und sendet eine Benachrichtigung (Interaktion mit Firebase Cloud Messaging). Beachten Sie Folgendes:
- Auch wenn die Erweiterung durch ein Realtime Database-Ereignis ausgelöst wird, ist die Rolle
firebasedatabase.admin
nicht aufgeführt. Das Anhören wird nicht als Interaktion betrachtet. - Da die Erweiterung mit Authentication und Cloud Messaging interagiert, benötigt sie Rollen für den Zugriff auf diese Produkte (
firebaseauth.admin
undfirebasenotifications.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
...
Verwenden Sie in der Datei extension.yaml
die folgenden Felder, um dem Dienstkonto einer Erweiterung eine Rolle zuzuweisen:
Feld | Typ | Beschreibung |
---|---|---|
role (erforderlich) |
String | Name der IAM-Rolle, die für die Funktion der Erweiterung erforderlich ist |
reason (erforderlich) |
String |
Eine kurze Beschreibung des Grundes, warum die Erweiterung den durch die Rolle gewährten Zugriff benötigt Geben Sie genügend Details an, damit Nutzer verstehen, wie die Rolle die Rolle verwendet. |
resource (optional) |
String |
IAM-Richtlinie der Ressource, der diese Rolle hinzugefügt werden soll. Wenn keine Angabe gemacht wird, wird standardmäßig
Unterstützte Werte sind |
Umfang von Rollen reduzieren
Erweiterungen sollten dem Prinzip der geringsten Berechtigung folgen und nur Zugriff auf die Ressourcen anfordern, die sie benötigen.
Sie können den Zugriffsbereich einer Erweiterung mithilfe des Felds role.resource
einschränken.
Wenn Ihre Erweiterung beispielsweise Objekte in einen Cloud Storage-Bucket schreiben muss, können Sie die folgende Rolle verwenden:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
So kann die Erweiterung nur auf den benötigten Bucket zugreifen und nicht auf andere im selben Projekt.
Dieses Feld unterstützt Projekte (projects/{project_id}
) und Storage-Buckets (projects/{project_id}/buckets/{bucket_id}
).
Unterstützte Rollen für Erweiterungen
In der folgenden Tabelle sind die unterstützten IAM-Rollen für die Interaktion mit Firebase-Produkten aufgeführt. Die meisten Rollen in dieser Tabelle sind Firebase-Rollen auf Produktebene. Einige werden jedoch direkt von Google Cloud verwaltet, insbesondere Cloud Firestore und Cloud Storage.
Firebase-Produkte
Interaktion der Erweiterung mit... | Weisen Sie eine der folgenden Rollen zu: |
---|---|
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 |
Sicherheitsregeln |
firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
Google Cloud-Produkte
Weitere Informationen zu diesen Rollen finden Sie in der Google Cloud-Dokumentation.
Wenn Ihre Erweiterung mit… interagiert | Weisen Sie eine der folgenden Rollen zu: |
---|---|
Aktionen |
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 |
Abrechnung | billing.viewer |
Hangouts-Chats |
chat.owner chat.reader |
Cloudasset |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
Cloud Debugger |
clouddebug.agent clouddebug.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 |
Cloud Data Loss Prevention |
dlp.reader dlp.user |
Error Reporting |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
Logging |
logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Machine Learning Engine |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
Monitoring |
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 |
Quelle |
source.reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
Service Usage | serviceusage.apiKeysMetadataViewer |
Cloud Storage Transfer Service |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
Sonstiges |
Identity Toolkit.admin identitytoolkit.viewer |