IAM 概览

Identity and Access Management (IAM) 可用于控制用户和群组的访问权限, 项目上的 Spanner 资源、Spanner 实例和 Spanner 数据库级层。例如,您可以指定某个用户对您项目中特定实例的特定数据库拥有完全控制权,但不允许该用户创建、修改或删除项目中的任何实例。使用 借助 IAM 的访问权限控制功能,您可以向用户或群组授予权限, 修改每个 Spanner 实例或数据库权限 。

本文档重点介绍与以下内容相关的 IAM 权限: Spanner 以及授予这些权限的 IAM 角色。 有关 IAM 及其功能的详细说明,请参阅 Identity and Access Management 开发者指南。尤其是参阅其管理 IAM 政策部分。

权限

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

下表列出了与 Spanner。

实例配置

以下权限适用于 Spanner 实例 配置。如需了解详情,请参阅实例配置参考 适用于 REST远程过程调用 API。

实例配置权限名称 说明
spanner.instanceConfigs.create 创建自定义实例配置。
spanner.instanceConfigs.delete 删除自定义实例配置。
spanner.instanceConfigs.get 获取实例配置。
spanner.instanceConfigs.list 列出一组实例配置。
spanner.instanceConfigs.update 更新自定义实例配置。

实例配置操作

以下权限适用于 Spanner 实例配置 operations.有关详情,请参阅 REST远程过程调用 API。

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

实例

以下权限适用于 Spanner 实例。有关 信息,请参阅 REST 的实例参考 和 RPC API。

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

实例操作

以下权限适用于 Spanner 实例操作。 有关详情,请参阅 REST远程过程调用 API。

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

分区

以下权限适用于 Spanner 分区。有关 相关信息,请参阅 REST 的分区参考 和 RPC API。

实例权限名称 说明
spanner.instancePartitions.create 创建分区。
spanner.instancePartitions.get 获取特定分区的配置。
spanner.instancePartitions.list 列出分区。
spanner.instancePartitions.update 更新分区。
spanner.instancePartitions.delete 删除分区。

分区操作

以下权限适用于 Spanner 分区操作。 如需了解详情,请参阅实例分区参考, REST 和 RPC API。

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

数据库

以下权限适用于 Spanner 数据库。有关 信息,请参阅 REST 的数据库参考 和 RPC API。

数据库权限名称 说明
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 在 Spanner 数据库上开始只读事务
spanner.databases.beginOrRollbackReadWriteTransaction 在 Spanner 数据库上开始或回滚读写事务
spanner.databases.read 使用读取 API 从数据库读取数据。
spanner.databases.select 对数据库执行 SQL select 语句。
spanner.databases.write 写入数据库。
spanner.databases.drop 删除数据库。
spanner.databases.useRoleBasedAccess 使用精细的访问权限控制
spanner.databases.useDataBoost 使用 Spanner Data Boost 的计算资源处理分区查询。

数据库角色

以下权限适用于 Spanner 数据库角色。 如需了解详情,请参阅 REST 的数据库参考 和 RPC API。

数据库角色权限名称 说明
spanner.databaseRoles.list 列出数据库角色。
spanner.databaseRoles.use 使用指定的数据库角色。

数据库操作

以下权限适用于 Spanner 数据库操作。 如需了解详情,请参阅 REST 的数据库参考 和 RPC API。

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

备份

以下权限适用于 Spanner 备份。有关 相关信息,请参阅 REST 的备份参考 和 RPC API。

备份权限名称 说明
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 政策。

备份操作

以下权限适用于 Spanner 备份操作。对于 如需了解更多信息,请参阅 REST 的数据库参考 和 RPC API。

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

会话

以下权限适用于 Spanner 会话。有关 信息,请参阅 REST 的数据库参考 和 RPC API。

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

预定义角色

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

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

下表列出了访问权限控制 IAM 预定义角色(包括 与每个角色关联的权限的列表:

Role Permissions

(roles/spanner.admin)

Has complete access to all Spanner resources in a Google Cloud project. A principal with this role can:

  • Grant and revoke permissions to other principals for all Spanner resources in the project.
  • Allocate and delete chargeable Spanner resources.
  • Issue get/list/modify operations on Cloud Spanner resources.
  • Read from and write to all Cloud Spanner databases in the project.
  • Fetch project metadata.

Lowest-level resources where you can grant this role:

  • Project

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.*

  • spanner.backupOperations.cancel
  • spanner.backupOperations.get
  • spanner.backupOperations.list
  • spanner.backups.copy
  • spanner.backups.create
  • spanner.backups.delete
  • spanner.backups.get
  • spanner.backups.getIamPolicy
  • spanner.backups.list
  • spanner.backups.restoreDatabase
  • spanner.backups.setIamPolicy
  • spanner.backups.update
  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list
  • spanner.databaseRoles.list
  • spanner.databaseRoles.use
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.changequorum
  • spanner.databases.create
  • spanner.databases.createBackup
  • 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.updateTag
  • spanner.databases.useDataBoost
  • spanner.databases.useRoleBasedAccess
  • spanner.databases.write
  • spanner.instanceConfigOperations.cancel
  • spanner.instanceConfigOperations.delete
  • spanner.instanceConfigOperations.get
  • spanner.instanceConfigOperations.list
  • spanner.instanceConfigs.create
  • spanner.instanceConfigs.delete
  • spanner.instanceConfigs.get
  • spanner.instanceConfigs.list
  • spanner.instanceConfigs.update
  • spanner.instanceOperations.cancel
  • spanner.instanceOperations.delete
  • spanner.instanceOperations.get
  • spanner.instanceOperations.list
  • spanner.instancePartitionOperations.cancel
  • spanner.instancePartitionOperations.delete
  • spanner.instancePartitionOperations.get
  • spanner.instancePartitionOperations.list
  • spanner.instancePartitions.create
  • spanner.instancePartitions.delete
  • spanner.instancePartitions.get
  • spanner.instancePartitions.list
  • spanner.instancePartitions.update
  • spanner.instances.create
  • spanner.instances.createTagBinding
  • spanner.instances.delete
  • spanner.instances.deleteTagBinding
  • spanner.instances.get
  • spanner.instances.getIamPolicy
  • spanner.instances.list
  • spanner.instances.listEffectiveTags
  • spanner.instances.listTagBindings
  • spanner.instances.setIamPolicy
  • spanner.instances.update
  • spanner.instances.updateTag
  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.backupAdmin)

A principal with this role can:

  • Create, view, update, and delete backups.
  • View and manage a backup's allow policy.

This role cannot restore a database from a backup.

Lowest-level resources where you can grant this role:

  • Instance

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.backupOperations.*

  • spanner.backupOperations.cancel
  • spanner.backupOperations.get
  • spanner.backupOperations.list

spanner.backups.copy

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.instancePartitions.get

spanner.instancePartitions.list

spanner.instances.createTagBinding

spanner.instances.deleteTagBinding

spanner.instances.get

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

(roles/spanner.backupWriter)

This role is intended to be used by scripts that automate backup creation. A principal with this role can create backups, but cannot update or delete them.

Lowest-level resources where you can grant this role:

  • Instance

spanner.backupOperations.get

spanner.backupOperations.list

spanner.backups.copy

spanner.backups.create

spanner.backups.get

spanner.backups.list

spanner.databases.createBackup

spanner.databases.get

spanner.databases.list

spanner.instancePartitions.get

spanner.instances.get

(roles/spanner.databaseAdmin)

A principal with this role can:

  • Get/list all Spanner instances in the project.
  • Create/list/drop databases in an instance.
  • Grant/revoke access to databases in the project.
  • Read from and write to all Cloud Spanner databases in the project.

Lowest-level resources where you can grant this role:

  • Instance

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.databaseOperations.*

  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list

spanner.databaseRoles.*

  • spanner.databaseRoles.list
  • spanner.databaseRoles.use

spanner.databases.beginOrRollbackReadWriteTransaction

spanner.databases.beginPartitionedDmlTransaction

spanner.databases.beginReadOnlyTransaction

spanner.databases.changequorum

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.updateTag

spanner.databases.useDataBoost

spanner.databases.useRoleBasedAccess

spanner.databases.write

spanner.instancePartitions.get

spanner.instancePartitions.list

spanner.instances.createTagBinding

spanner.instances.deleteTagBinding

spanner.instances.get

spanner.instances.getIamPolicy

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

spanner.sessions.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.databaseReader)

A principal with this role can:

  • Read from the Spanner database.
  • Execute SQL queries on the database.
  • View schema for the database.

Lowest-level resources where you can grant this role:

  • Database

spanner.databases.beginReadOnlyTransaction

spanner.databases.getDdl

spanner.databases.partitionQuery

spanner.databases.partitionRead

spanner.databases.read

spanner.databases.select

spanner.instancePartitions.get

spanner.instances.get

spanner.sessions.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.databaseRoleUser)

In conjunction with the IAM role Cloud Spanner Fine-grained Access User, grants permissions to individual Spanner database roles. Add a condition for each desired Spanner database role that includes the resource type of `spanner.googleapis.com/DatabaseRole` and the resource name ending with `/YOUR_SPANNER_DATABASE_ROLE`.

spanner.databaseRoles.use

(roles/spanner.databaseUser)

A principal with this role can:

  • Read from and write to the Spanner database.
  • Execute SQL queries on the database, including DML and Partitioned DML.
  • View and update schema for the database.

Lowest-level resources where you can grant this role:

  • Database

spanner.databaseOperations.*

  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list

spanner.databases.beginOrRollbackReadWriteTransaction

spanner.databases.beginPartitionedDmlTransaction

spanner.databases.beginReadOnlyTransaction

spanner.databases.changequorum

spanner.databases.getDdl

spanner.databases.partitionQuery

spanner.databases.partitionRead

spanner.databases.read

spanner.databases.select

spanner.databases.updateDdl

spanner.databases.updateTag

spanner.databases.write

spanner.instancePartitions.get

spanner.instances.get

spanner.sessions.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.fineGrainedAccessUser)

Grants permissions to use Spanner's fine-grained access control framework. To grant access to specific database roles, also add the `roles/spanner.databaseRoleUser` IAM role and its necessary conditions.

spanner.databaseRoles.list

spanner.databases.useRoleBasedAccess

(roles/spanner.restoreAdmin)

A principal with this role can restore databases from backups.

If you need to restore a backup to a different instance, apply this role at the project level or to both instances. This role cannot create backups.

Lowest-level resources where you can grant this role:

  • Instance

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.instancePartitions.get

spanner.instancePartitions.list

spanner.instances.createTagBinding

spanner.instances.deleteTagBinding

spanner.instances.get

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

(roles/spanner.viewer)

A principal with this role can:

  • View all Spanner instances (but cannot modify instances).
  • View all Spanner databases (but cannot modify or read from databases).

For example, you can combine this role with the roles/spanner.databaseUser role to grant a user with access to a specific database, but only view access to other instances and databases.

This role is recommended at the Google Cloud project level for users interacting with Cloud Spanner resources in the Google Cloud console.

Lowest-level resources where you can grant this role:

  • Project

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.databases.list

spanner.instanceConfigs.get

spanner.instanceConfigs.list

spanner.instancePartitions.get

spanner.instancePartitions.list

spanner.instances.get

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

基本角色

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

虽然 Spanner 支持以下基本角色,但您应该 尽可能使用前面显示的预定义角色之一。基本角色 包括适用于您的所有 Google Cloud 资源的广泛权限;在 相比之下,Spanner 的预定义角色则包括 仅适用于 Spanner 的权限。

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

自定义角色

如果 Spanner 的预定义角色无法解决您的 您可以定义自己的自定义角色,并为其分配相应的权限 由系统指定

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

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

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

但是,在 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 任务的自定义角色

如需确定在 Google Cloud 控制台,您可以确定该任务的工作流并编译 该工作流的权限。例如,要查看 表格,则可以在 Google Cloud 控制台中执行以下步骤:

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

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

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

下表列出了 Google Cloud 控制台中的操作。

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

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

创建分区

spanner.instancePartitions.list
spanner.instancePartitionOperations.get
spanner.instancePartitions.create

删除分区

spanner.instancePartitions.delete

修改分区

spanner.instancePartitionOperations.get
spanner.instancePartitions.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 如果要通过 **备份/还原** 在实例级(而非数据库级)查看更新。

Spanner IAM 政策管理

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

实例

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

后续步骤