身分與存取權管理 (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.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 (僅適用於 upsert) |
FindAndModify |
datastore.entities.get datastore.entities.list datastore.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 |
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 資料庫中使用者憑證的完整存取權限。 |
自訂角色
如果預先定義的角色無法滿足您的業務需求,您可以使用自訂角色,並設定這些角色的權限:
建立及管理標記所需的角色
如果任何標籤出現在建立或還原動作中,則需要某些角色。如要進一步瞭解如何建立標記鍵/值組合,然後將其與資料庫資源建立關聯,請參閱「建立及管理標記」。
必須具備下列權限。
查看代碼
datastore.databases.listTagBindings
datastore.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.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 條件,請參閱「設定資料庫存取條件」。