身份和访问权限管理 (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.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 列出可用的数据库位置。创建新数据库需要此权限。

预定义角色

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

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

角色 权限 说明
roles/datastore.owner
(包含
roles/appengine.appAdmin
appengine.applications.get
datastore.databases.*
datastore.entities.*
datastore.indexes.*
datastore.namespaces.*
datastore.operations.*
datastore.statistics.*
resourcemanager.projects.get
resourcemanager.projects.list
对数据库实例的完整访问权限。
roles/datastore.owner
(不含
roles/appengine.appAdmin
appengine.applications.get
datastore.databases.*
datastore.entities.*
datastore.indexes.*
datastore.namespaces.*
datastore.operations.*
datastore.statistics.*
resourcemanager.projects.get
resourcemanager.projects.list
对数据库实例的完整访问权限,但用户、群组或服务帐号无法执行以下操作:
roles/datastore.user appengine.applications.get
datastore.databases.get
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.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.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
用于管理导入和导出的完整访问权限。
roles/datastore.indexAdmin appengine.applications.get
datastore.indexes.*
resourcemanager.projects.get
resourcemanager.projects.list
拥有索引定义的完全管理权限。

自定义角色

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

API 方法所需的权限

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

方法 所需权限
allocateIds datastore.entities.allocateIds
beginTransaction 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 Console、IAM 方法或 Google Cloud CLI 来获取和设置 IAM 政策。

后续步骤