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 管理员访问权限,请向主账号授予 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 政策。
- 对于 Google Cloud 控制台,请参阅通过 Google Cloud 控制台进行访问控制。
- 对于 IAM 方法,请参阅通过 API 进行访问权限控制。
- 对于 gcloud CLI,请参阅通过 gcloud 工具进行访问权限控制。
配置条件式访问权限
您可以使用 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 以访问一个或多个数据库,请参阅配置数据库访问条件。