Sécurité pour les bibliothèques clientes de serveur
Lorsque vous utilisez les bibliothèques clientes du serveur pour Firestore, vous pouvez gérer l'accès à vos ressources à l'aide de la gestion de l'authentification et des accès (IAM). IAM vous permet de définir de manière plus précise l'accès à des ressources spécifiques de Google Cloud Platform et empêche tout accès non souhaité à d'autres ressources. Cette page décrit les autorisations et les rôles IAM pour Firestore. Pour obtenir une description détaillée d'IAM, consultez la documentation IAM.
Cloud 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 quelles autorisations d'accès (rôle) à quelles ressources.
Les stratégies IAM permettent d'attribuer un ou plusieurs rôles à un utilisateur, ce qui lui accorde certaines autorisations. Par exemple, vous pouvez attribuer le rôle datastore.indexAdmin
à un utilisateur, ce qui lui permet de créer, de modifier, de supprimer, de répertorier ou d'afficher des index.
Autorisations et rôles
Cette section récapitule les autorisations et les rôles compatibles avec 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 |
beginTransaction |
datastore.databases.get |
Mise à jour ou transformation commit avec la condition préalable existante définie sur false |
datastore.entities.create |
Mise à jour ou transformation commit avec la condition préalable existante définie sur true
| datastore.entities.update |
Modification ou transformation commit sans condition préalable
| datastore.entities.create |
commit supprimer |
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 |
Mise à jour ou transformation write (RPC) avec la condition préalable existante définie sur false |
datastore.entities.create |
Mise à jour ou transformation write (RPC) avec la condition préalable existante définie sur true |
datastore.entities.update |
Modification ou transformation write (RPC) sans condition préalable |
datastore.entities.create |
write (RPC) supprimer
| 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 |
Rôles prédéfinis
Avec IAM, chaque méthode d'API dans Firestore nécessite que le compte à l'origine de la requête API dispose des autorisations appropriées pour utiliser la ressource. Pour accorder des autorisations, vous devez définir des stratégies qui attribuent 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 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.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/écriture aux données d'une base de données Firestore. Ce document est destiné aux développeurs d'applications et aux comptes de service. |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get 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.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.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Accès complet pour gérer les définitions d'index. |
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 avec les autorisations que vous spécifiez:
Autorisations
Le tableau suivant répertorie les autorisations compatibles avec Firestore.
Nom de l'autorisation relative aux bases de données | Description | |
---|---|---|
datastore.databases.get |
Démarrez ou annulez une transaction. Lire les métadonnées d'une base de données. |
|
Nom de l'autorisation d'entité | Description | |
datastore.entities.create |
Créez un document. | |
datastore.entities.delete |
Supprimer un document | |
datastore.entities.get |
Lire un document | |
datastore.entities.list |
Répertoriez les noms des documents d'un projet. ( datastore.entities.get est requis pour accéder aux données du document). |
|
datastore.entities.update |
Mettre à jour un document | |
Nom de l'autorisation d'indexation | Description | |
datastore.indexes.create |
Créez 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 |
Mettre à jour un index | |
Nom de l'autorisation du projet | Description | |
resourcemanager.projects.get |
Parcourez les ressources du projet. | |
resourcemanager.projects.list |
Répertorier les projets appartenant au propriétaire. | |
Nom de l'autorisation d'accéder à la position | Description | |
datastore.locations.get |
Obtenez des informations sur l'emplacement de la base de données. Obligatoire pour créer une base de données. | |
datastore.locations.list |
Répertorie les emplacements de base de données disponibles. Obligatoire pour créer une base de données. |
Latence de modification d'un rôle
Firestore met en cache les autorisations IAM pendant 5 minutes. La modification d'un rôle prend effet jusqu'à 5 minutes.
Gérer Firestore IAM
Vous pouvez obtenir et définir des stratégies IAM à l'aide de Google Cloud Console, 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.
Dépendance des règles de sécurité sur 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 CLI gcloud
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 les valeurs project_id et project_number, consultez la section Identifier des projets.
Utilisez la CLI Google Cloud au lieu de Cloud Console, car le rôle firebaserules.system
est masqué par défaut dans la console.
Étape suivante
- Apprenez-en plus sur IAM.
- Accordez des rôles IAM.