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.getdatastore.entities.list | 
|
Aggregate | 
datastore.entities.getdatastore.entities.list | 
|
GetMore | 
创建游标的调用所需的权限。  | 
|
ListCollections | 
datastore.entities.list | 
|
Count | 
datastore.entities.list | 
|
Distinct | 
datastore.entities.getdatastore.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.getdatastore.entities.listdatastore.entities.updatedatastore.entities.create(仅用于更新/插入) | 
|
FindAndModify | 
datastore.entities.getdatastore.entities.listdatastore.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 | 
|
clone | 
datastore.databases.clone | 
克隆数据库。
 如果您的  
 如果您想通过列出绑定来验证标记绑定是否已成功设置,则需要以下额外权限: 
  | 
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.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list | 
对 Firestore 的完全访问权限。 | 
roles/datastore.user | 
  appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.indexes.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list | 
对 Firestore 数据库中的数据的读/写访问权限。适用于应用开发者和服务账号。 | 
roles/datastore.viewer | 
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.indexes.getdatastore.indexes.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list | 
对所有 Firestore 资源的读取访问权限。 | 
roles/datastore.indexAdmin | 
appengine.applications.getdatastore.databases.getMetadatadatastore.indexes.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list | 
拥有索引定义的完全管理权限。 | 
roles/datastore.backupSchedulesViewer | 
  datastore.backupSchedules.getdatastore.backupSchedules.list | 
拥有对 Firestore 数据库中备份时间表的读取权限。 | 
roles/datastore.backupSchedulesAdmin | 
  datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata | 
拥有对 Firestore 数据库中的备份时间表的完整访问权限。 | 
roles/datastore.backupsViewer | 
  datastore.backups.getdatastore.backups.list | 
拥有对 Firestore 位置中的备份信息的读取权限。 | 
roles/datastore.backupsAdmin | 
  datastore.backups.getdatastore.backups.listdatastore.backups.delete | 
拥有对 Firestore 位置中的备份的完整访问权限。 | 
roles/datastore.restoreAdmin | 
  datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get | 
能够将 Firestore 备份恢复到新数据库中。此角色还让您能够创建新数据库,但不一定是通过从备份进行恢复来创建。 | 
roles/datastore.cloneAdmin | 
  datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get | 
能够将 Firestore 数据库克隆到新数据库中。此角色还让您能够创建新数据库,但不一定是通过克隆来实现。 | 
roles/datastore.statisticsViewer | 
  resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get | 
拥有对分析洞见、统计数据和 Key Visualizer 扫描的读取权限。 | 
roles/datastore.userCredsViewer | 
  datastore.userCreds.getdatastore.userCreds.list | 
拥有对 Firestore 数据库中的用户凭证的读取权限。 | 
roles/datastore.userCredsAdmin | 
  datastore.userCreds.getdatastore.userCreds.listdatastore.userCreds.createdatastore.userCreds.updatedatastore.userCreds.deletedatastore.databases.listdatastore.databases.getMetadata | 
拥有对 Firestore 数据库中的用户凭证的完整访问权限。 | 
自定义角色
如果预定义角色不能满足您的独特业务需求,您可以使用指定的权限定义自己的自定义角色:
创建和管理标记所需的角色
如果在创建或恢复操作中表示任何标记,则需要某些角色。如需详细了解如何在将标记键值对与数据库资源相关联之前创建这些标记键值对,请参阅创建和管理标记。
以下列出的权限是必需的。
查看代码
datastore.databases.listTagBindingsdatastore.databases.listEffectiveTags
管理资源上的标记
您要附加标记值的数据库资源需要以下权限。
datastore.databases.createTagBinding
权限
下表列出了 Firestore 支持的权限。
| 数据库权限名称 | 说明 | |
|---|---|---|
datastore.databases.get | 
开始或回滚事务。 | |
datastore.databases.getMetadata | 
从数据库中读取元数据。 | |
datastore.databases.list | 
列出项目中的数据库。 | |
datastore.databases.create | 
创建数据库。 | |
datastore.databases.update | 
更新数据库。 | |
datastore.databases.delete | 
删除数据库。 | |
datastore.databases.clone | 
克隆数据库。 | |
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: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,请参阅配置数据库访问条件。