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 permet de contrôler plus finement l'accès à des ressources Google Cloud Platform spécifiques et d'empêcher 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, lisez 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
datastore.entities.update
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
datastore.entities.update
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
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
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
datastore.entities.update
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
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
delete datastore.backupSchedules.delete
projects.locations.backups
get datastore.backups.get
list datastore.backups.list
delete 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
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.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 planifications de sauvegardes 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, et pas nécessairement en les restaurant à partir d'une sauvegarde.

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.

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.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 Supprimez 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 Obtenir des informations sur une planification de sauvegarde
datastore.backupSchedules.list Répertoriez les planifications de sauvegarde disponibles.
datastore.backupSchedules.create Créez un planning de sauvegarde.
datastore.backupSchedules.update Mettre à jour un planning de sauvegarde
datastore.backupSchedules.delete Supprimez une planification de sauvegarde.
Nom de l'autorisation de sauvegarde Description
datastore.backups.get Obtenir des détails 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.

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 la page 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 contrôle des accès conditionnel.

Par exemple, la condition suivante attribue le rôle datastore.user à un 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 la section Configurer un accès temporaire.

Pour savoir comment configurer des conditions IAM pour l'accès à une ou plusieurs bases de données, consultez la page 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 Google Cloud CLI plutôt que la console Google Cloud, car le rôle firebaserules.system est masqué par défaut dans la console.

Étape suivante