Wenn Sie die Server-Clientbibliotheken für Cloud 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-Ressourcen genauer steuern und unerwünschten Zugriff auf andere Ressourcen verhindern. Auf dieser Seite werden die IAM-Berechtigungen und -Rollen für Cloud Firestore beschrieben. Eine ausführliche Beschreibung von 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 Cloud Firestore unterstützt.
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 |
batchWrite-Aktualisieren oder -Transformieren, wobei exists-Vorbedingung false ist |
datastore.entities.create |
batchWrite-Aktualisieren oder -Transformieren, wobei exists-Vorbedingung true ist |
datastore.entities.create |
batchWrite-Aktualisieren oder -Transformieren ohne Vorbedingung |
datastore.entities.create |
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.getdatastore.entities.list |
listCollectionIds |
datastore.entities.list |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
executePipeline (RPC)mit einer der folgenden Phasen: - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
executePipeline (RPC)mit einer der folgenden Phasen: - documents(...) |
datastore.entities.get
|
executePipeline (RPC)mit einer der folgenden Phasen: - update(...) |
datastore.entities.update
|
executePipeline (RPC)mit einer der folgenden Phasen: - delete(...) |
datastore.entities.delete
|
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.schemas.create |
delete |
datastore.schemas.delete |
get |
datastore.schemas.get |
list |
datastore.schemas.list |
projects.databases |
|
create |
datastore.databases.createWenn Ihre
Wenn Sie prüfen möchten, ob die Tag-Bindungen erfolgreich festgelegt wurden, indem Sie die Bindungen auflisten, sind die folgenden zusätzlichen Berechtigungen erforderlich:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| Wiederherstellen | datastore.backups.restoreDatabase |
clone |
datastore.databases.cloneWenn Ihre
Wenn Sie prüfen möchten, ob die Tag-Bindungen erfolgreich festgelegt wurden, indem Sie die Bindungen auflisten, sind die folgenden zusätzlichen Berechtigungen erforderlich:
|
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
| get | datastore.backupSchedules.get |
| list | datastore.backupSchedules.list |
| create | datastore.backupSchedules.create |
| update | datastore.backupSchedules.update |
| Löschen | datastore.backupSchedules.delete |
projects.locations.backups |
|
| get | datastore.backups.get |
| list | datastore.backups.list |
| Löschen | datastore.backups.delete |
Vordefinierte Rollen
Bei IAM erfordert jede API-Methode in Cloud Firestore, dass das Konto, das die API-Anfrage stellt, über die entsprechenden Berechtigungen zur Verwendung der Ressource verfügt. 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 Cloud Firestore-Rollen zuweisen.
In der folgenden Tabelle sind die Cloud 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.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
Vollzugriff auf Cloud Firestore. |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
Lese-/Schreibzugriff auf Daten in einer Cloud Firestore-Datenbank. Für Anwendungsentwickler und Dienstkonten bestimmt. |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.schemas.getdatastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
Lesezugriff auf alle Cloud Firestore-Ressourcen. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
Vollständiger Zugriff für die Verwaltung von Importen und Exporten. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
Vollständiger Zugriff zum Verwalten von Bulk-Vorgängen. |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
Vollzugriff zurVerwaltung von Indexdefinitionen. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
Vollständiger Zugriff auf Key Visualizer-Scans. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
Lesezugriff auf Zeitpläne für Sicherungen in einer Cloud Firestore-Datenbank. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
Vollständiger Zugriff auf Sicherungszeitpläne in einer Cloud Firestore-Datenbank. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
Lesezugriff auf Sicherungsinformationen an einem Cloud Firestore-Speicherort. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
Vollständiger Zugriff auf Sicherungen an einem Cloud Firestore-Standort. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Möglichkeit, eine Cloud Firestore-Sicherung in einer neuen Datenbank wiederherzustellen. Mit dieser Rolle können auch neue Datenbanken erstellt werden, nicht unbedingt durch Wiederherstellung aus einer Sicherung. |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Möglichkeit, eine Cloud Firestore-Datenbank in eine neue Datenbank zu klonen. Diese Rolle bietet auch die Möglichkeit, neue Datenbanken zu erstellen, nicht unbedingt durch Klonen. |
roles/datastore.statisticsViewer |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
Lesezugriff auf Insights, Statistiken und Key Visualizer-Scans. |
Benutzerdefinierte Rollen
Wenn die vordefinierten Rollen Ihren geschäftlichen Anforderungen nicht gerecht werden, können Sie eigene benutzerdefinierte Rollen mit Berechtigungen definieren, die Sie angeben:
- Erfahren Sie mehr über benutzerdefinierte Rollen.
- Benutzerdefinierte Rollen erstellen und verwalten.
Erforderliche Rollen zum Erstellen und Verwalten von Tags
Wenn ein Tag in Erstellungs- oder Wiederherstellungsaktionen dargestellt wird, sind einige Rollen erforderlich. Weitere Informationen zum Erstellen von Tag-Schlüssel/Wert-Paaren, bevor Sie sie mit den Datenbankressourcen verknüpfen, finden Sie unter Tags erstellen und verwalten.
Die folgenden Berechtigungen sind erforderlich.
Tags aufrufen
datastore.databases.listTagBindingsdatastore.databases.listEffectiveTags
Tags für Ressourcen verwalten
Die folgende Berechtigung ist für die Datenbankressource erforderlich, an die Sie den Tag-Wert anhängen.
datastore.databases.createTagBinding
Berechtigungen
In der folgenden Tabelle sind die Berechtigungen aufgeführt, die von Cloud Firestore unterstützt werden.
| 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.bulkDelete |
Entitäten im Bulk aus einer Datenbank löschen. | |
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. | |
datastore.databases.delete |
Datenbank löschen | |
datastore.databases.clone |
Datenbank klonen | |
datastore.databases.createTagBinding |
Tag-Bindung für eine Datenbank erstellen. | |
datastore.databases.deleteTagBinding |
Tag-Bindung für eine Datenbank löschen. | |
datastore.databases.listTagBindings |
Alle Tag-Bindungen für eine Datenbank auflisten. | |
datastore.databases.listEffectiveTagBindings |
Effektive Tag-Bindungen für eine Datenbank auflisten. | |
| Name der Entitätsberechtigungen | Beschreibung | |
datastore.entities.create |
Dokument erstellen. | |
datastore.entities.delete |
Dokument löschen. | |
datastore.entities.get |
Dokument lesen. | |
datastore.entities.list |
Namen der Dokumente in einem Projekt auflisten. ( datastore.entities.get ist für den Zugriff auf Dokumentdaten erforderlich.) |
|
datastore.entities.update |
Dokument aktualisieren. | |
| Name der Indexberechtigung | Beschreibung | |
datastore.schemas.create |
Index erstellen. | |
datastore.schemas.delete |
Index löschen. | |
datastore.schemas.get |
Metadaten aus einem Index lesen. | |
datastore.schemas.list |
Indexe in einem Projekt auflisten. | |
datastore.schemas.update |
Index aktualisieren. | |
| Name der Vorgangsberechtigung | Beschreibung | |
datastore.operations.cancel |
Vorgang mit langer Ausführungszeit abbrechen | |
datastore.operations.delete |
Vorgang mit langer Ausführungszeit löschen. | |
datastore.operations.get |
Ruft den letzten Status eines Vorgangs mit langer Ausführungszeit ab. | |
datastore.operations.list |
Vorgänge mit langer Ausführungszeit 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. | |
| Name der Berechtigung in Key Visualizer | Beschreibung | |
datastore.keyVisualizerScans.get |
Details zu Key Visualizer-Scans abrufen. | |
datastore.keyVisualizerScans.list |
Verfügbare Key Visualizer-Scans auflisten. | |
| Name der Berechtigung für den Sicherungszeitplan | Beschreibung | |
datastore.backupSchedules.get |
Details zu einem Sicherungszeitplan abrufen. | |
datastore.backupSchedules.list |
Verfügbare Sicherungszeitpläne auflisten. | |
datastore.backupSchedules.create |
Sicherungszeitplan erstellen | |
datastore.backupSchedules.update |
Sicherungszeitplan aktualisieren | |
datastore.backupSchedules.delete |
Sicherungszeitplan löschen | |
| Name der Sicherungsberechtigung | Beschreibung | |
datastore.backups.get |
Details zu einer Sicherung abrufen. | |
datastore.backups.list |
Verfügbare Sicherungen auflisten. | |
datastore.backups.delete |
Eine Sicherung löschen. | |
datastore.backups.restoreDatabase |
Datenbank aus einer Sicherung wiederherstellen. | |
| Name der Insights-Berechtigung | Beschreibung | |
datastore.insights.get |
Statistiken zu einer Ressource abrufen |
Latenz der Rollenänderung
Cloud Firestore speichert IAM-Berechtigungen 5 Minuten lang im Cache. Es dauert also bis zu 5 Minuten, bis eine Rollenänderung wirksam wird.
Cloud Firestore-IAM verwalten
Sie können IAM-Richtlinien mithilfe der Google Cloud Console, der IAM API oder dem gcloud-Befehlszeilentool abrufen und festlegen. Details hierzu finden Sie unter Zugriff für Projektmitglieder zuweisen, ändern und widerrufen.
Berechtigungen für bedingten Zugriff konfigurieren
Mit IAM-Bedingungen können Sie eine bedingte Zugriffssteuerung definieren und erzwingen.
Mit der folgenden Bedingung wird einem Hauptkonto beispielsweise bis zu einem bestimmten Datum die Rolle datastore.user 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 den temporären Zugriff finden Sie unter Temporären Zugriff konfigurieren.
Informationen zum Konfigurieren von IAM-Bedingungen für den Zugriff auf eine oder mehrere Datenbanken finden Sie unter Bedingungen für den Datenbankzugriff konfigurieren.
Abhängigkeiten von Sicherheitsregeln in IAM
Cloud Firestore Security Rules für mobile/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, werden alle Anfragen von Ihren Sicherheitsregeln abgelehnt. 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 das Google Cloud CLI anstelle der Google Cloud Console, da die Rolle firebaserules.system in der Console standardmäßig ausgeblendet ist.