Sécurité pour les bibliothèques clientes de serveur
Lorsque vous utilisez les bibliothèques clientes de serveur pour Firestore, vous pouvez gérer l'accès à vos ressources à l'aide d'Identity and Access Management (IAM). IAM vous permet d'accorder un accès plus précis à des ressources Google Cloud spécifiques et empêche tout accès indésirable à d'autres ressources. Cette page décrit les autorisations et les rôles IAM pour Firestore. Pour une description détaillée d'IAM, consultez la documentation IAM.
IAM vous permet d'adopter le principe de sécurité du moindre privilège afin de n'accorder que l'accès nécessaire à vos ressources.
En définissant des stratégies IAM, vous pouvez contrôler qui (utilisateur) dispose de quelle autorisation (rôle) et sur quelles ressources.
Les stratégies IAM attribuent un ou plusieurs rôles à un utilisateur, ce qui lui confère certaines autorisations. Par exemple, vous pouvez attribuer le rôle datastore.indexAdmin
à un utilisateur, ce qui lui permet de créer, modifier, supprimer, répertorier ou afficher des index.
Autorisations et rôles
Dans cette section, vous trouverez un récapitulatif des autorisations et des rôles pris en charge par Firestore.
Autorisations requises pour les méthodes API
Le tableau suivant répertorie les autorisations dont l'appelant doit disposer pour effectuer chaque action :
Méthode | Autorisations requises |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
Modification ou transformation batchWrite avec la précondition exists valant false |
datastore.entities.create |
Modification ou transformation batchWrite avec la précondition exists valant true |
datastore.entities.create |
Modification ou transformation de batchWrite sans précondition |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
Modification ou transformation commit avec la précondition exists valant false |
datastore.entities.create |
Modification ou transformation commit avec la précondition exists valant true |
datastore.entities.update |
Modification ou transformation de commit sans précondition |
datastore.entities.create |
Suppression de commit |
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 |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
Modification ou transformation write (RPC) avec la précondition exists valant false |
datastore.entities.create |
Modification ou transformation write (RPC) avec la précondition exists valant true |
datastore.entities.update |
Modification ou transformation de write (RPC) sans précondition |
datastore.entities.create |
Suppression de write (RPC) |
datastore.entities.delete |
projects.databases.indexes |
|
create |
datastore.indexes.create |
delete |
datastore.indexes.delete |
get |
datastore.indexes.get |
list |
datastore.indexes.list |
projects.databases |
|
create |
datastore.databases.create Si votre requête
Si vous souhaitez vérifier si les liaisons de balises sont correctement définies en listant les liaisons, les autorisations supplémentaires suivantes sont requises :
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
restaurer | datastore.backups.restoreDatabase |
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 |
supprimer | datastore.backupSchedules.delete |
projects.locations.backups |
|
get | datastore.backups.get |
list | datastore.backups.list |
supprimer | datastore.backups.delete |
Rôles prédéfinis
Pour pouvoir utiliser toutes les méthodes de l'API avec Firestore dans IAM, le compte effectuant les requêtes d'API doit disposer d'autorisations appropriées pour utiliser la ressource. Ces autorisations sont attribuées en définissant des stratégies qui accordent des rôles à un utilisateur, un groupe ou un compte de service. En plus des rôles primitifs Propriétaire, Éditeur et Lecteur, vous pouvez attribuer des rôles Firestore aux utilisateurs de votre projet.
Le tableau suivant répertorie les rôles IAM de Firestore. Vous pouvez attribuer plusieurs rôles à un utilisateur, un groupe ou un compte de service.
Rôle | Autorisations | Description |
---|---|---|
roles/datastore.owner |
appengine.applications.get datastore.* resourcemanager.projects.get resourcemanager.projects.list |
Accès complet à Firestore. |
roles/datastore.user |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.databases.list datastore.entities.* datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
Accès en lecture et en écriture aux données d'une base de données Firestore. Destiné aux développeurs d'applications et aux comptes de service. |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.databases.list 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 datastore.insights.get |
Accès en lecture à toutes les ressources Firestore. |
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 |
Accès complet pour gérer les importations et les exportations. |
roles/datastore.bulkAdmin |
resourcemanager.projects.get resourcemanager.projects.list datastore.databases.getMetadata datastore.databases.bulkDelete datastore.operations.cancel datastore.operations.get datastore.operations.list |
Accès complet pour gérer les opérations groupées. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Accès complet pour gérer les définitions des index. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadata datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list resourcemanager.projects.get resourcemanager.projects.list |
Accès complet aux analyses Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.get datastore.backupSchedules.list |
Accès en lecture aux planifications de sauvegardes dans une base de données Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.get datastore.backupSchedules.list datastore.backupSchedules.create datastore.backupSchedules.update datastore.backupSchedules.delete datastore.databases.list datastore.databases.getMetadata |
Accès complet aux plannings de sauvegarde dans une base de données Firestore. |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Accès en lecture aux informations de sauvegarde dans un emplacement Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Accès complet aux sauvegardes dans un emplacement Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.get datastore.backups.list datastore.backups.restoreDatabase datastore.databases.list datastore.databases.create datastore.databases.getMetadata datastore.operations.list datastore.operations.get |
Possibilité de restaurer une sauvegarde Firestore dans une nouvelle base de données. Ce rôle permet également de créer des bases de données, pas nécessairement en restaurant à partir d'une sauvegarde. |
roles/datastore.statisticsViewer |
resourcemanager.projects.get resourcemanager.projects.list datastore.databases.getMetadata datastore.insights.get datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list datastore.statistics.list datastore.statistics.get |
Accès en lecture aux insights, aux statistiques et aux analyses Key Visualizer. |
Rôles personnalisés
Si les rôles prédéfinis ne répondent pas aux besoins de votre entreprise, vous pouvez définir vos propres rôles personnalisés et leur accorder les autorisations de votre choix.
Rôles requis pour créer et gérer des tags
Si un tag est représenté dans les actions de création ou de restauration, certains rôles sont requis. Pour en savoir plus sur la création de paires clé/valeur de tag avant de les associer aux ressources de base de données, consultez Créer et gérer des tags.
Les autorisations listées ci-dessous sont requises.
Afficher les tags
datastore.databases.listTagBindings
datastore.databases.listEffectiveTags
Gérer les tags sur les ressources
L'autorisation suivante est requise pour la ressource de base de données à laquelle vous associez la valeur de tag.
datastore.databases.createTagBinding
Autorisations
Le tableau suivant répertorie les autorisations compatibles avec Firestore.
Nom de l'autorisation pour la base de données | Description | |
---|---|---|
datastore.databases.get |
Commence ou annule une transaction. | |
datastore.databases.import |
Importe des entités vers une base de données. | |
datastore.databases.export |
Exporte des entités depuis une base de données. | |
datastore.databases.bulkDelete |
Supprime des entités de manière groupée depuis une base de données. | |
datastore.databases.getMetadata |
Lit les métadonnées depuis une base de données. | |
datastore.databases.list |
Répertorier les bases de données d'un projet. | |
datastore.databases.create |
Créer une base de données | |
datastore.databases.update |
Mettre à jour une base de données | |
datastore.databases.delete |
Supprimer une base de données | |
datastore.databases.createTagBinding |
Créez une liaison de tag pour une base de données. | |
datastore.databases.deleteTagBinding |
Supprimez une liaison de tag pour une base de données. | |
datastore.databases.listTagBindings |
Répertorier toutes les liaisons de tags pour une base de données. | |
datastore.databases.listEffectiveTagBindings |
Répertorier les liaisons de tags effectives pour une base de données. | |
Nom de l'autorisation pour l'entité | Description | |
datastore.entities.create |
Créer un document | |
datastore.entities.delete |
Supprimer un document | |
datastore.entities.get |
Lire un document | |
datastore.entities.list |
Répertorier les noms des documents d'un projet. (Pour accéder aux données du document, datastore.entities.get est requis.) |
|
datastore.entities.update |
Modifier un document | |
Nom de l'autorisation pour l'index | Description | |
datastore.indexes.create |
Créer un index. | |
datastore.indexes.delete |
Supprimer un index. | |
datastore.indexes.get |
Lire les métadonnées d'un index. | |
datastore.indexes.list |
Répertorier les index dans un projet. | |
datastore.indexes.update |
Modifier un index. | |
Nom de l'autorisation pour l'opération | Description | |
datastore.operations.cancel |
Annule une opération de longue durée. | |
datastore.operations.delete |
Supprime une opération de longue durée. | |
datastore.operations.get |
Récupère le dernier état d'une opération de longue durée. | |
datastore.operations.list |
Répertorie les opérations de longue durée. | |
Nom de l'autorisation pour le projet | Description | |
resourcemanager.projects.get |
Parcourt les ressources du projet. | |
resourcemanager.projects.list |
Répertorier les projets dont on est propriétaire. | |
Nom de l'autorisation relative aux emplacements | Description | |
datastore.locations.get |
Obtenir des détails sur un emplacement de base de données. Obligatoire pour créer une base de données. | |
datastore.locations.list |
Liste les emplacements de base de données disponibles. Obligatoire pour créer une base de données. | |
Nom de l'autorisation Key Visualizer | Description | |
datastore.keyVisualizerScans.get |
Obtenez des informations sur les analyses Key Visualizer. | |
datastore.keyVisualizerScans.list |
Répertorier les analyses Key Visualizer disponibles. | |
Nom de l'autorisation de programmation de sauvegarde | Description | |
datastore.backupSchedules.get |
Obtenez des informations sur une programmation de sauvegarde. | |
datastore.backupSchedules.list |
Lister les programmations de sauvegarde disponibles. | |
datastore.backupSchedules.create |
Créez une programmation de sauvegarde. | |
datastore.backupSchedules.update |
Mettre à jour un planning de sauvegarde | |
datastore.backupSchedules.delete |
Supprimer une planification de sauvegarde. | |
Nom de l'autorisation de sauvegarde | Description | |
datastore.backups.get |
Obtenez des informations sur une sauvegarde. | |
datastore.backups.list |
Répertoriez les sauvegardes disponibles. | |
datastore.backups.delete |
Supprimer une sauvegarde | |
datastore.backups.restoreDatabase |
Restaurer une base de données à partir d'une sauvegarde. | |
Nom de l'autorisation Insights | Description | |
datastore.insights.get |
Obtenir des insights sur une ressource |
Latence de modification d'un rôle
Firestore met en cache les autorisations IAM pendant cinq minutes. La modification d'un rôle est appliquée dans ce même laps de temps.
Gérer Firestore IAM
Vous pouvez obtenir et définir des stratégies IAM à l'aide de la console Google Cloud , de l'API IAM ou de l'outil de ligne de commande gcloud
. Pour en savoir plus, consultez Accorder, modifier et révoquer les accès à des ressources.
Configurer les autorisations d'accès conditionnel
Vous pouvez utiliser les conditions IAM pour définir et appliquer un contrôle des accès conditionnel.
Par exemple, la condition suivante attribue le rôle datastore.user
à un compte principal jusqu'à une date spécifiée :
{
"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')"
}
}
Pour savoir comment définir des conditions IAM pour un accès temporaire, consultez Configurer un accès temporaire.
Pour savoir comment configurer des conditions IAM pour accéder à une ou plusieurs bases de données, consultez Configurer des conditions d'accès aux bases de données.
Dépendance des règles de sécurité dans IAM
Les règles de sécurité Firestore pour les clients mobiles/Web dépendent du compte de service et de la liaison IAM suivants :
Compte de service | Rôle IAM |
---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase configure automatiquement ce compte de service pour vous. Si vous supprimez le rôle firebaserules.system
de ce compte de service, vos règles de sécurité refuseront toutes les requêtes. Pour restaurer cette liaison IAM, utilisez la commande gcloud CLI suivante :
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
Pour déterminer votre project_id et votre project_number, consultez la section Identifier des projets.
Utilisez plutôt Google Cloud CLI que la console Google Cloud , car le rôle firebaserules.system
est masqué par défaut dans la console.
Étapes suivantes
- Apprenez-en plus sur IAM.
- Accorder des rôles IAM
- Obtenez plus d'informations sur l'authentification.