身分與存取權管理 (IAM)
使用 Identity and Access Management (IAM) 管理資源存取權。 IAM 可讓您以更精細的方式授予特定 Google Cloud資源的存取權,避免其他資源遭到未經授權者擅自存取。本頁面說明 Firestore 的 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 (僅適用於 upsert) |
|
FindAndModify |
datastore.entities.getdatastore.entities.listdatastore.entities.update (僅限取代或更新)datastore.entities.create (僅限 upsert)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 |
|
| restore | 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 條件定義及強制執行條件式存取權控管。
舉例來說,下列條件會指派主體 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 條件,請參閱設定暫時存取權。
如要瞭解如何為一或多個資料庫的存取權設定 IAM 條件,請參閱「設定資料庫存取條件」。