Damit eine Erweiterung die angegebenen Aktionen ausführen kann, gewährt Firebase jede Instanz einer installierten Erweiterung beschränkten Zugriff auf das Projekt und seine Daten über eine Dienstkonto.
Was ist ein Dienstkonto?
Ein Dienstkonto ist eine spezielle Art von Google-Nutzerkonto. Sie repräsentiert eine nicht menschliche Person, autorisierte API-Aufrufe an Google-Dienste senden.
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. Bei der Deinstallation einer Erweiterungsinstanz löscht Firebase die des Dienstkontos der Erweiterung.
Dienstkonten, die für Erweiterungen erstellt wurden, haben das folgende Format:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase beschränkt den Zugriff einer Erweiterung auf ein Projekt und dessen Daten, indem
Bestimmte Rollen (Berechtigungspakete)
mit dem Dienstkonto der Erweiterung. Beim Erstellen einer Erweiterung
welche Rollen die Erweiterung benötigt, listen Sie diese auf
Rollen und den Grund dafür, warum die Erweiterung diese Rollen in Ihrem extension.yaml
benötigt
-Datei (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, die von jeder Rolle gewährt wird. Wenn Ihre Erweiterung mehr Rollen erfordert ist die Wahrscheinlichkeit geringer, dass sie es installieren.
So stellen Sie fest, ob Ihre Erweiterung mit einem Produkt interagiert:
Wenn Ihre Erweiterung mit einem Produkt interagiert, müssen Sie dem Produkt auf dieses Produkt zugreifen können.
Wenn Ihre Erweiterung beispielsweise Daten in eine Realtime Database-Instanz schreibt, benötigt Ihre Erweiterung die Rolle Realtime Database (insbesondere
firebasedatabase.admin
.Wenn Ihre Erweiterung nur auf ein ausgelöstes Ereignis von einem Produkt hinzufügen, dann muss für die Erweiterung keine Rolle erforderlich sein, mit diesem Produkt.
Wenn Ihre Erweiterung beispielsweise beim Schreiben in eine Realtime Database-Datei ausgelöst wird, (aber nichts in die Datenbank schreibt), ist Ihr für die Erweiterung keine die Rolle Realtime Database.
Nachdem Sie ermittelt haben, mit welchen Produkten Ihre Erweiterung interagiert, und müssen entscheiden, welche Rolle für die jeweilige Interaktion erforderlich ist. Einige bieten Produkte unterschiedliche Rollen je nach Aktion oder Aktionsgruppe durchgeführt wurde.
Angenommen, Ihre Erweiterung interagiert mit einem Cloud Storage-Bucket. Mit der Rolle
storage.objectCreator
kann die Erweiterung Erstellen Sie ein Objekt in einem Cloud Storage-Bucket. Die Rolle lässt das Objekt aber nicht zu. -Erweiterung, um Objekte anzusehen, zu löschen oder zu überschreiben. Um die Erweiterung für diese zusätzlichen Aktionen ausführen möchten, müssen Sie den Rollestorage.objectAdmin
.
Im Abschnitt unten auf dieser Seite finden Sie alle unterstützten Rollen, die Sie dem Dienst Ihrer Erweiterung zuweisen können. Konto. Informationen zur Beschreibung der einzelnen Rollen und zu den gewährten Berechtigungen finden Sie unter der Firebase-Dokumentation oder Google Cloud-Dokumentation. Sie können Rollen auch im Bereich IAM & Verwaltung der Google Cloud Console aufrufen.
So weisen Sie einer Erweiterung Rollen zu
Listen Sie im Abschnitt roles
die IAM-Rollen auf, die für die Ausführung Ihrer Erweiterung erforderlich sind.
Ihrer extension.yaml
-Datei.
Hier ein Beispiel für eine Erweiterung, die einen bestimmten Pfad Firebase Realtime Database. Wenn die Erweiterung ausgelöst wird, wird ein Nutzerkonto aktualisiert. (Interaktion mit Firebase Authentication) und sendet eine Benachrichtigung (Interaktion mit Firebase Cloud Messaging). Beachten Sie Folgendes:
- Obwohl die Erweiterung von einem Realtime Database-Ereignis auslöset,
Rolle
firebasedatabase.admin
ist nicht aufgeführt (Zuhören gilt nicht als interaction). - Da die Erweiterung mit Authentication und Cloud Messaging interagiert, gilt Folgendes:
der Erweiterung Rollen für den Zugriff auf diese Produkte benötigt (
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 einer Person eine Rolle zuzuweisen
Dienstkonto der Erweiterung:
Feld | Typ | Beschreibung |
---|---|---|
role (erforderlich) |
String | Der Name der IAM-Rolle, die für den Erweiterung |
reason (erforderlich) |
String |
Kurze Beschreibung des Grundes, warum die Erweiterung Zugriff benötigt gewährt durch die Rolle Geben Sie genügend Details an, damit Nutzer nachvollziehen können, wie die Rolle in der Erweiterung verwendet wird. |
resource (optional) |
String |
Der IAM-Richtlinie der Ressource, der diese Rolle hinzugefügt werden soll. Bei Auslassung
ist standardmäßig
Unterstützte Werte sind |
Den Umfang der Rollen reduzieren
Erweiterungen sollten dem Prinzip der geringsten Berechtigung folgen und nur Anfragen
Zugriff auf die Ressourcen haben,
die sie benötigen.
Sie können den Zugriff einer Erweiterung über das Feld „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 Bucket zugreifen, den sie benötigt, und nicht andere am 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 aufgeführt Produkte. 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... | Eine dieser Rollen zuweisen... |
---|---|
Cloud Firestore |
datastore.importExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
Cloud Storage for Firebase |
speicher.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
Interaktion der Erweiterung mit... | Eine dieser Rollen zuweisen... |
---|---|
Aktionen |
Actions.Admin Aktionen.Betrachter |
Apigee |
Apigee.analyticsAgent Apigee.analyticsEditor Apigee.analyticsViewer Apigee.apiCreator Apigee.deployer Apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
App Engine |
.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer |
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.inhaber chat.reader |
Cloudasset |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
Cloud Debugger |
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.nutzer |
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.nutzer |
Dataflow |
dataflow.developer dataflow.viewer dataflow.worker |
Dialogflow |
dialogflow.admin dialogflow.client dialogflow.reader |
Cloud Data Loss Prevention |
dlp.reader dlp.nutzer |
Error Reporting |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
datei.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 Identity Toolkit.viewer |