Control de acceso para Cloud Spanner

Descripción general

Gestión de identidades y accesos de Cloud (IAM) permite controlar el acceso de usuarios y grupos a los recursos de Cloud Spanner en el proyecto, la instancia de Cloud Spanner y los niveles de la base de datos de Cloud Spanner. Por ejemplo, se puede especificar que un usuario tenga control total de una base de datos específica en una instancia específica en el proyecto, pero no puede crear, modificar o eliminar ninguna instancia en el proyecto. El uso de IAM de Cloud Spanner permite otorgar un permiso a un usuario o grupo sin tener que modificar cada instancia de Cloud Spanner o permiso de base de datos individualmente.

Este documento se centra en los permisos de IAM relevantes para Cloud Spanner y las funciones de IAM que otorgan esos permisos. Si quieres obtener una descripción detallada de IAM y de sus características, consulta la guía para desarrolladores sobre la gestión de identidades y accesos de Cloud. Concretamente, consulta la sección relativa a la gestión de políticas de IAM.

Permisos

Los permisos permiten a los usuarios realizar acciones específicas en los recursos de Cloud Spanner. Por ejemplo, el permiso spanner.databases.read permite a un usuario leer desde una base de datos con la API de lectura de Cloud Spanner, mientras que spanner.databases.select permite a un usuario ejecutar una instrucción de selección de SQL en una base de datos. No se da permisos a los usuarios directamente; en cambio, se les otorga funciones predefinidas o funciones personalizadas, que incluyen uno o más permisos.

Las siguientes tablas muestran los permisos de IAM asociados con Cloud Spanner.

Configuraciones de instancias

Los siguientes permisos se aplican a las configuraciones de instancias de Cloud Spanner (consulta la referencia de configuración de la instancia: REST, RPC).

Nombre del permiso de configuración de instancia Descripción
spanner.instanceConfigs.list Muestra el conjunto de configuraciones de instancia.
spanner.instanceConfigs.get Obtiene una configuración de instancia.

Instancias

Los siguientes permisos se aplican a las instancias de Cloud Spanner (consulta la referencia de la instancia: REST, RPC).

Nombre del permiso de instancia Descripción
spanner.instances.create Crea una instancia.
spanner.instances.list Muestra las instancias.
spanner.instances.get Obtiene la configuración de una instancia específica.
spanner.instances.getIamPolicy Obtiene la política de IAM de una instancia.
spanner.instances.update Actualiza una instancia.
spanner.instances.setIamPolicy Establece la política de IAM de una instancia.
spanner.instances.delete Elimina una instancia.

Operaciones de instancias

Los siguientes permisos se aplican a las operaciones de instancias de Cloud Spanner (consulta la referencia de la instancia: REST, RPC).

Nombre del permiso de operación de instancia Descripción
spanner.instanceOperations.list Muestra operaciones de instancia.
spanner.instanceOperations.get Obtiene la operación de una instancia específica.
spanner.instanceOperations.cancel Cancela la operación de una instancia.
spanner.instanceOperations.delete Elimina la operación de una instancia.

Bases de datos

Los siguientes permisos se aplican a las bases de datos de Cloud Spanner (consulta la referencia de la base de datos: REST, RPC).

Nombre del permiso de la base Descripción
spanner.databases.create Crea una base de datos.
spanner.databases.list Muestra bases de datos.
spanner.databases.update Actualiza los metadatos de una base de datos.
spanner.databases.updateDdl Actualiza el esquema de una base de datos.
spanner.databases.get Obtiene los metadatos de una base de datos.
spanner.databases.getDdl Obtiene el esquema de una base de datos.
spanner.databases.getIamPolicy Obtiene la política de IAM de una base de datos.
spanner.databases.setIamPolicy Establece la política de IAM de una base de datos.
spanner.databases.beginReadOnlyTransaction Comienza una transacción de solo lectura en una base de datos de Cloud Spanner.
spanner.databases.beginOrRollbackReadWriteTransaction Comienza o deshace una transacción de lectura y escritura en una base de datos de Cloud Spanner.
spanner.databases.read Lee desde una base de datos a través de la API de lectura.
spanner.databases.select Ejecuta una instrucción de selección de SQL en una base de datos.
spanner.databases.write Escribe en una base de datos.
spanner.databases.drop Elimina una base de datos.

Operaciones de la base de datos

Los siguientes permisos se aplican a las operaciones de la base de datos de Cloud Spanner (consulta la referencia de la base de datos: REST, RPC).

Nombre del permiso de la operación de base de datos Descripción
spanner.databaseOperations.list Muestra operaciones de base de datos.
spanner.databaseOperations.get Obtiene la operación de una base de datos específica.
spanner.databaseOperations.cancel Cancela la operación de una base de datos.
spanner.databaseOperations.delete Elimina la operación de una base de datos.

Sesiones

Los siguientes permisos se aplican a las sesiones de Cloud Spanner (consulta la referencia de la base de datos: REST, RPC).

Nombre del permiso de sesión Descripción
spanner.sessions.create Crea una sesión.
spanner.sessions.get Obtiene una sesión.
spanner.sessions.delete Elimina una sesión.
spanner.sessions.list Muestra sesiones.

Funciones predefinidas

Una función predefinida es un conjunto de uno o más permisos. Por ejemplo, la función predefinida roles/spanner.databaseUser contiene los permisos spanner.databases.read y spanner.database.write. Hay dos tipos de funciones predefinidas para Cloud Spanner:

  • Funciones de persona: otorgado a usuarios o grupos, lo que les permite realizar acciones en los recursos del proyecto.
  • Funciones de la máquina: otorgado a cuentas de servicio, que permite que las máquinas se ejecuten como esas cuentas de servicio para realizar acciones en los recursos del proyecto.

La siguiente tabla muestra las funciones predefinidas de IAM de Cloud Spanner, incluida una lista de los permisos asociados a cada función:

Función Permisos Descripción
roles/spanner.admin

(Función de la persona)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.*
spanner.instanceConfigs.*
spanner.instanceOperations.*
spanner.sessions.*
Recomendada para otorgar en el nivel de proyecto de Google Cloud. Tiene acceso completo a todos los recursos de Cloud Spanner en un proyecto de Google Cloud. Un director con esta función puede:
  • Otorgar y revocar permisos a otros directores para todos los recursos de Cloud Spanner en el proyecto.
  • Asignar y eliminar los recursos facturables de Cloud Spanner.
  • Emitir operaciones obtener/mostrar/modificar en los recursos de Cloud Spanner.
  • Leer de todas las bases de datos de Cloud Spanner en el proyecto, y escribir en ellas.
  • Obtener metadatos del proyecto.
roles/spanner.databaseAdmin

(Función de la persona)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.list
spanner.instances.get
spanner.instances.getIamPolicy
spanner.instances.testIamPermissions
spanner.sessions.*
Recomendada para otorgar en el nivel de proyecto de Google Cloud. Un director con esta función puede:
  • Obtener/mostrar todas las instancias de Cloud Spanner en el proyecto.
  • Crear/mostrar/eliminar bases de datos en la instancia en la que se concede.
  • Conceder/revocar el acceso a las bases de datos en el proyecto.
  • Leer de todas las bases de datos de Cloud Spanner en el proyecto, y escribir en ellas.
roles/spanner.databaseReader

(función de la máquina)
spanner.databases.beginReadOnlyTransaction
spanner.databases.getDdl
spanner.databases.read
spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
spanner.sessions.get
Recomendada para otorgar en el nivel de base de datos. Un director con esta función puede:
  • Leer desde la base de datos de Cloud Spanner.
  • Ejecutar consultas SQL en la base de datos.
  • Ver el esquema para la base de datos.
roles/spanner.databaseUser

(Función de la máquina)
spanner.databases.beginOrRollbackReadWriteTransaction
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
Recomendada para otorgar en el nivel de base de datos. Un director con esta función puede:
  • Leer desde la base de datos de Cloud Spanner, y escribir en ella.
  • Ejecutar consultas SQL en la base de datos.
  • Ver y actualizar el esquema para la base de datos.
roles/spanner.viewer

(Función de la persona)
resourcemanager.projects.get
spanner.databases.list
spanner.instances.get
spanner.instances.list
Recomendada para otorgar en el nivel de proyecto de Google Cloud. Un director con esta función puede:
  • Ver todas las instancias de Cloud Spanner (pero no puede modificar instancias).
  • Ver todas las bases de datos de Cloud Spanner (pero no puede modificar las bases de datos y no puede leer desde las bases de datos).
Por ejemplo, esta función se puede combinar con la función roles/spanner.databaseUser para otorgar a un usuario acceso a una base de datos específica, pero solo acceso para ver otras instancias y bases de datos.
Esta función se requiere en el nivel de proyecto de Google Cloud para los usuarios que interactúan con los recursos de Cloud Spanner en la consola de Google Cloud Platform.

Funciones básicas

Las funciones primitivas son funciones en el nivel de proyecto que preceden a Cloud IAM. Para obtener más detalles, consulta las funciones primitivas.

Aunque Cloud Spanner es compatible con las siguientes funciones básicas, se debe usar una de las funciones predefinidas que se muestran arriba siempre que se pueda. Las funciones básicas incluyen amplios permisos que se aplican a todos sus recursos de Google Cloud Platform. En cambio, las funciones predefinidas de Cloud Spanner incluyen permisos detallados que se aplican solo a Cloud Spanner.

Función primitiva Descripción
roles/viewer Puede mostrar y obtener los metadatos de esquemas e instancias. También puede leer y consultar usando SQL en una base de datos.
roles/writer Puede hacer todo lo que un roles/viewer puede hacer. También puede crear instancias y bases de datos y escribir datos en una base de datos.
roles/owner Puede hacer todo lo que un roles/writer puede hacer. También puede modificar el acceso a bases de datos e instancias.

Funciones personalizadas

Si las funciones predefinidas de Cloud Spanner no se ajustan a los requisitos de tu empresa, puedes definir tus propias funciones personalizadas con los permisos que especifiques.

Antes de crear una función personalizada, debes identificar las tareas que tu cuenta de servicio debe realizar a través de la API. A continuación, puedes identificar los permisos necesarios para cada tarea y añadir estos permisos a la función personalizada.

Para la mayoría de las tareas, los permisos que necesitas añadir a tu función personalizada son obvios. Por ejemplo, si deseas que tu cuenta de servicio pueda crear una base de datos, añade el permiso spanner.databases.create a tu función personalizada.

Sin embargo, cuando lees o escribes datos en una tabla de Cloud Spanner, necesitas añadir varios permisos diferentes a la función personalizada. La siguiente tabla muestra los permisos necesarios para leer y escribir datos.

Tarea de cuenta de servicio Permisos obligatorios
Leer datos
  • spanner.databases.select
  • spanner.sessions.create
  • spanner.sessions.delete
Insertar, actualizar o eliminar datos
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.write
  • spanner.sessions.create
  • spanner.sessions.delete

Gestión de políticas de IAM de Cloud Spanner

Puedes obtener, establecer y probar políticas de IAM usando las API REST o RPC en la instancia de Cloud Spanner y en los recursos de la base de datos.

Instancias

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

Bases de datos

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

Siguientes pasos