Sicherheit für Server-Clientbibliotheken
Wenn Sie die Server-Clientbibliotheken für Firestore verwenden, steuern Sie den Zugriff auf Ihre Ressourcen mit der Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM). Mit IAM gewähren Sie detaillierteren Zugriff auf bestimmte Google Cloud Platform-Ressourcen und verhindern unerwünschten Zugriff auf andere Ressourcen. Auf dieser Seite werden die IAM-Berechtigungen und -Rollen für Firestore beschrieben. Eine ausführliche Beschreibung des IAM finden Sie in der IAM-Dokumentation.
Durch IAM haben Sie die Möglichkeit, das Prinzip der geringsten Berechtigung anzuwenden und somit nur den notwendigen Zugriff auf Ihre Ressourcen zu gewähren.
Durch das Festlegen von IAM-Richtlinien können Sie steuern, wer (Nutzer) welche (Rolle) Berechtigungen für welche Ressourcen hat.
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, wodurch der Nutzer Indexe erstellen, ändern, löschen, auflisten oder ansehen kann.
Berechtigungen und Rollen
In diesem Abschnitt werden die Berechtigungen und Rollen zusammengefasst, die von Firestore unterstützt werden.
Erforderliche Berechtigungen für API-Methoden
In der folgenden Tabelle sind die Berechtigungen aufgeführt, die der Aufrufer zur Ausführung der einzelnen Aktionen benötigt:
Methode | Erforderliche Berechtigungen |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
beginTransaction |
datastore.databases.get |
commit -Aktualisieren oder -Transformieren, wobei exists-Vorbedingung false ist |
datastore.entities.create |
commit -Aktualisieren oder -Transformieren, wobei exists-Vorbedingung true ist
| datastore.entities.update |
commit -Aktualisieren oder -Transformieren ohne Vorbedingung
| datastore.entities.create |
commit -Löschung |
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 false ist |
datastore.entities.create |
write (RPC) -Aktualisieren oder -Transformieren, wobei exists-Vorbedingung true ist |
datastore.entities.update |
write (RPC) -Aktualisieren oder -Transformieren ohne Vorbedingung |
datastore.entities.create |
write (RPC) -Löschung
| 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 durchführt, die entsprechenden Berechtigungen zur Verwendung der Ressource hat. Berechtigungen werden durch die Festlegung von Richtlinien gewährt, die wiederum einem Nutzer, einer Gruppe oder einem Dienstkonto Rollen zuweist. 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 |
Vollzugriff auf Firestore. |
roles/datastore.user |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.entities.* datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
Lese- und Schreibzugriff auf Daten in einer Firestore-Datenbank. Für Anwendungsentwickler und Dienstkonten bestimmt. |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata 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.getMetadata datastore.databases.import datastore.operations.cancel datastore.operations.get datastore.operations.list resourcemanager.projects.get resourcemanager.projects.list |
Vollzugriff für die Verwaltung von Importen und Exporten. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Vollzugriff zurVerwaltung von Indexdefinitionen. |
Benutzerdefinierte Rollen
Wenn die vordefinierten Rollen für Ihre geschäftlichen Anforderungen nicht ausreichen, können Sie eigene benutzerdefinierte Rollen mit selbst definierten Berechtigungen festlegen.
- Erfahren Sie mehr über benutzerdefinierte Rollen.
- Benutzerdefinierte Rollen erstellen und verwalten.
Berechtigungen
In der folgenden Tabelle sind die von Firestore unterstützten Berechtigungen aufgeführt.
Name der Datenbankberechtigung | Beschreibung | |
---|---|---|
datastore.databases.get |
Transaktion beginnen oder Rollback der Transaktion durchführen. | |
datastore.databases.import |
Entitäten in eine Datenbank importieren. | |
datastore.databases.export |
Entitäten aus einer Datenbank exportieren. | |
datastore.databases.getMetadata |
Metadaten aus einer Datenbank lesen. | |
datastore.databases.list |
Datenbanken in einem Projekt auflisten. | |
datastore.databases.create |
Datenbank erstellen | |
datastore.databases.update |
Datenbank aktualisieren. | |
Name der Entitätsberechtigungen | Beschreibung | |
datastore.entities.create |
Dokument erstellen. | |
datastore.entities.delete |
Dokument löschen. | |
datastore.entities.get |
Dokument lesen. | |
datastore.entities.list |
Listen Sie die Namen der Dokumente in einem Projekt auf. ( datastore.entities.get ist erforderlich, um auf die Dokumentdaten zugreifen zu können.) |
|
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 |
Indexe in einem Projekt auflisten. | |
datastore.indexes.update |
Index aktualisieren. | |
Name der Vorgangsberechtigung | Beschreibung | |
datastore.operations.cancel |
Einen lange laufenden Vorgang abbrechen. | |
datastore.operations.delete |
Einen lange laufenden Vorgang löschen. | |
datastore.operations.get |
Ruft den letzten Status eines lange laufende Vorgangs ab. | |
datastore.operations.list |
Lange laufende Vorgänge auflisten. | |
Name der Projektberechtigung | Beschreibung | |
resourcemanager.projects.get |
Ressourcen im Projekt durchsuchen. | |
resourcemanager.projects.list |
Eigene Projekte auflisten. | |
Name der Standortberechtigung | Beschreibung | |
datastore.locations.get |
Rufen Sie Details zu einem Datenbankspeicherort ab. Dies ist erforderlich zum Erstellen einer neuen Datenbank. | |
datastore.locations.list |
Listen Sie die verfügbaren Datenbankspeicherorte auf. Dies ist erforderlich zum Erstellen einer neuen Datenbank. |
Latenz der Rollenänderung
Firestore speichert IAM-Berechtigungen fünf Minuten lang im Cache. Es dauert also bis zu fünf Minuten, bis eine Rollenänderung wirksam wird.
Firestore-IAM verwalten
Sie können IAM-Richtlinien über die Google Cloud Console, die IAM API oder das gcloud
-Befehlszeilentool abrufen und festlegen. Details hierzu finden Sie unter Zugriff für Projektmitglieder zuweisen, ändern und widerrufen.
IAM-Bedingungen
Mit IAM-Bedingungen können Sie eine bedingte Zugriffssteuerung definieren und durchsetzen.
In der folgenden Bedingung wird dem Hauptkonto beispielsweise die Rolle datastore.user
bis zu einem bestimmten Datum zugewiesen:
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
Informationen zum Definieren von IAM-Bedingungen für temporären Zugriff finden Sie unter Temporären Zugriff konfigurieren.
Abhängigkeiten von Sicherheitsregeln in IAM
Die Firestore-Sicherheitsregeln für mobile Clients oder Webclients hängen vom folgenden Dienstkonto und der folgenden IAM-Bindung ab:
Dienstkonto | IAM-Rolle |
---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase richtet dieses Dienstkonto automatisch für Sie ein. Wenn Sie die Rolle firebaserules.system
aus diesem Dienstkonto entfernen, lehnen Ihre Sicherheitsregeln alle Anfragen ab. Verwenden Sie den folgenden gcloud CLI-Befehl, 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 CLI anstelle der Google Cloud Console, da die Rolle firebaserules.system
in der Console standardmäßig ausgeblendet ist.