Cloud Spanner 的访问权限控制

概览

借助身份和访问权限管理 (IAM),您可以控制用户和群组在项目、Cloud Spanner 实例和 Cloud Spanner 数据库级层对 Cloud Spanner 资源的访问权限。例如,您可以指定某个用户对您项目中特定实例的特定数据库拥有完全控制权,但不允许该用户创建、修改或删除项目中的任何实例。借助 Cloud Spanner IAM,您可以向用户或群组授予权限,而无需单独修改每个 Cloud Spanner 实例或数据库的权限。

本文档重点介绍与 Cloud Spanner 相关的 IAM 权限和授予这些权限的 IAM 角色。如需详细了解 IAM 及其功能,请参阅身份和访问权限管理开发者指南。尤其是参阅其管理 IAM 政策部分。

权限

有了权限,用户便可对 Cloud Spanner 资源执行特定操作。例如,拥有 spanner.databases.read 权限的用户可以使用 Cloud Spanner 的读取 API 从数据库读取数据,而拥有 spanner.databases.select 权限的用户可以对数据库执行 SQL select 语句。您不能直接授予用户权限,但可以为他们分配预定义角色自定义角色,这些角色本身会具有一项或多项权限。

下表列出了与 Cloud Spanner 相关的 IAM 权限。

实例配置

以下权限适用于 Cloud Spanner 实例配置(请参阅实例配置参考文档:RESTRPC)。

实例配置权限名称 说明
spanner.instanceConfigs.list 列出一组实例配置。
spanner.instanceConfigs.get 获取实例配置。

实例

以下权限适用于 Cloud Spanner 实例(请参阅实例参考文档:RESTRPC)。

实例权限名称 说明
spanner.instances.create 创建实例。
spanner.instances.list 列出实例。
spanner.instances.get 获取特定实例的配置。
spanner.instances.getIamPolicy 获取实例的 IAM 政策。
spanner.instances.update 更新实例。
spanner.instances.setIamPolicy 设置实例的 IAM 政策。
spanner.instances.delete 删除实例。

实例操作

以下权限适用于 Cloud Spanner 实例操作(请参阅实例参考文档:RESTRPC)。

实例操作权限名称 说明
spanner.instanceOperations.list 列出实例操作。
spanner.instanceOperations.get 获取特定的实例操作。
spanner.instanceOperations.cancel 取消实例操作。
spanner.instanceOperations.delete 删除实例操作。

数据库

以下权限适用于 Cloud Spanner 数据库(请参阅数据库参考文档:RESTRPC)。

数据库权限名称 说明
spanner.databases.beginPartitionedDmlTransaction

执行分区数据操纵语言 (DML) 语句。

spanner.databases.create 创建数据库。
spanner.databases.createBackup 从数据库创建备份。此外,还需要 spanner.backups.create 以创建备份资源。
spanner.databases.list 列出数据库。
spanner.databases.update

更新数据库的元数据。

spanner.databases.updateDdl 更新数据库架构。
spanner.databases.get 获取数据库的元数据。
spanner.databases.getDdl 获取数据库的架构。
spanner.databases.getIamPolicy 获取数据库的 IAM 政策。
spanner.databases.setIamPolicy 设置数据库的 IAM 政策。
spanner.databases.beginReadOnlyTransaction 在 Cloud Spanner 数据库上开始只读事务
spanner.databases.beginOrRollbackReadWriteTransaction 在 Cloud Spanner 数据库上开始或回滚读写事务
spanner.databases.read 使用读取 API 从数据库读取数据。
spanner.databases.select 对数据库执行 SQL select 语句。
spanner.databases.write 写入数据库。
spanner.databases.drop 删除数据库。

数据库操作

以下权限适用于 Cloud Spanner 数据库操作(请参阅数据库参考文档:RESTRPC)。

数据库操作权限名称 说明
spanner.databaseOperations.list 列出数据库并恢复数据库操作。
spanner.databaseOperations.get 获取特定的数据库操作。
spanner.databaseOperations.cancel 取消数据库操作。
spanner.databaseOperations.delete

删除数据库操作。

备份

以下权限适用于 Cloud Spanner 备份(请参阅备份参考文档:RESTRPC)。

备份权限名称 说明
spanner.backups.create 创建备份。 此外,还需要对源数据库使用 spanner.databases.createBackup
spanner.backups.get 获取备份。
spanner.backups.update 更新备份。
spanner.backups.delete 删除备份。
spanner.backups.list 列出备份。
spanner.backups.restoreDatabase 使用备份恢复数据库。此外,还需要 spanner.databases.create 在目标实例上创建恢复的数据库。
spanner.backups.getIamPolicy 获取备份的 IAM 政策。
spanner.backups.setIamPolicy 设置备份的 IAM 政策。

备份操作

以下权限适用于 Cloud Spanner 备份操作(请参阅数据库参考文档:RESTRPC)。

备份操作权限名称 说明
spanner.backupOperations.list 列出备份操作。
spanner.backupOperations.get 获取特定的备份操作。
spanner.backupOperations.cancel 取消备份操作。

会话

以下权限适用于 Cloud Spanner 数据库(请参阅会话参考文档:RESTRPC)。

会话权限名称 说明
spanner.sessions.create 创建会话。
spanner.sessions.get 获取会话。
spanner.sessions.delete 删除会话。
spanner.sessions.list 列出会话。

预定义角色

预定义角色是一个或多个权限的集合。例如,预定义角色 roles/spanner.databaseUser 包含 spanner.databases.readspanner.database.write 权限。Cloud Spanner 有两种预定义角色:

  • 人员角色:分配给用户或群组的角色,允许他们对项目中的资源执行操作。
  • 机器角色:分配给服务帐号的角色,允许以这些服务帐号的身份运行的机器对项目中的资源执行操作。

下表列出了 Cloud Spanner IAM 预定义角色,包括与每个角色相关的权限列表:

角色 名称 说明 权限 最低资源要求
roles/spanner.admin Cloud Spanner Admin

对某个 Google Cloud 项目中的所有 Cloud Spanner 资源拥有完整访问权限。具有此角色的成员可以执行以下操作:

  • 授予和撤消其他成员对该项目中所有 Cloud Spanner 资源的权限。
  • 分配和删除应收费 Cloud Spanner 资源。
  • 发起 Cloud Spanner 资源的获取/列出/修改操作。
  • 在该项目的所有 Cloud Spanner 数据库中读取和写入数据。
  • 获取项目元数据。
  • monitoring.timeSeries.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • spanner.*
项目
roles/spanner.backupAdmin Cloud Spanner Backup Admin

具有此角色的成员可以执行以下操作:

  • 创建、查看、更新和删除备份。
  • 查看和管理备份的 IAM 政策。

此角色无法从备份恢复数据库。

  • 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
实例
roles/spanner.backupWriter Cloud Spanner Backup Writer 此角色旨在供自动创建备份的脚本使用。具有此角色的成员可以创建备份,但无法更新或删除备份。
  • 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
实例
roles/spanner.databaseAdmin Cloud Spanner Database Admin

具有此角色的成员可以执行以下操作:

  • 获取/列出项目中的所有 Cloud Spanner 实例。
  • 在实例中创建/列出/删除数据库。
  • 授予/撤消对该项目中数据库的访问权限。
  • 在该项目的所有 Cloud Spanner 数据库中读取和写入数据。
  • 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.*
实例
roles/spanner.databaseReader Cloud Spanner Database Reader

具有此角色的成员可以执行以下操作:

  • 读取 Cloud Spanner 数据库。
  • 对数据库执行 SQL 查询。
  • 查看数据库架构。
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.getDdl
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.instances.get
  • spanner.sessions.*
数据库
roles/spanner.databaseUser Cloud Spanner Database User

具有此角色的成员可以执行以下操作:

  • 在 Cloud Spanner 数据库中读取和写入数据。
  • 对数据库执行 SQL 查询,包括 DML 和分区 DML。
  • 查看和更新数据库架构。
  • 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.*
数据库
roles/spanner.restoreAdmin Cloud Spanner Restore Admin

具有此角色的成员可以从备份恢复数据库。

如果您需要将备份恢复到其他实例,请在项目级层应用此角色,或将项目级层应用于这两个实例。此角色无法创建备份。

  • 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
实例
roles/spanner.viewer Cloud Spanner Viewer

具有此角色的成员可以执行以下操作:

  • 查看所有 Cloud Spanner 实例(但不能修改实例)。
  • 查看所有 Cloud Spanner 数据库(但不能修改数据库,也不能从数据库读取数据)。

例如,您可以将此角色与 roles/spanner.databaseUser 角色合并,授予用户对特定数据库的访问权限,但对其他实例和数据库只有查看权限。

对于在 Google Cloud Console 中与 Cloud Spanner 资源互动的用户,建议在 Google Cloud 项目级层使用此角色。

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

基本角色

基本角色指在引入 IAM 之前的项目级层角色。如需了解详情,请参阅基本角色

虽然 Cloud Spanner 支持以下基本角色,但您应尽可能使用上述预定义角色之一。基本角色包括适用于您的所有 Google Cloud 资源的一系列权限;与此相对,Cloud Spanner 的预定义角色则包括仅适用于 Cloud Spanner 的精细权限。

基本角色 说明
roles/viewer 可以列出及获取架构和实例的元数据。也可以使用 SQL 对数据库进行读取和查询。
roles/editor 可以完成 roles/viewer 能够完成的所有操作。也可以创建实例和数据库,以及将数据写入数据库。
roles/owner 可以完成 roles/editor 能够完成的所有操作。也可以修改对数据库和实例的访问权限。

自定义角色

如果 Cloud Spanner 的预定义角色不能满足您的业务需求,您可自行定义自定义角色,使其具备您指定的权限。

在创建自定义角色之前,您必须确定需要执行的任务。然后,您可以确定每个任务所需的权限,并将这些权限添加到自定义角色中。

适用于服务帐号任务的自定义角色

对于大多数任务而言,需要添加到自定义角色中的权限非常明确。例如,如果您希望您的服务帐号能够创建数据库,请将权限 spanner.databases.create 添加到您的自定义角色中。

但是,在 Cloud Spanner 表中读取或写入数据时,您需要为自定义角色添加多个不同的权限。下表显示了读取和写入数据所需的权限。

服务帐号任务 所需权限
读取数据 spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
插入、更新或删除数据 spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
创建备份 spanner.backups.create
spanner.databases.createBackup
恢复数据库 spanner.databases.create
spanner.backups.restoreDatabase

用于 Google Cloud Console 任务的自定义角色

要确定 Cloud Console 中指定任务所需的权限列表,请确定该任务的工作流并为该工作流编译权限。例如,要查看某个表中的数据,您可以在 Cloud Console 中执行以下步骤:

步骤 权限
1. 访问该项目 resourcemanager.projects.get
2. 查看实例列表 spanner.instances.list
3. 选择实例 spanner.instances.get
4. 查看数据库列表 spanner.databases.list
5. 选择数据库和表 spanner.databases.getspanner.databases.getDdl
6. 查看表中的数据 spanner.databases.selectspanner.sessions.createspanner.sessions.delete

在这个例子中,您需要以下权限:

  • 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

下表列出了 Cloud Console 中的操作所需的权限。

操作 权限
查看“实例”页面中的实例列表

resourcemanager.projects.get
spanner.instances.list

查看“实例”页面的“权限”标签中的列表

spanner.instances.getIamPolicy

在“实例”页面的“权限”标签中添加成员

spanner.instances.setIamPolicy

从实例列表中选择一个实例以查看“实例详情”页面

spanner.instances.get

创建实例

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

删除实例

spanner.instances.delete

修改实例

spanner.instanceOperations.get
spanner.instances.update

查看“实例详情”页面或“数据库详细信息”页面上“监视器”标签中的图表

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

查看“实例详情”页面中的数据库列表

spanner.databases.list

查看“数据库详细信息”页面的“权限”标签中的列表

spanner.databases.getIamPolicy

在“数据库详细信息”页面的“权限”标签中添加成员

spanner.databases.setIamPolicy

从数据库列表中选择一个数据库,并查看“数据库详细信息”页面中的架构

spanner.databases.get
spanner.databases.getDdl

创建数据库

spanner.databases.create

删除数据库

spanner.databases.drop

创建表

更新表架构

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

查看“数据库详细信息”页面上“数据”标签中的数据

创建并运行查询

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

修改表中的数据

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

查看“备份/恢复”标签页

spanner.backups.list
spanner.backups.get

查看备份操作列表

spanner.backupOperations.list

查看恢复操作列表

spanner.databaseOperations.list

创建备份

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

从备份中恢复数据库

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

更新备份

spanner.backups.update

删除备份

spanner.backups.delete

1 如果您要在实例级层(而非数据库级层)通过“备份/恢复”标签页创建备份,则必须提供此属性。

Cloud Spanner IAM 政策管理

您可以对 Cloud Spanner 实例、数据库和备份资源使用 REST 或 RPC API,以获取、设置和测试 IAM 政策。

实例

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

数据库

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

备份

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

后续步骤