瞭解 IAM 自訂角色

Cloud Identity and Access Management (Cloud IAM) 具備預先定義的角色,可以精細的方式針對特定 Google Cloud Platform 資源授予存取權限,同時防止對其他資源進行不必要的存取。

Cloud IAM 也提供建立自訂 Cloud IAM 角色的功能。您可以建立具有一或多個權限的自訂 Cloud IAM 角色,然後將這個自訂角色授予使用者。Cloud IAM 還提供 UI 和 API,能用於建立及管理自訂角色。

本主題並未提供您可加入自訂角色中之所有 Cloud IAM 權限的完整清單。如要查看特定權限是否支援自訂角色,請參閱自訂角色的權限支援等級。如要進一步瞭解特定服務的自訂角色,請參考其他 IAM 說明文件一節。

事前準備

基本概念

在 Cloud IAM 中,您並不直接向使用者授予權限,而是向他們授予繫結了一或多個權限的「角色」。Cloud IAM 中有兩種角色:預先定義角色與自訂角色。

預先定義角色是由 Google 建立及維護。角色權限會視需要自動更新,例如當 GCP 加入新功能或服務時。

自訂角色是由使用者定義,可繫結一或多個支援的權限以滿足特定需求。自訂角色不是由 Google 維護;因此當 GCP 加入新的權限、功能或服務時,自訂角色不會自動更新。

將一或多個可用 Cloud IAM 權限結合,即可建立自訂角色。權限允許使用者對 Google Cloud Platform 資源執行特定動作。在 Cloud IAM 的通行做法中,權限皆以下列格式表示:

<service>.<resource>.<verb>

例如:compute.instances.list 權限可讓使用者列出自己擁有的 Google Compute Engine 執行個體;而 compute.instances.stop 則能讓使用者停止 VM。

權限通常 (但並非絕對) 與 REST 方法有 1:1 的對應關係。也就是說,每個 GCP 服務對於擁有的每個 REST 方法都有關聯的權限。如要呼叫方法,呼叫者就需要有相關權限。例如:topic.publish() 的呼叫者需要 pubsub.topics.publish 權限。

自訂角色只可用於向相同專案或機構授予政策中的權限,這些專案或機構擁有自訂角色下層的角色或資源。您無法針對某個專案或機構擁有的資源,授予另一個專案或機構的自訂角色。

所需權限和角色

如要建立自訂角色,呼叫者必須擁有 iam.roles.create 權限。

使用者 (包括機構管理員) 如果不是擁有者,就必須指派為「機構角色管理員」角色 (roles/iam.organizationRoleAdmin) 或「IAM 角色管理員」角色 (roles/iam.roleAdmin)。「IAM 安全性審查者」角色 (roles/iam.securityReviewer) 提供了查看自訂角色的功能,但不含管理功能。

自訂角色使用者介面位於 Google Cloud Platform 主控台的「IAM 角色」下方。這個介面只提供給具有建立或管理自訂角色權限的使用者使用。根據預設,只有專案擁有者可建立新的角色。專案擁有者可以透過為相同專案中的其他使用者授予「IAM 角色管理員」角色,來控制這項功能的存取權。而對機構而言,只有機構管理員能授予「機構角色管理員」角色。

管理角色的詳細資訊說明如下。

「機構角色管理員」角色

如果您的 GCP 帳戶與機構建立關聯,則「機構角色管理員」角色可讓您管理機構中所有的自訂角色。這個角色只能在機構層級授予,且只有機構管理員可以授予「機構角色管理員」角色。

以下表格列出「機構角色管理員」角色的權限:

角色 權限
roles/iam.organizationRoleAdmin iam.roles.create
iam.roles.delete
iam.roles.undelete
iam.roles.get
iam.roles.list
iam.roles.update
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.list
resourcemanager.organizations.get
resourcemanager.organizations.getIamPolicy

「角色管理員」角色

「角色管理員」角色可供您管理專案的所有自訂角色。如果您沒有機構,請使用這個角色。此外,這個角色只能由專案或機構擁有者在專案層級授予。

以下表格列出「角色管理員」角色的權限:

角色 權限
roles/iam.roleAdmin iam.roles.create
iam.roles.delete
iam.roles.undelete
iam.roles.get
iam.roles.list
iam.roles.update
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy

自訂角色生命週期

當您決定如何建模、建立及管理自訂角色時,請留意以下適用概念。

建立

在決定建立自訂角色之前,請先確認沒有適用於服務且能符合您需求的預先定義角色 (或角色組合)。您可以前往其他 IAM 說明文件一節中的連結,瞭解適用於特定服務的權限。如需預先定義角色包含權限的清單,請參閱取得角色中繼資料一節。

如果授予一或多個預先定義角色的權限組合不符合您的需求,則您應該以單一或數個預先定義角色為基礎建立自訂角色,並視需要新增或刪除角色中的權限。有關上述操作的詳細資訊,請參閱建立及管理自訂角色

不支援或無法使用的權限

您應該注意到某些權限並未顯示或在自訂角色中無法使用。舉例來說,如果服務仍為測試版,或者您還沒有為服務啟用 API,就可能無法在自訂角色中使用某項權限。

如要確定權限是否能包含在自訂角色中,請參閱建立及管理自訂角色中的檢視資源的可用權限一節。

自訂角色不支援下列 Cloud IAM 權限:

  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt

如要查看自訂角色中給定 GCP 服務支援的權限,請參考此表

權限相依關係

某些權限只有在成對授予時才能生效。例如,由於更新 Cloud IAM 政策要求採用讀取 - 修改 - 寫入模式,因此 setIamPolicy 幾乎一律必須使用 getIamPolicy,這樣您才能在更新政策前取得 ETag。

為角色命名

自訂角色的 ID 不可重複。名稱的長度上限為 30 個字元,而且只能由大寫與小寫英數字元、底線和句點組成。

自訂角色的名稱可以重複,因此 GCP 主控台可以顯示多個具有相同名稱的自訂角色。為了避免混淆,請為自訂角色選用不重複且具描述性的名稱。名稱的長度上限為 100 個字元,且由大寫與小寫英數字元和符號組成。角色名稱隨時可以更改。

請謹慎選擇角色的 ID,因為設定後即無法變更。您可以刪除角色,但在為期 37 天的刪除程序完成之前,您無法使用相同 ID 建立新的自訂角色。如要進一步瞭解刪除程序,請參閱刪除自訂角色

角色名稱是 GCP 主控台中顯示的內容。請選擇明確的名稱,以免使用者在 GCP 主控台選擇角色時產生混淆。此外,請考慮在角色名稱中加入角色位於機構層級或專案層級的資訊。

角色說明

編輯自訂角色後,請考慮更新角色說明,包含修改日期以及角色預期用途的摘要。說明的長度上限為 256 個字元,且由大寫與小寫英數字元和符號組成。

測試與部署

自訂角色包含了 role.stage 屬性。一開始請將階段設定為 ALPHA,以表示該角色處於早期開發階段,尚未準備好投入實際工作環境。接著,允許機構中少部分的成員在一些應用實例中使用這個角色。

等到成員都滿意新建立的自訂角色時,將 role.stage 屬性變更為 BETAGA。一般來說,如果您的自訂角色參考了測試版服務的權限,應該標記為 BETA 而不是 GA,直到這項服務離開測試階段為止。

維護

由於工作職務與產品功能不斷演進,因此必須進行維護,才能讓自訂角色保持在最新狀態並指派最低的必要權限。

例如,當推出的服務加入新的測試版功能時,這些 API 方法將會開放使用,且權限會自動新增到相對應的原始及預先定義角色中。但是,您為這項服務建立的自訂角色不會繼承新的權限,因此受指派使用這些自訂角色的使用者可能會回報他們無法存取新的測試版功能。此時,您可以選擇新增權限;也能另外建立自訂角色,只向某些使用者授予存取測試版功能的權限。

儘管 Google 能夠透過新增 (或移除) 權限來更新現有的預先定義角色,但我們並不會根據預先定義角色來修改自訂角色。自訂角色只包含權限的平面串列,與做為基礎的預先定義角色之間並沒有連結。

我們建議您在現有自訂角色的說明欄位中加入詳細資訊,以利檢查是否需要針對預先定義角色近期的變更,來更新您的自訂角色。建立新的自訂角色時,GCP 主控台會自動將這項資訊加入說明欄位。

請參閱 IAM 權限變更記錄以瞭解近期的權限異動。

停用自訂角色

如果您不再希望機構中的人員使用特定角色,請將角色的 role.stage 屬性變更為 DEPRECATED,並視需要設定 deprecation_message 以通知使用者可以採用的替代角色或取得更多資訊的位置。此外,您也必須確定機構中已經沒有政策參考這個淘汰角色。

確認角色可以停用後,請呼叫 roles:UpdateRole()停用這個角色

已知限制

  • 某些預先定義的角色具有已淘汰的權限,或是自訂角色中不允許的權限。如果自訂角色以包含淘汰或限制權限的預先定義角色為基礎,則自訂角色不會包含這些權限。如需所有支援權限的完整清單,請參閱自訂角色的權限支援等級主題。

  • 在某項專案中建立的自訂角色無法列出其他專案。當您將包含 resourcemanager.projects.list 權限的預先定義角色複製到新的專案層級自訂角色時,系統會顯示下列其中一項訊息:

    • GCP 主控台:顯示以下警告訊息:「不適用於專案層級的自訂角色」。系統會在包含權限的清單中將 resourcemanager.projects.list 權限取消選取,讓您可以繼續建立角色。
    • Cloud SDK gcloud 指令列工具:傳回以下錯誤訊息:INVALID_ARGUMENT: Permission resourcemanager.projects.list is not valid。除非您從角色定義中移除 resourcemanager.projects.list 權限並重新操作,否則無法建立自訂角色。
    • Google Cloud API:傳回以下錯誤訊息:Permission resourcemanager.projects.list is not valid、HTTP 400 錯誤代碼,以及 INVALID_ARGUMENT 狀態。除非您從角色定義中移除 resourcemanager.projects.list 權限並重新操作,否則無法建立自訂角色。

後續步驟

其他 IAM 說明文件

說明文件 說明
適用於 App Engine 的 Cloud IAM 說明適用於 App Engine 的 Cloud IAM 角色
適用於 BigQuery 的 Cloud IAM 說明適用於 BigQuery 的 Cloud IAM 角色
適用於 Cloud BigTable 的 Cloud IAM 說明適用於 Cloud BigTable 的 Cloud IAM 角色
適用於 Cloud Billing API 的 Cloud IAM 說明適用於 Cloud Billing API 的 Cloud IAM 角色與權限
適用於 Cloud Dataflow 的 Cloud IAM 說明適用於 Cloud Dataflow 的 Cloud IAM 角色
適用於 Cloud Dataproc 的 Cloud IAM 說明適用於 Cloud Dataproc 的 Cloud IAM 角色與權限
適用於 Cloud Datastore 的 Cloud IAM 說明適用於 Cloud Datastore 的 Cloud IAM 角色與權限
適用於 Cloud DNS 的 Cloud IAM 說明適用於 Cloud DNS 的 Cloud IAM 角色與權限
適用於 Cloud KMS 的 Cloud IAM 說明適用於 Cloud KMS 的 Cloud IAM 角色與權限
適用於 Cloud ML Engine 的 Cloud IAM 說明適用於 Cloud ML Engine 的 Cloud IAM 角色與權限
適用於 Cloud Pub/Sub 的 Cloud IAM 說明適用於 Cloud Pub/Sub 的 Cloud IAM 角色
適用於 Cloud Spanner 的 Cloud IAM 說明適用於 Cloud Spanner 的 Cloud IAM 角色與權限
適用於 Cloud SQL 的 Cloud IAM 說明適用於 Cloud SQL 的 Cloud IAM 角色
適用於 Cloud Storage 的 Cloud IAM 說明適用於 Cloud Storage 的 Cloud IAM 角色
適用於 Compute Engine 的 Cloud IAM 說明適用於 Compute Engine 的 Cloud IAM 角色
適用於 GKE 的 Cloud IAM 說明適用於 GKE 的 Cloud IAM 角色與權限
適用於 Cloud Deployment Manager 的 Cloud IAM 說明適用於 Cloud Deployment Manager 的 Cloud IAM 角色與權限
適用於機構的 Cloud IAM 說明適用於機構的 Cloud IAM 角色
Cloud IAM for Folders 說明適用於資料夾的 Cloud IAM 角色。
適用於專案的 Cloud IAM 說明適用於專案的 Cloud IAM 角色
適用於 Service Management 的 Cloud IAM 說明適用於 Service Management 的 Cloud IAM 角色與權限
適用於 Stackdriver Debugger 的 Cloud IAM 說明適用於 Debugger 的 Cloud IAM 角色
適用於 Stackdriver Logging 的 Cloud IAM 說明適用於 Logging 的 Cloud IAM 角色
適用於 Stackdriver Monitoring 的 Cloud IAM 說明適用於 Monitoring 的 Cloud IAM 角色
適用於 Stackdriver Trace 的 Cloud IAM 說明適用於 Trace 的 Cloud IAM 角色與權限
本頁內容對您是否有任何幫助?請提供意見:

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

這個網頁
Cloud Identity and Access Management Documentation