Richten Sie den entsprechenden Zugriff für eine Nebenstelle ein

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.

  1. 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.

  2. 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 Rolle storage.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 projects/${project_id} verwendet.

Unterstützte Werte sind projects/* und projects/*/buckets/* .

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