Contrôle des accès pour Cloud Spanner

Présentation

Identity and Access Management (IAM) vous permet de contrôler l'accès des utilisateurs et des groupes aux ressources Cloud Spanner au niveau du projet, ainsi qu'à ceux de l'instance et de la base de données Cloud Spanner. Par exemple, vous pouvez accorder à un utilisateur le contrôle total d'une base de données déterminée dans une instance spécifique de votre projet, mais sans l'autoriser à créer, modifier ou supprimer des instances dans ce projet. L'utilisation d'IAM avec Cloud Spanner vous permet d'accorder une autorisation à un utilisateur ou à un groupe sans avoir à modifier une à une les autorisations associées aux instances ou aux bases de données Cloud Spanner.

Ce document porte sur les autorisations IAM pertinentes pour Cloud Spanner et sur les rôles IAM qui permettent d'octroyer ces autorisations. Pour obtenir une description détaillée des services IAM et de leurs fonctionnalités, consultez le guide du développeur sur Identity and Access Management, en particulier la section sur la gestion des stratégies IAM.

Autorisations

Les autorisations permettent aux utilisateurs de réaliser des opérations spécifiques sur les ressources Cloud Spanner. Par exemple, l'autorisation spanner.databases.read permet à un utilisateur de lire dans une base de données à l'aide de l'API de lecture de Cloud Spanner, tandis que l'autorisation spanner.databases.select lui permet d'exécuter une instruction SQL "SELECT" sur une base de données. Vous n'accordez pas directement d'autorisations aux utilisateurs, mais vous leur attribuez des rôles prédéfinis ou des rôles personnalisés auxquels sont associées une ou plusieurs autorisations.

Les tableaux suivants répertorient les autorisations IAM associées à Cloud Spanner :

Configurations d'instance

Les autorisations suivantes s'appliquent aux configurations d'instance Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les configurations d'instance).

Nom de l'autorisation relative aux configurations d'instance Description
spanner.instanceConfigs.list Répertorier l'ensemble des configurations d'instance
spanner.instanceConfigs.get Obtenir une configuration d'instance

Instances

Les autorisations suivantes s'appliquent aux instances Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les instances).

Nom de l'autorisation de l'instance Description
spanner.instances.create Créer une instance
spanner.instances.list Répertorier les instances
spanner.instances.get Obtenir la configuration d'une instance spécifique
spanner.instances.getIamPolicy Obtenir la stratégie IAM d'une instance
spanner.instances.update Mettre à jour une instance
spanner.instances.setIamPolicy Définir la stratégie IAM d'une instance
spanner.instances.delete Supprimer une instance

Opérations d'instance :

Les autorisations suivantes s'appliquent aux opérations sur les instances Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les instances).

Nom de l'autorisation relative aux opérations sur les instances Description
spanner.instanceOperations.list Répertorier les opérations sur les instances
spanner.instanceOperations.get Obtenir une opération sur une instance
spanner.instanceOperations.cancel Annuler une opération sur une instance
spanner.instanceOperations.delete Supprimer une opération sur une instance

Bases de données

Les autorisations suivantes s'appliquent aux bases de données Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les bases de données).

Nom de l'autorisation relative aux bases de données Description
spanner.databases.beginPartitionedDmlTransaction

Exécuter une instruction LMD (langage de manipulation de données)

spanner.databases.create Créer une base de données
spanner.databases.createBackup Créer une sauvegarde à partir de la base de données. Nécessite également spanner.backups.create pour créer la ressource de sauvegarde.
spanner.databases.list Répertorier les bases de données
spanner.databases.update

Mettre à jour les métadonnées d'une base de données

spanner.databases.updateDdl Mettre à jour le schéma d'une base de données
spanner.databases.get Obtenir les métadonnées d'une base de données
spanner.databases.getDdl Obtenir le schéma d'une base de données
spanner.databases.getIamPolicy Obtenir la stratégie IAM d'une base de données
spanner.databases.setIamPolicy Définir la stratégie IAM d'une base de données
spanner.databases.beginReadOnlyTransaction Commencer une transaction en lecture seule sur une base de données Cloud Spanner
spanner.databases.beginOrRollbackReadWriteTransaction Commencer ou annuler une transaction en lecture/écriture sur une base de données Cloud Spanner
spanner.databases.read Lire dans une base de données à l'aide de l'API de lecture
spanner.databases.select Exécuter une instruction SQL "SELECT" sur une base de données
spanner.databases.write Écrire dans une base de données
spanner.databases.drop Supprimer une base de données

Opérations de base de données

Les autorisations suivantes s'appliquent aux opérations de base de données Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les bases de données).

Nom de l'autorisation relative aux opérations de base de données Description
spanner.databaseOperations.list Répertorier les opérations de base de données et les restaurer
spanner.databaseOperations.get Obtenir une opération de base de données
spanner.databaseOperations.cancel Annuler une opération de base de données
spanner.databaseOperations.delete

Supprimer une opération de base de données

Sauvegardes

Les autorisations suivantes s'appliquent aux sauvegardes Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les sauvegardes).

Nom de l'autorisation de sauvegarde Description
spanner.backups.create Créer une sauvegarde (nécessite également spanner.databases.createBackup sur la base de données source)
spanner.backups.get Obtenir une sauvegarde
spanner.backups.update Mettre à jour une sauvegarde
spanner.backups.delete Supprimer une sauvegarde
spanner.backups.list Répertorier des sauvegardes
spanner.backups.restoreDatabase Restaurer la base de données à partir d'une sauvegarde. Nécessite également spanner.databases.create pour créer la base de données restaurée sur l'instance cible.
spanner.backups.getIamPolicy Obtenir la stratégie IAM d'une sauvegarde
spanner.backups.setIamPolicy Définir la stratégie IAM d'une sauvegarde

Opérations de sauvegarde

Les autorisations suivantes s'appliquent aux opérations de sauvegarde Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les bases de données).

Nom de l'autorisation de l'opération de sauvegarde Description
spanner.backupOperations.list Répertorier les opérations de sauvegarde.
spanner.backupOperations.get Obtenir une opération de sauvegarde spécifique.
spanner.backupOperations.cancel Annuler une opération de sauvegarde.

Sessions

Les autorisations suivantes s'appliquent aux sessions Cloud Spanner (consultez les sections REST et RPC de la documentation de référence sur les bases de données).

Nom de l'autorisation relative aux sessions Description
spanner.sessions.create Créer une session
spanner.sessions.get Obtenir une session
spanner.sessions.delete Supprimer une session
spanner.sessions.list Répertorier les sessions

Rôles prédéfinis

Un rôle prédéfini correspond à un ensemble contenant une ou plusieurs autorisations. Par exemple, le rôle prédéfini roles/spanner.databaseUser contient les autorisations spanner.databases.read et spanner.database.write. Il existe deux types de rôles prédéfinis pour Cloud Spanner :

  • Rôles de personne : ces rôles sont attribués à des utilisateurs ou à des groupes afin de leur permettre d'effectuer des actions sur les ressources de votre projet.
  • Rôles de machine : ces rôles sont attribués à des comptes de service, et permettent aux machines exécutées sous ces comptes de service d'effectuer des actions sur les ressources de votre projet.

Le tableau suivant répertorie les rôles IAM prédéfinis pour Cloud Spanner, ainsi que les autorisations associées à chaque rôle :

Rôle Titre Description Autorisations Ressource la plus basse
roles/spanner.admin Administrateur Cloud Spanner

Offre un accès complet à l'ensemble des ressources Cloud Spanner d'un projet Google Cloud. Un membre doté de ce rôle peut :

  • Accorder des autorisations aux autres membres pour toutes les ressources Cloud Spanner du projet, et révoquer ces autorisations
  • Allouer et supprimer des ressources Cloud Spanner facturables
  • Émettre des opérations get/list/modify sur des ressources Cloud Spanner
  • Lire et écrire dans toutes les bases de données Cloud Spanner du projet
  • Récupérer les métadonnées du projet
  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.*
Projet
roles/spanner.backupAdmin Administrateur de sauvegardes Cloud Spanner

Un membre doté de ce rôle peut :

  • Créer, afficher, mettre à jour et supprimer des sauvegardes
  • Afficher et gérer la stratégie IAM d'une sauvegarde

Ce rôle ne peut pas restaurer une base de données à partir d'une sauvegarde.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.backupOperations.*
  • spanner.backups.create
  • spanner.backups.delete
  • spanner.backups.get
  • spanner.backups.getIamPolicy
  • spanner.backups.list
  • spanner.backups.setIamPolicy
  • spanner.backups.update
  • spanner.databases.createBackup
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
  • spanner.instances.list
Instance
roles/spanner.backupWriter Rédacteur de sauvegardes Cloud Spanner Ce rôle est destiné aux scripts qui automatisent la création de sauvegardes. Un membre doté de ce rôle peut créer des sauvegardes, mais ne peut pas les mettre à jour ni les supprimer.
  • spanner.backupOperations.get
  • spanner.backupOperations.list
  • spanner.backups.create
  • spanner.backups.get
  • spanner.backups.list
  • spanner.databases.createBackup
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
Instance
roles/spanner.databaseAdmin Administrateur de bases de données Cloud Spanner

Un membre doté de ce rôle peut :

  • Obtenir/répertorier toutes les instances Cloud Spanner du projet
  • Créer/répertorier/supprimer les bases de données d'une instance
  • Accorder/révoquer l'accès aux bases de données du projet
  • Lire et écrire dans toutes les bases de données Cloud Spanner du projet
  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.databaseOperations.*
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.create
  • spanner.databases.drop
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.getIamPolicy
  • spanner.databases.list
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.databases.setIamPolicy
  • spanner.databases.update
  • spanner.databases.updateDdl
  • spanner.databases.write
  • spanner.instances.get
  • spanner.instances.getIamPolicy
  • spanner.instances.list
  • spanner.sessions.*
Instance
roles/spanner.databaseReader Lecteur de bases de données Cloud Spanner

Un membre doté de ce rôle peut :

  • Lire dans la base de données Cloud Spanner
  • Exécuter des requêtes SQL sur la base de données
  • Afficher le schéma associé à la base de données
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.getDdl
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.instances.get
  • spanner.sessions.*
Base de données
roles/spanner.databaseUser Utilisateur de bases de données Cloud Spanner

Un membre doté de ce rôle peut :

  • Lire et écrire dans la base de données Cloud Spanner
  • Exécuter des requêtes SQL sur la base de données, y compris en langage LMD et LMD partitionné
  • Afficher et mettre à jour le schéma associé à la base de données
  • spanner.databaseOperations.*
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.getDdl
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.databases.updateDdl
  • spanner.databases.write
  • spanner.instances.get
  • spanner.sessions.*
Base de données
roles/spanner.restoreAdmin Administrateur de restaurations Cloud Spanner

Un membre doté de ce rôle peut restaurer des bases de données à partir de sauvegardes.

Si vous devez restaurer une sauvegarde sur une autre instance, appliquez ce rôle au niveau du projet ou aux deux instances. Ce rôle ne peut pas créer de sauvegardes.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.backups.get
  • spanner.backups.list
  • spanner.backups.restoreDatabase
  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list
  • spanner.databases.create
  • spanner.databases.get
  • spanner.databases.list
  • spanner.instances.get
  • spanner.instances.list
Instance
roles/spanner.viewer Lecteur Cloud Spanner

Un membre doté de ce rôle peut :

  • Afficher toutes les instances Cloud Spanner (sans possibilité de les modifier)
  • Afficher toutes les bases de données Cloud Spanner (sans possibilité de les modifier ni de lire leur contenu)

Par exemple, vous pouvez combiner ce rôle avec le rôle roles/spanner.databaseUser pour autoriser un utilisateur à accéder à une base de données déterminée, tout en ne lui accordant qu'un accès en lecture aux autres instances et bases de données.

Ce rôle est recommandé au niveau du projet Google Cloud pour les utilisateurs qui interagissent avec les ressources Cloud Spanner via Google Cloud Console.

  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.databases.list
  • spanner.instanceConfigs.*
  • spanner.instances.get
  • spanner.instances.list
Projet

Rôles primitifs

Les rôles primitifs sont des rôles antérieurs à IAM qui sont attribués au niveau du projet. Pour plus de détails, consultez la section Rôles primitifs.

Bien que Cloud Spanner soit compatible avec les rôles primitifs suivants, vous devez, dans la mesure du possible, utiliser l'un des rôles prédéfinis présentés ci-dessus. Les rôles primitifs comportent des autorisations étendues qui s'appliquent à l'ensemble de vos ressources Google Cloud, tandis que les autorisations détaillées contenues dans les rôles prédéfinis de Cloud Spanner ne s'appliquent qu'à Cloud Spanner.

Rôle primitif Description
roles/viewer Permet de répertorier et d'obtenir les métadonnées des schémas et des instances. Permet également de lire dans une base de données et de l'interroger via SQL.
roles/editor Permet d'effectuer toutes les opérations autorisées par le rôle roles/viewer. Permet également de créer des instances et des bases de données, ainsi que d'écrire des données dans une base de données.
roles/owner Permet d'effectuer toutes les opérations autorisées par le rôle roles/editor. Permet également de modifier l'accès aux bases de données et aux instances.

Rôles personnalisés

Si les rôles prédéfinis pour Cloud Spanner ne répondent pas aux besoins de votre entreprise, vous pouvez définir vos propres rôles personnalisés en leur associant les autorisations de votre choix.

Avant de créer un rôle personnalisé, vous devez déterminer les tâches que vous avez besoin d'effectuer. Vous pouvez ensuite identifier les autorisations requises pour chaque tâche et ajouter celles-ci au rôle personnalisé.

Rôles personnalisés pour les tâches de compte de service

Pour la plupart des tâches, les autorisations que vous devez ajouter à votre rôle personnalisé sont évidentes. Par exemple, si vous souhaitez que votre compte de service puisse créer une base de données, ajoutez l'autorisation spanner.databases.create à votre rôle personnalisé.

Toutefois, lorsque vous lisez ou écrivez des données dans une table Cloud Spanner, vous devez ajouter plusieurs autorisations distinctes à votre rôle personnalisé. Le tableau suivant indique les autorisations requises pour la lecture et l'écriture de données.

Tâche de compte de service Autorisations requises
Lire des données spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
Insérer, mettre à jour ou supprimer des données spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
Créer une sauvegarde spanner.backups.create
spanner.databases.createBackup
Restaurer une base de données spanner.databases.create
spanner.backups.restoreDatabase

Rôles personnalisés pour les tâches Google Cloud Console

Pour identifier la liste des autorisations dont vous avez besoin pour effectuer une tâche donnée dans Cloud Console, vous devez déterminer le workflow permettant d'effectuer cette tâche, puis compiler les autorisations correspondantes. Par exemple, pour afficher les données d'une table, il vous faudrait effectuer les étapes suivantes dans Cloud Console :

Étape Autorisations
1. Accéder au projet resourcemanager.projects.get
2. Afficher la liste des instances spanner.instances.list
3. Sélectionner une instance spanner.instances.get
4. Afficher la liste des bases de données spanner.databases.list
5. Sélectionner une base de données et une table spanner.databases.get spanner.databases.getDdl
6. Afficher les données d'une table spanner.databases.select, spanner.sessions.create, spanner.sessions.delete

Dans cet exemple, les autorisations requises sont les suivantes :

  • resourcemanager.projects.get
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.list
  • spanner.databases.select
  • spanner.instances.get
  • spanner.instances.list
  • spanner.sessions.create
  • spanner.sessions.delete

Le tableau suivant répertorie les autorisations requises pour les actions effectuées via Cloud Console.

Action Autorisations
Afficher la liste des instances sur la page "Instances"

resourcemanager.projects.get
spanner.instances.list

Afficher la liste présente dans l'onglet "Autorisations" de la page "Instances"

spanner.instances.getIamPolicy

Ajouter des membres dans l'onglet "Autorisations" de la page "Instances"

spanner.instances.setIamPolicy

Sélectionner une instance dans la liste des instances pour afficher la page "Détails de l'instance"

spanner.instances.get

Créer une instance

spanner.instanceConfigs.list
spanner.instanceOperations.get
spanner.instances.create

Supprimer une instance

spanner.instances.delete

Modifier une instance

spanner.instanceOperations.get
spanner.instances.update

Afficher les graphiques présents dans l'onglet "Surveillance" de la page "Détails de l'instance" ou de la page "Détails de la base de données"

monitoring.metricDescriptors.get
monitoring.metricDescriptors.list
monitoring.timeSeries.list
spanner.instances.get

Afficher la liste des bases de données présente sur la page "Détails de l'instance"

spanner.databases.list

Afficher la liste présente dans l'onglet "Autorisations" de la page "Détails de la base de données"

spanner.databases.getIamPolicy

Ajouter des membres dans l'onglet "Autorisations" de la page "Détails de la base de données"

spanner.databases.setIamPolicy

Sélectionner une base de données dans la liste et afficher son schéma sur la page "Détails de la base de données"

spanner.databases.get
spanner.databases.getDdl

Créer une base de données

spanner.databases.create

Supprimer une base de données

spanner.databases.drop

Créer une table

Mettre à jour le schéma d'une table

spanner.databaseOperations.get
spanner.databaseOperations.list
spanner.databases.updateDdl

Afficher les données présentes dans l'onglet "Données" de la page "Détails de la base de données"

Créer et exécuter une requête

spanner.databases.select
spanner.sessions.create
spanner.sessions.delete

Modifier des données dans une table

spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.select
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete

Afficher l'onglet Sauvegarder/Restaurer

spanner.backups.list
spanner.backups.get

Afficher la liste des opérations de sauvegarde

spanner.backupOperations.list

Afficher la liste des opérations de restauration

spanner.databaseOperations.list

Créer une sauvegarde

spanner.backups.create
spanner.databases.createBackup
spanner.databases.list1
spanner.backupOperations.list1

Restaurer une base de données à partir d'une sauvegarde

spanner.instanceConfigs.list
spanner.instances.get
spanner.backups.get
spanner.backups.restoreDatabase
spanner.instances.list
spanner.databases.create

Mettre à jour une sauvegarde

spanner.backups.update

Supprimer une sauvegarde

spanner.backups.delete

1 Obligatoire si vous créez une sauvegarde à partir de l'onglet Sauvegarder/Restaurer au niveau de l'instance plutôt qu'au niveau de la base de données.

Gestion des stratégies IAM de Cloud Spanner

Vous pouvez obtenir, définir et tester les stratégies IAM en exécutant les API REST ou RPC sur les ressources d'instance, de base de données et de sauvegarde Cloud Spanner.

Instances

API REST API RPC
projects.instances.getIamPolicy GetIamPolicy
projects.instances.setIamPolicy SetIamPolicy
projects.instances.testIamPermissions TestIamPermissions

Bases de données

API REST API RPC
projects.instances.databases.getIamPolicy GetIamPolicy
projects.instances.databases.setIamPolicy SetIamPolicy
projects.instances.databases.testIamPermissions TestIamPermissions

Sauvegardes

API REST API RPC
projects.instances.backups.getIamPolicy GetIamPolicy
projects.instances.backups.setIamPolicy SetIamPolicy
projects.instances.backups.testIamPermissions TestIamPermissions

Étape suivante