Sicherheit für Server-Clientbibliotheken
Wenn Sie die Server-Clientbibliotheken für Firestore verwenden, können Sie den Zugriff auf Ihre Ressourcen mit Identity and Access Management (IAM) verwalten. Mit IAM können Sie den Zugriff auf bestimmte Google Cloud Platform-Ressourcen detaillierter steuern und unerwünschten Zugriff auf andere Ressourcen verhindern. Auf dieser Seite werden die IAM-Berechtigungen und -Rollen für Firestore beschrieben. Eine ausführliche Beschreibung von IAM finden Sie in der IAM-Dokumentation.
Durch IAM können Sie das Prinzip der geringsten Berechtigung anwenden und somit nur den notwendigen Zugriff auf Ihre Ressourcen gewähren.
In IAM können Sie steuern, wer (Nutzer) was (Rolle) für welche Ressourcen hat. Dazu legen Sie die IAM-Richtlinien fest.
IAM-Richtlinien gewähren einem Nutzer eine oder mehrere Rollen und dadurch bestimmte Berechtigungen. Sie können beispielsweise einem Nutzer die Rolle datastore.indexAdmin
zuweisen, mit der er Indexe erstellen, ändern, löschen, auflisten oder anzeigen kann.
Berechtigungen und Rollen
In diesem Abschnitt werden die Berechtigungen und Rollen zusammengefasst, die Firestore unterstützt.
Erforderliche Berechtigungen für API-Methoden
In der folgenden Tabelle sind die Berechtigungen aufgeführt, die der Aufrufer haben muss, um die einzelnen Aktionen auszuführen:
Methode | Erforderliche Berechtigungen |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
beginTransaction |
datastore.databases.get |
commit aktualisieren oder transformieren, wobei exists-Vorbedingung auf false festgelegt ist |
datastore.entities.create |
commit aktualisieren oder transformieren, wobei exists-Vorbedingung auf true festgelegt ist
| datastore.entities.update |
commit -Update oder -Transformation ohne Vorbedingung
| datastore.entities.create |
commit löschen |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.get datastore.entities.list |
listCollectionIds |
datastore.entities.list |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runQuery |
datastore.entities.get |
write (RPC) aktualisieren oder transformieren, wobei exists-Vorbedingung auf false festgelegt ist |
datastore.entities.create |
write (RPC) aktualisieren oder transformieren, wobei exists-Vorbedingung auf true festgelegt ist |
datastore.entities.update |
write (RPC) -Update oder -Transformation ohne Vorbedingung |
datastore.entities.create |
write (RPC) löschen
| datastore.entities.delete |
projects.databases.indexes |
|
create |
datastore.indexes.create |
delete |
datastore.indexes.delete |
get |
datastore.indexes.get |
list |
datastore.indexes.list |
projects.databases |
|
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
Vordefinierte Rollen
Bei IAM erfordert jede API-Methode in Firestore, dass das Konto, das die API-Anfrage stellt, die entsprechenden Berechtigungen zur Verwendung der Ressource hat. Berechtigungen werden durch Festlegen von Richtlinien erteilt, die einem Nutzer, einer Gruppe oder einem Dienstkonto Rollen zuweisen. Zusätzlich zu den einfachen Rollen Inhaber, Bearbeiter und Betrachter können Sie den Nutzern Ihres Projekts Firestore-Rollen zuweisen.
In der folgenden Tabelle sind die Firestore-IAM-Rollen aufgeführt. Sie können einem Nutzer, einer Gruppe oder einem Dienstkonto mehrere Rollen zuweisen.
Rolle | Berechtigungen | Beschreibung |
---|---|---|
roles/datastore.owner |
appengine.applications.get datastore.* resourcemanager.projects.get resourcemanager.projects.list |
Vollständiger Zugriff auf Firestore. |
roles/datastore.user |
appengine.applications.get datastore.databases.get datastore.entities.* datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
Lese-/Schreibzugriff auf Daten in einer Firestore-Datenbank. Gedacht für Anwendungsentwickler und Dienstkonten. |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get datastore.entities.get datastore.entities.list datastore.indexes.get datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
Lesezugriff auf alle Firestore-Ressourcen. |
roles/datastore.importExportAdmin |
appengine.applications.get datastore.databases.export datastore.databases.import datastore.operations.cancel datastore.operations.get datastore.operations.list resourcemanager.projects.get resourcemanager.projects.list |
Vollständiger Zugriff, um Importe und Exporte zu verwalten. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Uneingeschränkter Zugriff zum Verwalten von Indexdefinitionen. |
Benutzerdefinierte Rollen
Wenn die vordefinierten Rollen Ihren Geschäftsanforderungen nicht gerecht werden, können Sie Ihre eigenen benutzerdefinierten Rollen mit Berechtigungen definieren, die Sie angeben:
Berechtigungen
In der folgenden Tabelle sind die Berechtigungen aufgeführt, die Firestore unterstützt.
Name der Datenbankberechtigung | Beschreibung | |
---|---|---|
datastore.databases.get |
Transaktion starten oder rückgängig machen Metadaten aus einer Datenbank lesen. |
|
Name der Entitätsberechtigung | Beschreibung | |
datastore.entities.create |
Erstellen Sie ein Dokument. | |
datastore.entities.delete |
Löschen Sie ein Dokument. | |
datastore.entities.get |
Lesen Sie ein Dokument. | |
datastore.entities.list |
Die Namen von Dokumenten in einem Projekt auflisten. ( datastore.entities.get ist für den Zugriff auf die Dokumentdaten erforderlich.) |
|
datastore.entities.update |
Dokument aktualisieren | |
Name der Indexberechtigung | Beschreibung | |
datastore.indexes.create |
Index erstellen | |
datastore.indexes.delete |
Index löschen | |
datastore.indexes.get |
Metadaten aus einem Index lesen. | |
datastore.indexes.list |
Listen Sie die Indexe in einem Projekt auf. | |
datastore.indexes.update |
Index aktualisieren | |
Name der Projektberechtigung | Beschreibung | |
resourcemanager.projects.get |
Ressourcen im Projekt ansehen | |
resourcemanager.projects.list |
Eigene Projekte auflisten | |
Name der Berechtigung zur Standortermittlung | Beschreibung | |
datastore.locations.get |
Details zu einem Datenbankspeicherort abrufen. Erforderlich, um eine neue Datenbank zu erstellen. | |
datastore.locations.list |
Verfügbare Datenbankspeicherorte auflisten Erforderlich, um eine neue Datenbank zu erstellen. |
Latenz der Rollenänderung
Firestore speichert IAM-Berechtigungen 5 Minuten lang im Cache. Es dauert also bis zu 5 Minuten, bis eine Rollenänderung wirksam wird.
Firestore-IAM verwalten
Sie können IAM-Richtlinien mithilfe der Google Cloud Console, der IAM API oder des gcloud
-Befehlszeilentools abrufen und festlegen. Weitere Informationen finden Sie unter Zugriff für Projektmitglieder zuweisen, ändern und widerrufen.
Abhängigkeit einer Sicherheitsregel zu IAM
Die Firestore-Sicherheitsregeln für Mobil-/Webclients hängen von dem folgenden Dienstkonto und der folgenden IAM-Bindung ab:
Dienstkonto | IAM-Rolle |
---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Dieses Dienstkonto wird von Firebase automatisch eingerichtet. Wenn Sie die Rolle firebaserules.system
aus diesem Dienstkonto entfernen, lehnen die Sicherheitsregeln alle Anfragen ab. Verwenden Sie den folgenden Befehl der gcloud
-Befehlszeile, um diese IAM-Bindung wiederherzustellen:
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
Informationen zum Ermitteln von project_id und project_number finden Sie unter Projekte identifizieren.
Verwenden Sie die Google Cloud-Befehlszeile anstelle der Cloud Console, da die Rolle firebaserules.system
in der Console standardmäßig ausgeblendet ist.