Damit eine Erweiterung ihre angegebenen Aktionen ausführen kann, gewährt Firebase jeder Instanz einer installierten Erweiterung über ein Dienstkonto eingeschränkten Zugriff auf das Projekt und seine Daten.
Was ist ein Dienstkonto?
Ein Dienstkonto ist eine besondere Art von Google-Benutzerkonto. Es stellt einen nichtmenschlichen Benutzer dar, der autorisierte API-Aufrufe an Google-Dienste durchführen kann.
Während der Installation einer Erweiterung erstellt Firebase ein Dienstkonto für die Erweiterung im Projekt. Jede installierte Instanz einer Erweiterung verfügt über ein eigenes Dienstkonto. Wenn eine Erweiterungsinstanz deinstalliert wird, löscht Firebase das Dienstkonto der Erweiterung.
Für Erweiterungen erstellte Dienstkonten haben das folgende Format:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
Firebase schränkt den Zugriff einer Erweiterung auf ein Projekt und seine Daten ein, indem dem Dienstkonto der Erweiterung bestimmte Rollen (Berechtigungsbündel) zugewiesen werden. Wenn Sie eine Erweiterung erstellen, bestimmen Sie, welche Rollen Ihre Erweiterung zum Betrieb benötigt. Anschließend listen Sie diese Rollen und den Grund auf, warum Ihre Erweiterung diese Rollen in Ihrer Datei extension.yaml
benötigt (siehe Beispiel unten auf dieser Seite).
Bestimmen Sie, welche Rollen Ihre Erweiterung benötigt
Wenn Sie Ihre Erweiterung erstellen, legen Sie die Zugriffsebene fest, die Ihre Erweiterung zum Betrieb benötigt.
Während der Installation fordert die Firebase-CLI den Benutzer auf, die von jeder Rolle gewährte Zugriffsebene zu akzeptieren. Wenn Ihre Erweiterung mehr Rollen anfordert, als sie tatsächlich benötigt, ist die Wahrscheinlichkeit, dass Benutzer sie installieren, geringer.
Stellen Sie fest, 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 Echtzeitdatenbankinstanz schreibt , benötigt Ihre Erweiterung eine Echtzeitdatenbankrolle (insbesondere
firebasedatabase.admin
).Wenn Ihre Erweiterung nur auf ein auslösendes Ereignis von einem Produkt wartet , benötigt Ihre Erweiterung keine diesem Produkt zugeordnete Rolle.
Wenn Ihre Erweiterung beispielsweise einen Schreibvorgang in eine Echtzeitdatenbankinstanz auslöst (aber nichts in die Datenbank schreibt), benötigt Ihre Erweiterung keine Echtzeitdatenbankrolle.
Nachdem Sie festgestellt haben, mit welchen Produkten Ihre Erweiterung interagiert , müssen Sie entscheiden, welche Rolle für diese spezifische Interaktion erforderlich ist. Einige Produkte bieten je nach ausgeführter Aktion oder Aktionsgruppe unterschiedliche Rollen.
Angenommen, Ihre Erweiterung interagiert mit einem Cloud Storage-Bucket. Die Rolle
storage.objectCreator
würde es der Erweiterung ermöglichen, ein Objekt in einem Cloud Storage-Bucket zu erstellen , aber diese Rolle würde es der Erweiterung nicht erlauben, Objekte anzuzeigen, zu löschen oder zu überschreiben. Damit die Erweiterung diese zusätzlichen Aktionen ausführen kann, müssen Sie stattdessen die Rollestorage.objectAdmin
zuweisen.
Im Abschnitt unten auf dieser Seite finden Sie alle unterstützten Rollen , die Sie dem Dienstkonto Ihrer Nebenstelle zuweisen können. Um mehr über die Beschreibung der einzelnen Rollen und gewährten Berechtigungen zu erfahren, besuchen Sie die Firebase-Dokumentation oder die Google Cloud-Dokumentation . Sie können Rollen auch im IAM- und Admin-Bereich der Google Cloud Console nachschlagen.
So weisen Sie einer Nebenstelle Rollen zu
Listen Sie die IAM-Rollen auf, die für den Betrieb Ihrer Erweiterung im Abschnitt roles
Ihrer Datei extension.yaml
erforderlich sind.
Hier ist ein Beispiel für eine Erweiterung, die auf einen angegebenen Firebase Realtime Database-Pfad lauscht. Bei Auslösung aktualisiert die Erweiterung die E-Mail-Adresse eines Benutzerkontos (Interaktion mit Firebase Authentication) und sendet eine Benachrichtigung (Interaktion mit Firebase Cloud Messaging). Beachten Sie Folgendes:
- Auch wenn die Erweiterung durch ein Echtzeitdatenbankereignis ausgelöst wird , wird die Rolle
firebasedatabase.admin
nicht aufgeführt (das Zuhören wird nicht als Interaktion betrachtet). - Da die Erweiterung mit Authentifizierung und Cloud Messaging interagiert , benötigt die Erweiterung Rollen für den Zugriff auf diese Produkte (
firebaseauth.admin
bzw.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
...
Verwenden Sie in Ihrer Datei extension.yaml
die folgenden Felder, um dem Dienstkonto einer Erweiterung eine Rolle zuzuweisen:
Feld | Typ | Beschreibung |
---|---|---|
role (erforderlich) | Zeichenfolge | Name der IAM-Rolle , die die Erweiterung zum Betrieb benötigt |
reason (erforderlich) | Zeichenfolge | Kurze Beschreibung des Grundes, warum die Erweiterung den durch die Rolle gewährten Zugriff benötigt Stellen Sie sicher, dass Sie genügend Details angeben, damit ein Benutzer verstehen kann, wie die Erweiterung die Rolle verwendet. |
resource (Optional) | Zeichenfolge | Der IAM-Richtlinie der Ressource, zu der diese Rolle hinzugefügt werden soll. Wenn es weggelassen wird, wird standardmäßig Unterstützte Werte sind |
Reduzieren Sie den Rollenumfang
Erweiterungen sollten dem Prinzip der geringsten Rechte folgen und nur den 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önnten Sie die folgende Rolle verwenden:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
Dadurch 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 Speicher-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
Wenn Ihre Erweiterung mit... interagiert | Weisen Sie eine dieser Rollen zu... |
---|---|
Cloud Firestore | datastore.importExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
Cloud-Speicher für Firebase | storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
Firebase-App-Verteilung | firebaseappdistro.admin firebaseappdistro.viewer |
Firebase-Authentifizierung | firebaseauth.admin firebaseauth.viewer |
Firebase A/B-Tests | 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-Leistungsüberwachung | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
Firebase-Echtzeitdatenbank | 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 dieser Rollen zu... |
---|---|
Aktionen | Aktionen.Admin Aktionen.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 |
Hangout-Chats | chat.besitzer chat.reader |
Cloud-Asset | cloudasset.owner cloudasset.viewer |
Cloud-Datenfusion | datafusion.admin datafusion.viewer |
Cloud-Debugger | clouddebugger.agent clouddebugger.user |
Cloud-Funktionen | 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-Planer | cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Cloud-Sicherheitsscanner | cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL | cloudql.client cloudql.editor cloudql.viewer |
Cloud Trace | cloudtrace.admin cloudtrace.agent cloudtrace.user |
Datenfluss | dataflow.developer dataflow.viewer dataflow.worker |
Dialogfluss | dialogflow.admin dialogflow.client dialogflow.reader |
Verhinderung von Datenverlust in der Cloud | dlp.reader dlp.user |
Fehler melden | errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc | eventarc.publisher eventarc.eventReceiver |
Cloud-Dateispeicher | Dateieditor file.viewer |
Protokollierung | logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Maschinelles Lernen | ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
Überwachung | Überwachungseditor Monitoring.metricWriter Überwachung.Viewer |
KI-Notizbücher | notizbücher.admin Notebooks.Viewer |
Pub/Sub | pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis | redis.editor redis.viewer |
Cloud Run | run.invoker |
Quelle | Quelle.Leser Quelle.Autor |
Cloud Spanner | spanner.databaseAdmin spanner.databaseReader spanner.databaseUser schraubenschlüssel.viewer |
Servicenutzung | serviceusage.apiKeysMetadataViewer |
Cloud-Speicherübertragungsdienst | storagetransfer.user storagetransfer.viewer |
Cloud-Transcoder | transcoder.admin transcoder.viewer |
Vertex-KI | aiplatform.user |
Andere | Identitytoolkit.admin Identitytoolkit.viewer |