概览
借助身份和访问权限管理 (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 实例配置(请参阅实例配置参考文档:REST 和 RPC)。
实例配置权限名称 | 说明 |
---|---|
spanner.instanceConfigs.list |
列出一组实例配置。 |
spanner.instanceConfigs.get |
获取实例配置。 |
实例
以下权限适用于 Cloud Spanner 实例(请参阅实例参考文档:REST 和 RPC)。
实例权限名称 | 说明 |
---|---|
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 实例操作(请参阅实例参考文档:REST 和 RPC)。
实例操作权限名称 | 说明 |
---|---|
spanner.instanceOperations.list |
列出实例操作。 |
spanner.instanceOperations.get |
获取特定的实例操作。 |
spanner.instanceOperations.cancel |
取消实例操作。 |
spanner.instanceOperations.delete |
删除实例操作。 |
数据库
以下权限适用于 Cloud Spanner 数据库(请参阅数据库参考文档:REST 和 RPC)。
数据库权限名称 | 说明 |
---|---|
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 数据库操作(请参阅数据库参考文档:REST 和 RPC)。
数据库操作权限名称 | 说明 |
---|---|
spanner.databaseOperations.list |
列出数据库并恢复数据库操作。 |
spanner.databaseOperations.get |
获取特定的数据库操作。 |
spanner.databaseOperations.cancel |
取消数据库操作。 |
spanner.databaseOperations.delete |
删除数据库操作。 |
备份
以下权限适用于 Cloud Spanner 备份(请参阅备份参考文档:REST 和 RPC)。
备份权限名称 | 说明 |
---|---|
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 备份操作(请参阅数据库参考文档:REST 和 RPC)。
备份操作权限名称 | 说明 |
---|---|
spanner.backupOperations.list |
列出备份操作。 |
spanner.backupOperations.get |
获取特定的备份操作。 |
spanner.backupOperations.cancel |
取消备份操作。 |
会话
以下权限适用于 Cloud Spanner 数据库(请参阅会话参考文档:REST 和 RPC)。
会话权限名称 | 说明 |
---|---|
spanner.sessions.create |
创建会话。 |
spanner.sessions.get |
获取会话。 |
spanner.sessions.delete |
删除会话。 |
spanner.sessions.list |
列出会话。 |
预定义角色
预定义角色是一个或多个权限的集合。例如,预定义角色 roles/spanner.databaseUser
包含 spanner.databases.read
和 spanner.database.write
权限。Cloud Spanner 有两种预定义角色:
- 人员角色:分配给用户或群组的角色,允许他们对项目中的资源执行操作。
- 机器角色:分配给服务帐号的角色,允许以这些服务帐号的身份运行的机器对项目中的资源执行操作。
下表列出了 Cloud Spanner IAM 预定义角色,包括与每个角色相关的权限列表:
角色 | 名称 | 说明 | 权限 | 最低资源要求 |
---|---|---|---|---|
roles/ |
Cloud Spanner Admin |
对某个 Google Cloud 项目中的所有 Cloud Spanner 资源拥有完整访问权限。具有此角色的成员可以执行以下操作:
|
|
项目 |
roles/ |
Cloud Spanner Backup Admin |
具有此角色的成员可以执行以下操作:
此角色无法从备份恢复数据库。 |
|
实例 |
roles/ |
Cloud Spanner Backup Writer | 此角色旨在供自动创建备份的脚本使用。具有此角色的成员可以创建备份,但无法更新或删除备份。 |
|
实例 |
roles/ |
Cloud Spanner Database Admin |
具有此角色的成员可以执行以下操作:
|
|
实例 |
roles/ |
Cloud Spanner Database Reader |
具有此角色的成员可以执行以下操作:
|
|
数据库 |
roles/ |
Cloud Spanner Database User |
具有此角色的成员可以执行以下操作:
|
|
数据库 |
roles/ |
Cloud Spanner Restore Admin |
具有此角色的成员可以从备份恢复数据库。 如果您需要将备份恢复到其他实例,请在项目级层应用此角色,或将项目级层应用于这两个实例。此角色无法创建备份。 |
|
实例 |
roles/ |
Cloud Spanner Viewer |
具有此角色的成员可以执行以下操作:
例如,您可以将此角色与 对于在 Google Cloud Console 中与 Cloud Spanner 资源互动的用户,建议在 Google Cloud 项目级层使用此角色。 |
|
项目 |
基本角色
基本角色指在引入 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.databases.beginOrRollbackReadWriteTransaction
|
创建备份 |
spanner.backups.create
|
恢复数据库 |
spanner.databases.create
|
用于 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.get 、spanner.databases.getDdl |
6. 查看表中的数据 | spanner.databases.select 、spanner.sessions.create 、spanner.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 中的操作所需的权限。
操作 | 权限 |
---|---|
查看“实例”页面中的实例列表 |
|
查看“实例”页面的“权限”标签中的列表 |
|
在“实例”页面的“权限”标签中添加成员 |
|
从实例列表中选择一个实例以查看“实例详情”页面 |
|
创建实例 |
|
删除实例 |
|
修改实例 |
|
查看“实例详情”页面或“数据库详细信息”页面上“监视器”标签中的图表 |
|
查看“实例详情”页面中的数据库列表 |
|
查看“数据库详细信息”页面的“权限”标签中的列表 |
|
在“数据库详细信息”页面的“权限”标签中添加成员 |
|
从数据库列表中选择一个数据库,并查看“数据库详细信息”页面中的架构 |
|
创建数据库 |
|
删除数据库 |
|
创建表 更新表架构 |
|
查看“数据库详细信息”页面上“数据”标签中的数据 创建并运行查询 |
|
修改表中的数据 |
|
查看“备份/恢复”标签页 |
|
查看备份操作列表 |
|
查看恢复操作列表 |
|
创建备份 |
|
从备份中恢复数据库 |
|
更新备份 |
|
删除备份 |
|
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 |