Cloud Spanner 的存取權控管

總覽

Cloud 身分與存取權管理 (IAM) 可讓您控制使用者和群組對專案的 Cloud Spanner 資源、Cloud Spanner 執行個體和 Cloud Spanner 資料庫層級的存取權。舉例來說,您可以指定賦予使用者在專案中特定執行個體內特定資料庫的完整控制權,但是不能建立、修改或刪除專案內的任何執行個體。使用 Cloud Spanner IAM 可讓您授予使用者或群組權限,而無需個別修改每一個 Cloud Spanner 執行個體或資料庫權限。

本文件著重說明與 Cloud Spanner 相關的 IAM 權限,以及授予這些權限的 IAM 角色。如需 IAM 和其功能的相關詳細說明,請參閱開發人員專用的 Cloud 身分與存取權管理指南,其中以管理 IAM 政策一節最為重要。

權限

權限的設定可幫助使用者在 Cloud Spanner 資源中執行特定操作。例如:spanner.databases.read 權限可讓使用者使用 Cloud Spanner 的讀取 API 來讀取資料庫,而 spanner.databases.select 可讓使用者在資料庫上執行 SQL Select 陳述式。您不能直接授予使用者特定權限,而只能授予他們預先定義的角色自訂角色,每個角色可能具備一或多項權限。

下表列出了與 Cloud Spanner 相關的 IAM 權限。

執行個體設定

下列權限適用於 Cloud Spanner 執行個體設定 (請參閱執行個體設定參考資料:RESTRPC)。

執行個體設定權限名稱 說明
spanner.instanceConfigs.list 列出一組執行個體設定。
spanner.instanceConfigs.get 取得執行個體設定。

執行個體

下列權限適用於 Cloud Spanner 執行個體 (請參閱執行個體參考資料:RESTRPC)。

執行個體權限名稱 說明
spanner.instances.create 建立執行個體。
spanner.instances.list 列出執行個體。
spanner.instances.get 取得特定執行個體的設定。
spanner.instances.getIamPolicy 取得執行個體的 IAM 政策。
spanner.instances.update 更新執行個體。
spanner.instances.setIamPolicy 設定執行個體的 IAM 政策。
spanner.instances.delete 刪除執行個體。

執行個體作業

下列權限適用於 Cloud Spanner 執行個體作業 (請參閱執行個體參考資料:RESTRPC)。

執行個體作業權限名稱 說明
spanner.instanceOperations.list 列出執行個體作業。
spanner.instanceOperations.get 取得特定執行個體作業。
spanner.instanceOperations.cancel 取消執行個體作業。
spanner.instanceOperations.delete 刪除執行個體作業。

資料庫

下列權限適用於 Cloud Spanner 資料庫 (請參閱資料庫參考資料:RESTRPC)。

資料庫權限名稱 說明
spanner.databases.beginPartitionedDmlTransaction 執行分區資料操縱語言 (DML) 陳述式。
spanner.databases.create 建立資料庫。
spanner.databases.list 列出資料庫。
spanner.databases.update 更新資料庫中繼資料。
spanner.databases.updateDdl 更新資料表結構定義。
spanner.databases.get 取得資料庫中繼資料。
spanner.databases.getDdl 取得資料庫結構定義。
spanner.databases.getIamPolicy 取得資料庫的 IAM 政策。
spanner.databases.setIamPolicy 設定資料庫的 IAM 政策。
spanner.databases.beginReadOnlyTransaction 開始 Cloud Spanner 資料庫上的唯讀交易
spanner.databases.beginOrRollbackReadWriteTransaction 開始或復原 Cloud Spanner 資料庫上的唯讀交易
spanner.databases.read 使用讀取 API 從資料庫中讀取。
spanner.databases.select 在資料庫上執行 SQL Select 陳述式。
spanner.databases.write 寫入資料庫。
spanner.databases.drop 捨棄資料庫。

資料庫作業

下列權限適用於 Cloud Spanner 資料庫作業 (請參閱資料庫參考資料:RESTRPC)。

資料庫作業權限名稱 說明
spanner.databaseOperations.list 列出資料庫作業。
spanner.databaseOperations.get 取得特定資料庫作業。
spanner.databaseOperations.cancel 取消資料庫作業。
spanner.databaseOperations.delete 刪除資料庫作業。

工作階段

下列權限適用於 Cloud Spanner 工作階段 (請參閱資料庫參考資料:RESTRPC)。

工作階段權限名稱 說明
spanner.sessions.create 建立工作階段。
spanner.sessions.get 取得工作階段。
spanner.sessions.delete 刪除工作階段。
spanner.sessions.list 列出工作階段。

預先定義的角色

預先定義角色是由一或多個權限集合而成。舉例來說,預先定義的角色 roles/spanner.databaseUser 包含權限 spanner.databases.readspanner.database.write。Cloud Spanner 的預先定義角色包含兩種類型:

  • 人類角色:授予使用者或群組,讓他們能夠對專案中的資源進行操作。
  • 機器角色:授予服務帳戶,讓機器有如這些服務帳戶般,對專案中的資源進行操作。

下表列出 Cloud Spanner IAM 預先定義的角色,包括與每個角色關聯的權限清單:

角色 權限 說明
roles/spanner.admin

(人類角色)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.*
spanner.instanceConfigs.*
spanner.instanceOperations.*
spanner.sessions.*
建議在 Google Cloud「專案」層級授予。擁有 Google Cloud 專案中所有 Cloud Spanner 資源的完整存取權。使用這個角色的主體可以:
  • 授予並撤銷專案中所有 Cloud Spanner 資源的其他主體。
  • 分配並刪除應收費的 Cloud Spanner 資源。
  • 對 Cloud Spanner 資源發出取得/列出/修改作業。
  • 讀取和寫入專案中所有 Cloud Spanner 資料庫。
  • 擷取專案中繼資料。
roles/spanner.databaseAdmin

(人類角色)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.list
spanner.instances.get
spanner.instances.getIamPolicy
spanner.sessions.*
建議在 Google Cloud「專案」層級授予。使用這個角色的主體可以:
  • 取得/列出專案中所有 Cloud Spanner 執行個體。
  • 建立/列出/捨棄授予權限的執行個體中的資料庫。
  • 授予/撤銷專案資料庫的存取權限。
  • 讀取和寫入專案中所有 Cloud Spanner 資料庫。
roles/spanner.databaseReader

(機器角色)
spanner.databases.beginReadOnlyTransaction
spanner.databases.getDdl
spanner.databases.read
spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
spanner.sessions.get
建議在「資料庫」層級授予。使用這個角色的主體可以:
  • 從 Cloud Spanner 資料庫讀取。
  • 在資料庫上執行 SQL 查詢。
  • 查看資料庫結構定義。
roles/spanner.databaseUser

(機器角色)
spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.beginPartitionedDmlTransaction
spanner.databases.beginReadOnlyTransaction
spanner.databases.getDdl
spanner.databases.read
spanner.databases.select
spanner.databases.updateDdl
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
spanner.sessions.get
建議在「資料庫」層級授予。使用這個角色的主體可以:
  • 讀取和寫入 Cloud Spanner 資料庫。
  • 在資料庫上執行 SQL 查詢,包含 DML 和分區 DML。
  • 檢視並更新資料庫結構定義。
roles/spanner.viewer

(人類角色)
resourcemanager.projects.get
spanner.databases.list
spanner.instances.get
spanner.instances.list
建議在 Google Cloud「專案」層級授予。使用這個角色的主體可以:
  • 檢視所有 Cloud Spanner 執行個體 (但不能修改執行個體)。
  • 檢視所有 Cloud Spanner 資料庫 (但不能修改資料庫,也不能從資料庫讀取資料)。
例如,您可以將這個角色與 roles/spanner.databaseUser 角色結合,授予使用者特定資料庫的存取權,但是僅限檢視其他執行個體和資料庫的存取權。
在 Google Cloud 專案層級中,這是使用者與 Google Cloud Platform 主控台中 Cloud Spanner 資源互動所必須的角色。

原始角色

原始角色是在 Cloud IAM 之前專案層級的角色。如要進一步瞭解詳細資訊,請參閱原始角色一節。

雖然 Cloud Spanner 支援下列原始角色,您仍應盡可能使用上述其中一個預先定義的角色。原始角色包含多種適用於所有 Google Cloud Platform 資源的權限;相反地,Cloud Spanner 的預先定義角色則包含僅適用於 Cloud Spanner 的精確權限。

原始角色 說明
roles/viewer 能夠列出並取得結構定義和執行個體的中繼資料,也可以在資料庫上使用 SQL 進行讀取與查詢。
roles/writer 能夠執行所有 roles/viewer 可進行的操作,也可以建立執行個體和資料庫,並將資料寫入資料庫。
roles/owner 能夠執行所有 roles/writer 可進行的操作,也可以修改資料庫和執行個體的存取權。

自訂角色

如果 Cloud Spanner 中的預先定義角色無法滿足您的業務需求,您可以使用自訂角色,並指定這些角色擁有的權限。

在建立自訂角色前,您必須先找出需要執行的工作。您可以找出每項工作必要的權限,然後新增這些權限到自訂的角色。

服務帳戶工作的自訂角色

對大多數的工作而言,需要新增哪些權限到自訂的角色是顯而易見的。例如,如果您希望服務帳戶能夠建立資料庫,就必須新增 spanner.databases.create 權限到自訂角色。

然而,當您讀取或寫入 Cloud Spanner 資料表中的資料時,則必須新增數種不同的權限給自訂角色。下表列出讀取和寫入資料所需的權限。

服務帳戶工作 必要權限
讀取資料
  • spanner.databases.select
  • spanner.sessions.create
  • spanner.sessions.delete
插入、更新或刪除資料
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.write
  • spanner.sessions.create
  • spanner.sessions.delete

GCP 主控台工作的自訂角色

為了要在 GCP 主控台中找出特定工作所需的權限清單,您要判定這項工作的工作流程並且編譯該工作流程的權限。例如,要查看資料表中的資料,您必須在 GCP 主控台中依循以下這些步驟:

步驟 權限
1. 存取專案 resourcemanager.projects.get
2. 檢視執行個體清單 spanner.instances.list
3. 選取執行個體 spanner.instances.get
4. 檢視資料庫清單 spanner.databases.list
5. 選取資料庫與資料表 spanner.databases.getspanner.databases.getDdl
6. 檢視資料表中的資料 spanner.databases.selectspanner.sessions.createspanner.sessions.delete

在這個範例中,您需要以下權限:

  • resourcemanager.projects.get
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.list
  • spanner.databases.select
  • spanner.instances.get
  • spanner.instances.list
  • spanner.sessions.create
  • spanner.sessions.delete

下表列出了在 GCP 主控台中操作所需的權限。

操作 權限
檢視「執行個體」頁面上的執行個體清單
  • resourcemanager.projects.get
  • spanner.instances.list
檢視「執行個體」頁面「權限」分頁上的清單

spanner.instances.getIamPolicy

在「執行個體」頁面的「權限」分頁上新增成員

spanner.instances.setIamPolicy

從執行個體清單中選取執行個體,以檢視「執行個體詳細資料」頁面

spanner.instances.get

建立執行個體
  • spanner.instanceConfigs.list
  • spanner.instanceOperations.get
  • spanner.instances.create
刪除執行個體

spanner.instances.delete

修改執行個體
  • spanner.instanceOperations.get
  • spanner.instances.update
在「執行個體詳細資料」或「資料庫詳細資料」頁面上的「監控」分頁檢視圖表
  • monitoring.metricDescriptors.get
  • monitoring.metricDescriptors.list
  • monitoring.timeSeries.list
  • spanner.instances.get
在「執行個體詳細資料」頁面上檢視資料庫清單
  • spanner.databases.list
檢視「資料庫詳細資料」頁面「權限」分頁上的清單

spanner.databases.getIamPolicy

在「資料庫詳細資料」頁面的「權限」分頁上新增成員

spanner.databases.setIamPolicy

從資料庫清單中選取一個資料庫並在「資料庫詳細資料」頁面中檢視結構定義
  • spanner.databases.get
  • spanner.databases.getDdl
建立資料庫

spanner.databases.create

刪除資料庫

spanner.databases.drop

建立資料表

更新資料表結構定義

  • spanner.databaseOperations.get
  • spanner.databaseOperations.list
  • spanner.databases.updateDdl

檢視「資料庫詳細資料」頁面「資料」分頁中的資料

建立並執行查詢

  • spanner.databases.select
  • spanner.sessions.create
  • spanner.sessions.delete
修改資料表中的資料
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.select
  • spanner.databases.write
  • spanner.sessions.create
  • spanner.sessions.delete

Cloud Spanner IAM 政策管理

您可以在 Cloud Spanner 執行個體和資料庫資源上,使用 REST 或 RPC API 取得、設定及測試 IAM 政策。

執行個體

REST API RPC API
projects.instances.getIamPolicy GetIamPolicy
projects.instances.setIamPolicy SetIamPolicy
projects.instances.testIamPermissions TestIamPermissions

資料庫

REST API RPC API
projects.instances.databases.getIamPolicy GetIamPolicy
projects.instances.databases.setIamPolicy SetIamPolicy
projects.instances.databases.testIamPermissions TestIamPermissions

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Spanner 說明文件