Identity and Access Management (IAM)

Google Cloud 提供 Identity and Access Management (IAM),可实现对特定 Google Cloud 资源更细化的访问权限,并防止对其他资源的不当访问。本页面介绍 Datastore 模式 Firestore 的 IAM 角色。如需详细了解 IAM,请参阅 IAM 文档

IAM 允许您采用最小权限安全原则,因此您只授予对您资源的必要访问权限。

IAM 允许您通过设置 IAM 策略来控制谁(用户)哪些资源具有什么权限(角色)。您可以使用 IAM 政策向用户授予特定角色,从而给予用户特定权限。例如,您可以向某个用户授予 datastore.indexAdmin 角色,从而使该用户可以创建、修改、删除、列出或查看索引。

权限和角色

本部分汇总了 Datastore 模式 Firestore 支持的权限和角色。

权限

下表列出了 Datastore 模式 Firestore 支持的权限。

数据库权限名称 说明
datastore.databases.export 从数据库中导出实体。
datastore.databases.get 开始或回滚事务。
使用空更新提交。
datastore.databases.import 将实体导入到数据库中。
datastore.databases.getMetadata 从数据库中读取元数据。
datastore.databases.list 列出项目中的数据库。
datastore.databases.create 创建数据库。
datastore.databases.update 更新数据库。
datastore.databases.delete 删除数据库。
datastore.databases.createTagBinding 为数据库创建标记绑定。
datastore.databases.deleteTagBinding 删除数据库的标记绑定。
datastore.databases.listTagBindings 列出数据库的所有代码绑定。
datastore.databases.listEffectiveTagBindings 列出数据库的有效标记绑定。
实体权限名称 说明
datastore.entities.allocateIds 使用不完整的键路径为键分配 ID。
datastore.entities.create 创建实体。
datastore.entities.delete 删除实体。
datastore.entities.get 读取实体。
datastore.entities.list 列出项目中实体的键。
(如需访问实体数据,则需要 datastore.entities.get。)
datastore.entities.update 更新实体。
索引权限名称 说明
datastore.indexes.create 创建索引。
datastore.indexes.delete 删除索引。
datastore.indexes.get 读取索引的元数据。
datastore.indexes.list 列出项目中的索引。
datastore.indexes.update 更新索引。
命名空间权限名称 说明
datastore.namespaces.get 从命名空间检索元数据。
datastore.namespaces.list 列出项目中的命名空间。
操作权限名称 说明
datastore.operations.cancel 取消长时间运行的操作。
datastore.operations.delete 删除长时间运行的操作。
datastore.operations.get 获取长时间运行的操作的最新状态。
datastore.operations.list 列出长时间运行的操作。
项目权限名称 说明
resourcemanager.projects.get 浏览项目中的资源。
resourcemanager.projects.list 列出拥有的项目。
统计信息权限名称 说明
datastore.statistics.get 检索统计信息实体。
datastore.statistics.list 列出统计信息实体的键。
(如需访问统计信息实体数据,则需要 datastore.statistics.get。)
App Engine 权限名称 说明
appengine.applications.get 所有 App Engine 应用配置和设置的只读权限。
位置权限名称 说明
datastore.locations.get 获取有关数据库位置的详细信息。创建新数据库需要此权限。
datastore.locations.list 列出可用的数据库位置。创建新数据库需要此权限。
Key Visualizer 权限名称 说明
datastore.keyVisualizerScans.get 获取有关 Key Visualizer 扫描的详细信息。
datastore.keyVisualizerScans.list 列出可用的 Key Visualizer 扫描。
“备份时间表”权限名称 说明
datastore.backupSchedules.get 获取有关备份时间表的详细信息。
datastore.backupSchedules.list 列出可用的备份时间表。
datastore.backupSchedules.create 创建备份时间表。
datastore.backupSchedules.update 更新备份时间表。
datastore.backupSchedules.delete 删除备份时间表。
备份权限名称 说明
datastore.backups.get 获取备份的详细信息。
datastore.backups.list 列出可用的备份。
datastore.backups.delete 删除备份。
datastore.backups.restoreDatabase 使用备份恢复数据库。

预定义角色

使用 IAM 时,每个 Datastore API 方法都要求发出 API 请求的账号具有适当的资源使用权限。您可以通过设置向用户、群组或服务账号授予角色的政策来授予权限。除了 Owner、Editor 和 Viewer 这些基本角色之外,您还可以为项目用户授予 Datastore 模式 Firestore 角色。

下表列出了 Datastore 模式 Firestore 的 IAM 角色。您可以向用户、群组或服务账号授予多个角色。

角色 权限 说明
roles/datastore.owner appengine.applications.get
datastore.*
resourcemanager.projects.get
resourcemanager.projects.list
拥有对数据库实例的完全访问权限。
若要授予 Datastore Admin 访问权限,请将 appengine.appAdmin 角色授予主账号。
roles/datastore.user appengine.applications.get
datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list
resourcemanager.projects.get
resourcemanager.projects.list
对 Datastore 模式数据库中数据的读写权限。适用于应用开发者和服务账号。
roles/datastore.viewer appengine.applications.get
datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.indexes.get
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list
resourcemanager.projects.get
resourcemanager.projects.list
对所有 Datastore 模式数据库资源的读取权限。
roles/datastore.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.getMetadata
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
用于管理导入和导出的完整访问权限。
roles/datastore.indexAdmin appengine.applications.get
datastore.databases.getMetadata
datastore.indexes.*
resourcemanager.projects.get
resourcemanager.projects.list
拥有索引定义的完全管理权限。
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
拥有对 Key Visualizer 扫描结果的完整访问权限。
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
拥有对 Datastore 模式数据库中备份时间表的读取权限。
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
拥有对 Datastore 模式数据库中备份时间表的完全访问权限。
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
对 Datastore 模式位置中的备份信息的读取权限。
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
对 Datastore 模式位置中的备份拥有完整访问权限。
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
能够将 Datastore 模式备份恢复到新数据库。此角色还可用于创建新数据库,不一定需要通过从备份恢复来创建。

自定义角色

如果预定义角色不能满足您的独特业务需求,您可以使用指定的权限定义自己的自定义角色:

API 方法所需的权限

下表列出了调用者调用每种方法所必需的权限:

方法 所需权限
allocateIds datastore.entities.allocateIds
beginTransaction datastore.databases.get
包含空更新的 commit datastore.databases.get
commit(用于插入) datastore.entities.create
commit(用于插入/更新) datastore.entities.create
datastore.entities.update
commit(用于更新) datastore.entities.update
commit(用于删除) datastore.entities.delete
commit(用于查找) datastore.entities.get

如需进行与元数据或统计信息相关的查询,请参阅元数据和统计信息所需权限
commit(用于查询) datastore.entities.list
datastore.entities.get(如果查询不是仅限于键的查询

如需了解与元数据或统计信息相关的查询,请参阅元数据和统计信息所需权限
lookup datastore.entities.get

如需进行与元数据或统计信息相关的查询,请参阅元数据和统计信息所需权限
rollback datastore.databases.get
runQuery datastore.entities.list
datastore.entities.get(如果查询不是仅限于键的查询

如需了解与元数据或统计信息相关的查询,请参阅元数据和统计信息所需权限
具有不分类查询runQuery datastore.entities.get
datastore.entities.list
datastore.statistics.get
datastore.statistics.list

元数据和统计信息所需权限

下表列出了调用者调用关于元数据统计信息的方法时必须具备的权限。

方法 所需权限
对种类名称与 __Stat_*__ 匹配的实体进行的 lookup datastore.statistics.get
使用名称与 __Stat_*__ 匹配的种类的 runQuery datastore.statistics.get
datastore.statistics.list
使用 __namespace__ 种类的 runQuery datastore.namespaces.get
datastore.namespaces.list

创建 Datastore 模式数据库实例所需的角色

如需创建新的 Datastore 模式数据库实例,您需要 Owner 角色Datastore Owner 角色

Datastore 模式数据库需要一个处于活跃状态的 App Engine 应用。如果项目没有应用,则 Datastore 模式 Firestore 会为您创建一个应用。在这种情况下,您需要 Owner 角色的 appengine.applications.create 权限或包含该权限的 IAM 自定义角色所提供的这一权限。

角色更改延迟时间

Datastore 模式 Firestore 会将 IAM 权限缓存 5 分钟,因此角色更改最多需要 5 分钟才会生效。

管理 IAM

您可以使用 Google Cloud 控制台、 IAM 方法或 Google Cloud CLI

配置条件式访问权限

您可以使用 IAM Conditions 执行以下操作: 定义和实施条件式访问权限控制。

例如,以下条件会将 datastore.user 分配给主账号 指定日期之前的所有角色:

{
  "role": "roles/datastore.user",
  "members": [
    "user:travis@example.com"
  ],
  "condition": {
    "title": "Expires_December_1_2023",
    "description": "Expires on December 1, 2023",
    "expression":
      "request.time < timestamp('2023-12-01T00:00:00.000Z')"
  }
}

如需了解如何为临时访问权限定义 IAM Conditions 条件,请参阅配置临时访问权限

如需了解如何配置 IAM Conditions 以访问一个或多个数据库,请参阅配置数据库访问条件

后续步骤