借助 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
权限的用户可以对数据库执行 SQL select 语句。您不能直接授予用户权限,但可以为他们分配预定义角色或自定义角色,这些角色本身会具有一项或多项权限。
下表列出了与 Spanner。
实例配置
以下权限适用于 Spanner 实例配置。如需了解详情,请参阅实例配置参考 适用于 REST 和 远程过程调用 API。
实例配置权限名称 | 说明 |
---|---|
spanner.instanceConfigs.create |
创建自定义实例配置。 |
spanner.instanceConfigs.delete |
删除自定义实例配置。 |
spanner.instanceConfigs.get |
获取实例配置。 |
spanner.instanceConfigs.list |
列出一组实例配置。 |
spanner.instanceConfigs.update |
更新自定义实例配置。 |
实例配置操作
以下权限适用于 Spanner 实例配置 操作。如需了解详情,请参阅 REST 和 RPC 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 和 RPC 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.backupSchedules.create |
创建备份时间表。此外,还需要对源数据库使用 spanner.databases.createBackup 。 |
spanner.backupSchedules.get |
获取备份时间表。 |
spanner.backupSchedules.update |
更新备份时间表。 |
spanner.backupSchedules.delete |
删除备份时间表。 |
spanner.backupSchedules.list |
列出备份时间表。 |
会话
以下权限适用于 Spanner 会话。如需了解详情,请参阅 REST 和 RPC API 的数据库参考文档。
会话权限名称 | 说明 |
---|---|
spanner.sessions.create |
创建会话。 |
spanner.sessions.get |
获取会话。 |
spanner.sessions.delete |
删除会话。 |
spanner.sessions.list |
列出会话。 |
预定义角色
预定义角色是一个或多个权限的集合。例如,预定义角色 roles/spanner.databaseUser
包含 spanner.databases.read
和 spanner.databases.write
权限。Spanner 有两种预定义角色:
- 人员角色:分配给用户或群组的角色,允许他们对项目中的资源执行操作。
- 机器角色:分配给服务账号的角色,允许以这些服务账号的身份运行的机器对项目中的资源执行操作。
下表列出了 IAM 访问权限控制预定义的角色,包括与每个角色关联的权限列表:
Role | Permissions |
---|---|
Cloud Spanner Admin( Has complete access to all Spanner resources in a Google Cloud project. A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Backup Admin( A principal with this role can:
This role cannot restore a database from a backup. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Backup Writer( 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:
|
|
Cloud Spanner Database Admin( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader with DataBoost( Includes all permissions in the spanner.databaseReader role enabling access to read and/or query a Cloud Spanner database using instance resources, as well as the permission to access the database with Data Boost, a fully managed serverless service that provides independent compute resources. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Role User( 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`. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database User( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Fine-grained Access User( 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. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Restore Admin( 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:
|
|
Cloud Spanner Viewer( A principal with this role can:
For example, you can combine this role with the 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:
|
|
基本角色
基本角色指在引入 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.databases.beginOrRollbackReadWriteTransaction
|
创建备份 |
spanner.backups.create
|
恢复数据库 |
spanner.databases.create
|
用于 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.select 、spanner.sessions.create 、spanner.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 控制台中的操作。
操作 | 权限 |
---|---|
查看“实例”页面中的实例列表 |
|
查看“实例”页面的“权限”标签页中的列表 |
|
在“实例”页面的“权限”标签页中添加主账号 |
|
从实例列表中选择一个实例以查看“实例详情”页面 |
|
创建实例 |
|
删除实例 |
|
修改实例 |
|
创建分区 |
|
删除分区 |
|
修改分区 |
|
查看“实例详情”页面或“数据库详细信息”页面上“监视器”标签中的图表 |
|
查看“实例详情”页面中的数据库列表 |
|
查看“数据库详细信息”页面的“权限”标签页中的列表 |
|
在“数据库详细信息”页面的“权限”标签页中添加主账号 |
|
从数据库列表中选择一个数据库,并查看“数据库详细信息”页面中的架构 |
|
创建数据库 |
|
删除数据库 |
|
创建表 更新表架构 |
|
查看“数据库详细信息”页面上“数据”标签中的数据 创建并运行查询 |
|
修改表中的数据 |
|
查看“备份/恢复”页面 |
|
查看备份操作列表 |
|
查看恢复操作列表 |
|
创建备份 |
|
从备份中恢复数据库 |
|
更新备份 |
|
删除备份 |
|
创建备份时间表 |
|
更新备份时间表 |
|
删除备份时间表 |
|
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 |
后续步骤
- 详细了解 Identity and Access Management。
- 了解如何为 Spanner 数据库、实例或 Google Cloud 项目应用 IAM 角色。
- 了解如何控制对 Google Cloud 资源的访问权限,包括 来自互联网的 Spanner。