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 以访问一个或多个数据库,请参阅配置数据库访问条件。