Contrôle des accès pour Cloud Spanner

Présentation

Cloud 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 une description détaillée d'IAM et de ses fonctionnalités, consultez le guide du développeur concernant Cloud 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.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
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

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 Autorisations Description
roles/spanner.admin

(Rôle de personne)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.*
spanner.instanceConfigs.*
spanner.instanceOperations.*
spanner.sessions.*
À attribuer de préférence au niveau du projet Google Cloud. Offre un accès complet à l'ensemble des ressources Cloud Spanner d'un projet Google Cloud. Un compte principal doté de ce rôle a les possibilités suivantes :
  • Accorder des autorisations aux autres comptes principaux 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
roles/spanner.databaseAdmin

(Rôle de personne)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.list
spanner.instances.get
spanner.instances.getIamPolicy
spanner.sessions.*
À attribuer de préférence au niveau du projet Google Cloud. Un compte principal doté de ce rôle a les possibilités suivantes :
  • Obtenir/répertorier toutes les instances Cloud Spanner du projet
  • Créer/répertorier/supprimer des bases de données dans l'instance pour laquelle ce rôle est accordé
  • 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
roles/spanner.databaseReader

(Rôle de machine)
spanner.databases.beginReadOnlyTransaction
spanner.databases.getDdl
spanner.databases.read
spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
spanner.sessions.get
À accorder de préférence au niveau de la base de données. Un compte principal doté de ce rôle a les possibilités suivantes :
  • 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
roles/spanner.databaseUser

(Rôle de machine)
spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.beginPartitionedDmlTransaction
spanner.databases.beginReadOnlyTransaction
spanner.databases.getDdl
spanner.databases.read
spanner.databases.select
spanner.databases.updateDdl
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
spanner.sessions.get
À accorder de préférence au niveau de la base de données. Un compte principal doté de ce rôle a les possibilités suivantes :
  • Lire et écrire dans la base de données Cloud Spanner
  • Exécutez 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
roles/spanner.viewer

(Rôle de personne)
resourcemanager.projects.get
spanner.databases.list
spanner.instances.get
spanner.instances.list
À attribuer de préférence au niveau du projet Google Cloud. Un compte principal doté de ce rôle a les possibilités suivantes :
  • 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 requis au niveau du projet Google Cloud pour les utilisateurs qui interagissent avec les ressources Cloud Spanner via Google Cloud Console.

Rôles primitifs

Les rôles primitifs sont des rôles antérieurs à Cloud 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/writer 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/writer. 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

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

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 et de base de données 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

Étapes suivantes