Identity and Access Management (IAM)

使用 Identity and Access Management (IAM) 管理对资源的访问权限。 IAM 允许您为特定 Google Cloud资源指定更细化的访问权限,同时防止对其他资源的不必要访问。本页介绍 Firestore 的 IAM 权限和角色。如需详细了解 IAM,请参阅 IAM 文档

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

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

权限和角色

本部分概况了 Firestore 支持的权限和角色。

API 方法所需的权限

下表列出了调用者执行各个操作所必需的权限:

方法 所需权限
projects.databases.MongoDBCompatible
ListDatabases datastore.databases.getMetadata
ListIndexes datastore.indexes.list
Find datastore.entities.get
datastore.entities.list
Aggregate datastore.entities.get
datastore.entities.list
GetMore

与创建游标的调用所需的权限相同。

ListCollections datastore.entities.list
Count datastore.entities.list
Distinct datastore.entities.get
datastore.entities.list
CommitTransaction datastore.databases.get
AbortTransaction datastore.databases.get
EndSessions datastore.databases.get
KillCursors datastore.databases.get
Insert datastore.entities.create
Update datastore.entities.get
datastore.entities.list
datastore.entities.update
datastore.entities.create(仅适用于更新/插入)
FindAndModify datastore.entities.get
datastore.entities.list
datastore.entities.update(仅限替换或更新)
datastore.entities.create(仅限更新/插入)
datastore.entities.delete(仅限删除)
CreateCollection datastore.entities.create
projects.databases.indexes
create datastore.indexes.create
delete datastore.indexes.delete
get datastore.indexes.get
list datastore.indexes.list
projects.databases
create datastore.databases.create
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
恢复 datastore.backups.restoreDatabase
projects.locations
get datastore.locations.get
list datastore.locations.list
projects.databases.backupschedules
get datastore.backupSchedules.get
list datastore.backupSchedules.list
create datastore.backupSchedules.create
update datastore.backupSchedules.update
delete datastore.backupSchedules.delete
projects.locations.backups
get datastore.backups.get
list datastore.backups.list
delete datastore.backups.delete
projects.databases.usercreds
get datastore.userCreds.get
list datastore.userCreds.list
create datastore.userCreds.create
enable datastore.userCreds.update
disable datastore.userCreds.update
resetPassword datastore.userCreds.update
delete datastore.userCreds.delete

预定义角色

有了 IAM,Firestore 中的每个 API 方法都要求提出 API 请求的账号具有使用相应资源的适当权限。您可以通过设置向用户、群组或服务账号授予角色的政策来授予权限。除了所有者、编辑者和查看者这些基本角色外,您还可以向您的项目的用户授予 Firestore 角色。

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

角色 权限 说明
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
对 Firestore 的完全访问权限。
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
对 Firestore 数据库中的数据的读/写访问权限。适用于应用开发者和服务账号。
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
对所有 Firestore 资源的读取访问权限。
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.indexes.*

resourcemanager.projects.get
resourcemanager.projects.list
拥有索引定义的完全管理权限。
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
对 Firestore 数据库中备份时间表的读取权限。
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
对 Firestore 数据库中备份时间表的完整访问权限。
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
对 Firestore 位置中备份信息的读取权限。
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
对 Firestore 位置中的备份拥有完全访问权限。
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
能够将 Firestore 备份恢复到新数据库。此角色还可用于创建新数据库,不一定需要通过从备份恢复来创建。
roles/datastore.statisticsViewer resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.insights.get
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
datastore.statistics.list
datastore.statistics.get
拥有对分析洞见、统计数据和 Key Visualizer 扫描的读取权限。
roles/datastore.userCredsViewer datastore.userCreds.get
datastore.userCreds.list
对 Firestore 数据库中用户凭据的读取权限。
roles/datastore.userCredsAdmin datastore.userCreds.get
datastore.userCreds.list
datastore.userCreds.create
datastore.userCreds.update
datastore.userCreds.delete
datastore.databases.list
datastore.databases.getMetadata
对 Firestore 数据库中用户凭据的完全访问权限。

自定义角色

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

权限

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

数据库权限名称 说明
datastore.databases.get 开始或回滚事务。
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.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.operations.cancel 取消长时间运行的操作。
datastore.operations.delete 删除长时间运行的操作。
datastore.operations.get 获取长时间运行的操作的最新状态。
datastore.operations.list 列出长时间运行的操作。
项目权限名称 说明
resourcemanager.projects.get 浏览项目中的资源。
resourcemanager.projects.list 列出拥有的项目。
位置权限名称 说明
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 从备份恢复数据库。
数据分析权限名称 说明
datastore.insights.get 获取资源的分析洞见
用户凭据权限名称 说明
datastore.userCreds.get 获取有关用户凭据的详细信息。
datastore.userCreds.list 列出可用的用户凭据。
datastore.userCreds.create 创建用户凭据。
datastore.userCreds.update 启用或停用用户凭据,或重置用户密码。
datastore.userCreds.delete 删除用户凭据。

角色更改延迟时间

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

管理 Firestore IAM

您可以使用 Google Cloud 控制台、IAM API 或 gcloud 命令行工具来获取和设置 IAM 政策。如需了解详情,请参阅授予、更改和撤消项目成员的访问权限

配置条件式访问权限

您可以使用 IAM Conditions 定义和强制执行有条件的访问权限控制。

例如,以下条件会在指定日期之前向主账号分配 datastore.user 角色:

{
  "role": "roles/datastore.user",
  "members": [
    "user:[email protected]"
  ],
  "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 以访问一个或多个数据库,请参阅配置数据库访问条件

后续步骤