Identity and Access Management (IAM)

Lorsque vous utilisez les bibliothèques clientes de serveur pour Cloud Firestore, vous pouvez gérer l'accès à vos ressources à l'aide d'Identity and Access Management (IAM). IAM vous permet d'attribuer un accès précis à des ressources Google Cloud spécifiques et empêche tout accès non souhaité à d'autres ressources. Cette page décrit les autorisations et les rôles IAM pour Cloud Firestore. Pour obtenir une description détaillée d'IAM, consultez la documentation IAM.

L'IAM vous permet d'adopter le principe de sécurité du moindre privilège afin de n'accorder l'accès qu'aux ressources nécessaires.

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

Cette section récapitule les autorisations et les rôles associés à Cloud 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
executePipeline (RPC)

avec l'une des étapes suivantes :
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
executePipeline (RPC)

avec l'une des étapes suivantes :
- documents(...)
datastore.entities.get
executePipeline (RPC)

avec l'une des étapes suivantes :
- update(...)
datastore.entities.update
executePipeline (RPC)

avec l'une des étapes suivantes :
- delete(...)
datastore.entities.delete
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.schemas.create
delete datastore.schemas.delete
get datastore.schemas.get
list datastore.schemas.list
projects.databases
create datastore.databases.create

Si votre requête create contient une valeur tags, les autorisations supplémentaires suivantes sont requises :

  • datastore.databases.createTagBinding

Si vous souhaitez vérifier que les liaisons de balises sont correctement définies en listant les liaisons, les autorisations supplémentaires suivantes sont requises :

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
restaurer datastore.backups.restoreDatabase
clone datastore.databases.clone

Si votre requête clone contient une valeur tags, les autorisations supplémentaires suivantes sont requises :

  • datastore.databases.createTagBinding

Si vous souhaitez vérifier que les liaisons de balises sont correctement définies en listant les liaisons, les autorisations supplémentaires suivantes sont requises :

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
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

Avec IAM, chaque méthode d'API dans Cloud Firestore nécessite que le compte qui effectue la requête API dispose des 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 les rôles Cloud Firestore aux utilisateurs de votre projet.

Le tableau suivant liste les rôles IAM Cloud 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 à Cloud Firestore.
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
Accès en lecture/écriture aux données d'une base de données Cloud 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.schemas.get
datastore.schemas.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 Cloud 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.schemas.*

datastore.operations.list

datastore.operations.get

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 Cloud 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 Cloud Firestore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Accès en lecture aux informations de sauvegarde dans un emplacement Cloud Firestore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Accès complet aux sauvegardes dans un emplacement Cloud 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 Cloud 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.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Vous savez comment cloner une base de données Cloud 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 les clonant.
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, statistiques et analyses Key Visualizer.

Rôles personnalisés

Si les rôles prédéfinis ne répondent pas à vos besoins métier, vous pouvez définir vos propres rôles personnalisés avec 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 tags 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 liste les autorisations compatibles avec Cloud 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 Supprimez des entités d'une base de données de manière groupée.
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.clone Cloner une base de données
datastore.databases.createTagBinding Créez une liaison de tag pour une base de données.
datastore.databases.deleteTagBinding Supprimer 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.schemas.create Créer un index.
datastore.schemas.delete Supprimer un index.
datastore.schemas.get Lire les métadonnées d'un index.
datastore.schemas.list Répertorier les index dans un projet.
datastore.schemas.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 un planning de sauvegarde.
datastore.backupSchedules.update Mettez à jour un planning de sauvegarde.
datastore.backupSchedules.delete Supprimez une planification de sauvegarde.
Nom de l'autorisation de sauvegarde Description
datastore.backups.get Obtenez des informations sur une sauvegarde.
datastore.backups.list Lister 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

Cloud 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 IAM Cloud Firestore

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 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

Cloud Firestore Security Rules 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 au lieu de la console Google Cloud, car le rôle firebaserules.system est masqué par défaut dans la console.

Étape suivante