IAM 概览

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

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

权限

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

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

实例配置

以下权限适用于 Spanner 实例配置。如需了解详情,请参阅 RESTRPC API 的实例配置参考。

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

实例配置操作

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

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

实例

以下权限适用于 Spanner 实例。如需了解详情,请参阅 REST API 和 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 和 RPC API 的实例参考文档。

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

数据库数量

以下权限适用于 Spanner 数据库。如需了解详情,请参阅 REST API 和 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 API 和 RPC API 的数据库参考文档。

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

数据库操作

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

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

备份

以下权限适用于 Spanner 备份。如需了解详情,请参阅 RESTRPC 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 备份操作。如需了解详情,请参阅 RESTRPC API 的数据库参考文档。

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

会话

以下权限适用于 Spanner 会话。如需了解详情,请参阅 RESTRPC 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.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.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.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.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.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.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.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.getDdl

spanner.databases.partitionQuery

spanner.databases.partitionRead

spanner.databases.read

spanner.databases.select

spanner.databases.updateDdl

spanner.databases.updateTag

spanner.databases.write

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.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.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 控制台中执行以下步骤:

Step 权限
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

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

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 对 Spanner 实例、数据库和备份资源获取、设置和测试 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

后续步骤