角色建議總覽

角色建議可協助您找出並移除主體的多餘權限,進而改善資源安全設定。

角色建議總覽

角色建議是由 IAM 推薦工具生成。身分與存取權管理建議工具是 Recommender 提供的建議工具之一。

每個角色建議都會建議您,移除或替換掉給主體過多權限的角色。綜觀來說,這些建議會協助您強制執行最低權限原則,確保主體只會有實際所需的權限。

IAM 建議工具會使用政策深入分析,找出多餘的權限。政策深入分析是以機器學習為基礎的發現功能,內容關於主體的權限使用。

部分建議也與橫向移動深入分析相關。這些洞察資料會找出可讓某個專案中的服務帳戶模擬其他專案中服務帳戶的角色。詳情請參閱「側向移動洞察資料的產生方式」。

政策深入分析的產生方式

政策深入分析會醒目顯示主體角色中,主體未使用的權限。

IAM 建議工具會比較主體的權限總數,以及主體在過去 90 天內使用的權限,藉此產生政策深入分析。如果授予角色未滿 90 天,IAM 建議會查看主體自獲得角色以來,使用權限的情況。

主體可透過下列幾種方式使用權限:

  • 直接呼叫需要該權限的 API

    舉例來說,IAM REST API 中的 roles.list 方法需要 iam.roles.list 權限。呼叫 roles.list 方法時,您會使用 iam.roles.list 權限。

    同樣地,當您為資源呼叫 testIamPermissions 方法時,實際上會使用您測試的所有權限。

  • 間接:使用 Google Cloud 控制台處理 Google Cloud資源

    舉例來說,在 Google Cloud 控制台中,您可以編輯 Compute Engine 虛擬機器 (VM) 執行個體,但根據您變更的設定,需要不同的權限。不過, Google Cloud 控制台也會顯示現有設定,這需要compute.instances.get權限。

    因此,在 Google Cloud 控制台中編輯 VM 執行個體時,您會使用 compute.instances.get 權限。

如要判斷主體使用的權限,IAM 推薦工具會使用匯總的 IAM 存取資料。如要瞭解如何匯出 IAM 建議工具用於這些洞察資料的資料,請參閱「匯出角色建議資料」。

IAM 建議工具也會運用機器學習技術,找出主體目前角色中,主體未來可能需要的權限 (即使主體最近未使用這些權限)。詳情請參閱本頁面的「機器學習輔助政策洞察」一節。

系統不會為授予主體的所有 IAM 角色產生政策深入分析。如要進一步瞭解角色可能沒有政策洞察資料的原因,請參閱本頁面的「適用情形」一節。

如要瞭解如何管理政策洞察,請參閱「管理專案、資料夾和機構的政策洞察」或「管理 Cloud Storage 值區的政策洞察」。

機器學習政策深入分析

在某些情況下,主體可能需要目前角色包含的特定權限,但他們最近並未使用這些權限。IAM 建議工具會使用機器學習 (ML) 模型產生政策深入分析,藉此找出這些權限。

這個機器學習模型會根據多組信號進行訓練:

  • 觀察到的歷來常見共同發生模式:使用者過去曾使用權限 A、B 和 C,這表示 A、B 和 C 可能在某方面相關聯,且需要一起使用才能在 Google Cloud上執行工作。如果機器學習模型經常觀察到這種模式,下次有其他使用者使用權限 A 和 B 時,模型就會建議該使用者可能也需要權限 C。

  • 角色定義中編碼的網域知識:IAM 提供數百種不同的預先定義角色,這些角色專屬於特定服務。如果預先定義的角色包含一組權限,則表示這些權限應一併授予。

除了這些信號,模型也會使用字詞嵌入來計算權限在語意上的相似程度。嵌入後,語意相似的權限會「靠近」彼此,且更有可能一起授予。舉例來說,bigquery.datasets.getbigquery.tables.list 嵌入後會非常接近。

IAM 建議事項機器學習管道使用的所有資料都具有 k-anonymity,也就是說,匿名資料集中的個人無法重新識別。為達到這個匿名程度,我們會捨棄所有個人識別資訊 (PII),例如與各項權限使用模式相關的使用者 ID。然後,我們會捨棄所有在 Google Cloud中不夠常見的使用模式。全球模型會使用這類去識別化資料進行訓練。

使用聯邦學習,即可進一步為各機構自訂全球模型。這項機器學習程序可訓練機器學習模型,而不需匯出資料。

角色建議的產生方式

如果政策洞察資訊指出主體不需要角色中的所有權限,IAM 建議工具會評估該角色,判斷是否可以撤銷,或是否有更適合的角色。如果可以撤銷角色,IAM 推薦功能會產生撤銷角色的角色建議。如果有更合適的角色,IAM 推薦功能會產生角色建議,建議您將現有角色換成建議角色。建議角色可以是新的自訂角色、現有自訂角色,或一或多個預先定義的角色。除了服務代理人建議外,角色建議一律不會建議變更,以提高主體的存取層級。

系統只會根據 IAM 存取權控管機制產生角色建議。這類角色不會考量其他類型的存取權控管機制,例如存取權控制清單 (ACL) 和 Kubernetes 角色式存取權控管 (RBAC)。如果您使用其他類型的存取權控管,請在查看建議時格外謹慎,並考量這些存取權控管與允許政策的關聯。

此外,系統不會為授予主體的 IAM 角色產生角色建議。如要進一步瞭解角色可能沒有角色建議的原因,請參閱本頁面的「適用情形」一節。

觀察期間

角色建議的觀察期是指建議依據的權限用量資料天數。

角色建議的觀測期最長為 90 天。也就是說,IAM 建議工具最多會使用最近 90 天的權限使用資料,產生角色建議。

IAM 建議工具也必須累積一定天數的權限使用資料,才會開始生成角色建議。這段時間稱為「最短觀察期」。預設觀察期最短為 90 天,但如果是專案層級的角色建議,您可以手動將觀察期設為 30 天或 60 天。詳情請參閱「設定角色建議產生功能」。如果將最短觀察期設為少於 90 天,您會更快收到建議,但建議的準確度可能會受到影響。

如果角色授予時間已超過最短觀察期,但未滿 90 天,觀察期就是角色授予時間。

角色建議中的新自訂角色

當 IAM 建議工具建議替換角色時,一律會建議現有的自訂角色,或一或多個預先定義的角色,這些角色似乎更符合主體的需求。

如果 IAM 建議引擎在貴機構中發現常見的權限使用模式,但該模式未對應至現有的預先定義或自訂角色,引擎也可能會建議您建立新的專案層級自訂角色。這個自訂角色包含建議權限。您可以新增或移除權限,修改自訂角色建議。

如要盡可能嚴格地執行最低權限原則,請選擇新的自訂角色。IAM 建議引擎會在專案層級建立自訂角色。您有責任維護及更新專案的自訂角色。

如要使用系統維護的角色,請選擇預先定義的角色。 Google Cloud 會定期更新這些角色,新增或移除權限。如要接收這些更新通知,請訂閱權限變更記錄的新聞動態。選擇預先定義的角色時,主體仍會擁有至少幾項未使用的權限,甚至可能擁有大量未使用的權限。

IAM 建議工具只會針對專案中授予的角色,建議新的自訂角色。不會針對其他資源 (例如資料夾或機構) 授予的角色,建議新的自訂角色。

此外,在下列情況下,IAM 建議工具不會建議新的自訂角色:

  • 貴機構已擁有 100 個以上的自訂角色。
  • 專案已有 25 個以上的自訂角色。

IAM 推薦功能每天在每個專案中,最多會建議 5 個新的自訂角色,整個機構最多會建議 15 個新的自訂角色。

橫向移動深入分析的產生方式

「橫向移動」是指某個專案中的服務帳戶有權模擬其他專案中的服務帳戶。舉例來說,服務帳戶可能是在專案 A 中建立,但有權模擬專案 B 中的服務帳戶。

這些權限可能會導致專案間的模擬鏈,讓主體取得非預期的資源存取權。舉例來說,如果主體模擬專案 A 中的服務帳戶,就能使用該服務帳戶模擬專案 B 中的服務帳戶。如果專案 B 中的服務帳戶有權模擬機構中其他專案的其他服務帳戶,主體就能繼續使用服務帳戶模擬功能,在專案之間移動,並在過程中取得權限。

IAM 建議引擎會找出符合下列條件的角色,產生側向移動深入分析:

  • 獲授角色的主體是在專案中建立的服務帳戶。
  • 這個角色包含下列其中一項權限,可讓主體模擬服務帳戶:

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

如果角色符合這些條件,IAM 建議工具就會為該角色產生側向移動洞察。這項洞察資訊包含服務帳戶的模擬功能相關資訊,包括可模擬的服務帳戶,以及過去 90 天內是否曾使用任何模擬權限。

IAM 推薦工具不會單獨使用側向移動深入分析結果,產生新的角色建議。這是因為如果服務帳戶使用模擬權限,IAM 建議工具就無法安全地建議移除這些權限。不過,如果角色建議指出這些權限未被使用,因此建議移除,IAM 建議工具就會將側向移動深入分析連結至該建議。這項連結有助於優先為服務帳戶提供角色建議,這些帳戶在專案中擁有強大的閒置模擬權限。

如要瞭解如何管理橫向移動深入分析,請參閱管理橫向移動深入分析

可用性

系統不會為授予主體的所有角色產生政策洞察、橫向移動洞察和角色建議。請參閱以下各節,瞭解系統會為哪些角色生成政策洞察、橫向移動洞察和建議。

政策洞察資訊適用情形

如要讓身分與存取權管理建議工具為角色產生政策洞察,必須符合下列條件:

  • 授予角色的 IAM 允許政策必須附加至下列其中一項資源:

    • Cloud Storage 值區
    • BigQuery 資料集
    • 專案
    • 資料夾
    • 機構

    身分與存取權管理建議工具只會針對這些資源上授予的角色產生政策洞察。

  • 授予角色的角色繫結不得設有條件。IAM 建議工具不會為有條件的角色繫結產生政策洞察。

  • 獲派角色的主體必須是下列其中一種主體類型:

    • 使用者
    • 服務帳戶
    • 群組
    • allUsers
    • allAuthenticatedUsers
    • Cloud Storage 便利值
    • BigQuery 特殊群組成員資格
    • 下列其中一種聯合身分:

      • 工作負載身分集區中的所有身分
      • Workload Identity Pool 中的單一身分
      • 員工身分集區中的所有身分
      • 員工身分集區中的單一身分
      • 使用特定 Kubernetes 服務帳戶的所有 Google Kubernetes Engine Pod

    如要進一步瞭解各主體類型的 ID 格式,請參閱「主體 ID」。

身分與存取權管理建議工具最多需要 10 天,才會為新授予的角色產生政策洞察。

現有政策洞察資料每天都會根據您最近的權限使用情形重新整理。不過,政策洞察資料通常會比實際使用情況延遲最多兩天。

橫向移動深入分析的適用情形

系統會針對下列資源授予的角色,產生側向移動深入分析:

  • 組織
  • 資料夾
  • 專案
  • 服務帳戶

角色建議適用情形

如要讓 IAM 建議工具為角色產生角色建議,必須符合下列條件:

  • 角色必須與政策洞察資訊建立關聯。這項政策洞察資料是建議的依據。
  • 自授予角色以來,必須已超過最短觀察期。確保 IAM 建議工具有足夠的使用資料可提供建議。預設的觀測期為 90 天,但您可以手動設為 30 天或 60 天。詳情請參閱「設定角色建議產生功能」。
  • 如果獲派角色的主體是服務代理,則角色必須是擁有者、編輯者或檢視者。身分與存取權管理建議不會為具備其他角色的服務代理程式產生角色建議。詳情請參閱「服務專員的角色建議」。

如果角色是最近才獲得授權,或是沒有任何洞察資料, Google Cloud 控制台的「已分析的權限」欄會顯示 圖示。

在某些情況下,即使時間已過,且角色有相關洞察資訊,身分與存取權管理建議也不會為角色產生角色建議。可能原因如下:

  • 沒有比目前角色更合適的預先定義 IAM 角色。如果主體已具備可將權限降至最低的預先定義角色,或是權限比其他預先定義角色少,IAM 建議引擎就無法建議其他預先定義角色。

    您可以為主體建立自訂角色,藉此減少主體的權限。

  • 主體是服務代理程式,且角色不是基本角色。身分與存取權管理建議工具只會為具備基本角色 (擁有者、編輯者或檢視者) 的服務代理產生角色建議。詳情請參閱「服務代理商的角色建議」。

  • 專案沒有其他主體具有「擁有者」基本角色。每個專案至少要有一個具備「擁有者」角色 (roles/owner) 的主體。如果只有一個主體擁有這個角色,IAM 建議工具就不會建議您撤銷或替換該角色。

在這些情況下,Google Cloud 控制台中的「已分析的權限」資料欄會顯示主體的權限使用情形,但不會有「建議」圖示。

系統會根據您最近的權限使用情況,每天重新整理現有的角色建議。不過,角色建議所依據的資料通常會比實際用量延遲最多兩天。

優先順序和嚴重性

建議優先順序和洞察嚴重程度可協助您瞭解建議或洞察的緊急程度,並據此決定優先順序。

角色建議優先順序

系統會根據建議的迫切程度,指派優先順序層級。 優先順序從 P1 (最高優先順序) 到 P4 (最低優先順序)。

角色建議的優先順序取決於建議適用的角色:

建議詳細資料 優先順序 說明
建議授予 Cloud Storage bucket 公開存取權的角色 P1 網際網路上的任何人都能存取公開值區。 移除公開存取權後,您就能進一步控管資料。
建議授予 BigQuery 資料集公開存取權的角色 P1 網際網路上的任何人都能存取公開資料集。 移除公開存取權後,您就能進一步控管資料。
針對專案、資料夾或機構授予的基本角色 (擁有者、編輯者和檢視者) 建議 P2 基本角色的權限過高,因此套用這些角色的建議,可大幅減少多餘權限。
不授予公開存取權或基本角色的建議 P4 雖然這些建議有助於減少過多權限,但不會移除公開存取權或權限過高的基本角色,因此優先順序較低。

深入分析嚴重程度

洞察資料會根據預期的迫切程度指派嚴重層級。嚴重程度可以是 LOWMEDIUMHIGHCRITICAL

政策洞察的嚴重程度取決於洞察的適用角色:

深入分析詳細資料 嚴重性 說明
授予 Cloud Storage 值區公開存取權的角色洞察 CRITICAL 網際網路上的任何人都能存取公開值區。 移除公開存取權後,您就能進一步控管資料。
授予 BigQuery 資料集公開存取權的角色洞察 CRITICAL 網際網路上的任何人都能存取公開資料集。 移除公開存取權後,您就能進一步控管資料。
在專案、資料夾或機構中授予基本角色 (擁有者、編輯者和檢視者) 的深入分析 HIGH 基本角色的權限過高,解決這些角色的洞察資料問題,可大幅減少超額權限。
不授予公開存取權或基本角色的洞察 LOW 雖然這些洞察資料會突顯過多的權限,但不會涉及公開存取或權限過高的基本角色,因此優先順序較低。

所有橫向移動深入分析的嚴重程度都是 LOW

如何套用角色建議

IAM 建議工具不會自動套用建議。 您必須查看建議,然後決定是否要套用或捨棄。如要瞭解如何查看、套用及略過角色建議,請參閱下列其中一篇指南:

稽核記錄

套用或關閉建議時,IAM 建議工具會建立記錄項目。您可以在建議記錄中查看這些項目,也可以在稽核記錄中查看 Google Cloud

角色建議子類型

角色建議會根據建議執行的動作,分成幾種不同的子類型。如果您使用 gcloud CLI 或 REST API,可以透過這些子類型篩選建議。

子類型 說明
REMOVE_ROLE 建議移除主體的專案層級、資料夾層級或機構層級角色。
REMOVE_ROLE_BIGQUERY_DATASET 建議移除主體的資料集層級角色。
REMOVE_ROLE_STORAGE_BUCKET 建議移除主體的儲存空間層級角色。
REPLACE_ROLE 建議您將主體的專案層級、資料夾層級或機構層級角色,替換為權限較低的角色。建議的替代角色可能是現有的自訂角色,或一或多個預先定義的角色。
REPLACE_ROLE_CUSTOMIZABLE 建議將主體的角色替換為新的自訂角色,該角色的權限低於目前角色。
REPLACE_ROLE_BIGQUERY_DATASET 建議將主體的資料集層級角色替換為權限較低的角色。建議的替代角色可能是現有的自訂角色,或一或多個預先定義的角色。
REPLACE_ROLE_STORAGE_BUCKET 建議將主體的 bucket 層級角色替換為權限較低的角色。建議的替代角色可能是現有的自訂角色,或一或多個預先定義的角色。
SERVICE_AGENT_WITH_DEFAULT_ROLE 建議將服務代理的「擁有者」、「編輯者」或「檢視者」角色,替換為服務帳戶建立時自動授予的角色。詳情請參閱服務代理程式的角色建議
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE 建議將服務代理的「擁有者」、「編輯者」或「檢視者」角色替換為權限較低的角色。詳情請參閱服務代理程式的角色建議

服務代理的角色建議

對於服務代理,IAM 建議工具只會提供基本角色 (擁有者、編輯者或檢視者) 的建議。

服務專員的建議分為兩種建議子類型。

SERVICE_AGENT_WITH_DEFAULT_ROLE

建立時,系統會自動授予部分服務代理服務代理角色,確保 Google Cloud 服務正常運作。如果您將這個角色替換為基本角色 (擁有者、編輯者或檢視者),角色建議可能會建議您還原原始服務代理程式角色,以移除過多的權限,即使服務代理程式角色具有基本角色沒有的權限也一樣。這類建議的子類型為 SERVICE_AGENT_WITH_DEFAULT_ROLE。可協助您安全移除多餘的權限,同時確保所有 Google Cloud 服務正常運作。

SERVICE_AGENT_WITH_DEFAULT_ROLE 建議是唯一可能建議具有權限的角色類型,而這些權限不屬於目前角色。

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

如果系統未在建立時自動授予服務代理角色,服務代理的建議會完全根據服務代理使用的權限。這類建議的子類型為 SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

Security Command Center 中的角色建議

如果您使用 Security Command Center Premium 或 Enterprise 級,可以在 Security Command Center 中查看部分角色建議子類型,做為發現項目。每個子類型都會與偵測器建立關聯:

建議子類型 發現項目類別
REMOVE_ROLE Unused IAM role
REPLACE_ROLE IAM role has excessive permissions
SERVICE_AGENT_WITH_DEFAULT_ROLE Service agent role replaced with basic role
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Service agent granted basic role

如要進一步瞭解如何在 Security Command Center 中查看角色建議,請參閱 Security Command Center 說明文件中的「IAM 建議工具」。

定價

專案層級、資料夾層級和機構層級的基本角色建議免費提供。

在專案或機構層級啟用 Security Command Center Premium 或 Enterprise 方案後,即可使用下列進階 IAM 建議工具功能:

  • 非基本角色的建議
  • 針對機構、資料夾和專案以外的資源授予角色時的建議,例如針對 Cloud Storage bucket 授予角色時的建議
  • 建議自訂角色
  • 政策洞察
  • 橫向移動深入分析

詳情請參閱「帳單問題」。

角色建議範例

以下範例說明您可能會收到的最佳化建議類型。

撤銷現有角色

使用者 my-user@example.com 獲得專案的「瀏覽器」角色。「瀏覽器」角色包含六項權限,可讓使用者查看專案中的資源。不過,my-user@example.com在過去 90 天內未查看任何資源。

因此,IAM 建議工具會產生角色建議,建議您撤銷 my-user@example.com 的「瀏覽器」角色:

控制台

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "This role has not been used during the observation window.",
  "etag": "\"9fc3241da8bfab51\"",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REMOVE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "description": "This role has not been used during the observation window.",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"9fc3241da8bfab51\"",
  "recommenderSubtype": "REMOVE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "priority": "P4"
}

取代現有角色

服務帳戶已取得專案的「編輯者」角色 (roles/editor)。這個基本角色包含超過 3,000 項權限,並授予專案的廣泛存取權。不過,在過去 90 天內,服務帳戶只使用了其中幾項權限。

因此,IAM 建議工具會產生角色建議,建議您撤銷編輯者角色,並改用其他兩個角色的組合,移除數千項多餘權限:

控制台

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountUser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "member": "user:my-user@example.com",
      "minimumObservationPeriodInDays": "0",
      "removedRole": "roles/editor",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "etag": "\"0da9a354c2a83d96\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "priority": "P2",
  "recommenderSubtype": "REPLACE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountOwner"
            }
          },
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/editor",
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"0da9a354c2a83d96\"",
  "recommenderSubtype": "REPLACE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "priority": "P2"
}

建立自訂角色

使用者 my-user@example.com 已獲得專案的 Cloud Trace 管理員角色 (roles/cloudtrace.admin)。這個角色包含超過 10 項權限,但政策深入分析指出,過去 90 天內,my-user@example.com只使用了其中 4 項權限。

因此,IAM 建議工具會產生角色建議,建議您建立只包含my-user@example.com實際使用的權限的自訂角色:

控制台

gcloud

REPLACE_ROLE_CUSTOMIZABLE 子類型表示 IAM 建議器建議建立具有所用權限的自訂角色。如要查看使用的權限,請取得相關政策洞察資料

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "associatedResourceNames": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "etag": "\"c7f57a4725d32d66\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "originalContent": {},
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {},
      "revokedIamPermissionsCount": 1
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ]
}

REST

REPLACE_ROLE_CUSTOMIZABLE 子類型表示 IAM 建議工具建議建立具有所用權限的自訂角色。如要查看使用的權限,請取得相關政策洞察資料

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 1
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            }
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"c7f57a4725d32d66\"",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "priority": "P4"
}

角色建議也會提供其他選項,也就是以 Cloud Trace 使用者角色 (roles/cloudtrace.user) 取代現有角色。這個預先定義的角色權限比 Cloud Trace 管理員角色稍少。

機器學習建議的權限角色替換

服務帳戶已取得專案的「編輯者」角色 (roles/editor)。這個基本角色包含超過 3,000 項權限,並授予專案的廣泛存取權。不過,政策洞察資料顯示,過去 90 天內,服務帳戶使用的權限少於 10 項。

政策洞察也會醒目顯示服務帳戶日後可能需要的幾項權限。IAM 建議工具是使用機器學習技術,找出這些權限。

身分與存取權管理建議會產生角色建議,建議您撤銷「編輯者」角色,並改為指派「Storage 物件管理員」角色 (roles/storage.objectAdmin),授予 Cloud Storage 值區中物件的完整控制權。這項變更會移除數千項超額權限,同時保留服務帳戶使用的權限,以及服務帳戶日後可能需要的權限:

控制台

IAM 推薦工具會使用機器學習 圖示,標示根據 IAM 推薦工具的機器學習結果而非權限使用情況新增的權限。在本例中,系統根據機器學習建議了 resourcemanager.projects.get 權限:

gcloud

如果權限是根據 IAM 推薦功能的機器學習結果新增,而非根據權限用量,則不會列在建議中。而是列在與建議相關聯的政策洞察資料中。所有以機器學習為依據的權限都會列在洞察資料的inferredPermissions欄位中。在本範例中,resourcemanager.projects.get 權限是根據機器學習建議:

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '5069'
  exercisedPermissions:
  - permission: storage.objects.create
  - permission: storage.objects.delete
  - permission: storage.objects.get
  - permission: storage.objects.list
  inferredPermissions:
  - permission: resourcemanager.projects.get
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/editor
description: 4 of the permissions in this role binding were used in the past 90 days.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012
severity: HIGH

如要瞭解如何取得政策洞察,請參閱下列文章:

REST

如果權限是根據 IAM 推薦功能的機器學習結果新增,而非根據權限用量,則不會列在建議中。而是列在與建議相關聯的政策洞察資料中。所有以機器學習為依據的權限都會列在洞察資料的inferredPermissions欄位中。在本範例中,resourcemanager.projects.get 權限是根據機器學習建議:

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "4 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/editor",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [
      {
        "permission": "storage.objects.create"
      },
      {
        "permission": "storage.objects.delete"
      },
      {
        "permission": "storage.objects.get"
      },
      {
        "permission": "storage.objects.list"
      }
    ],
    "inferredPermissions": [
      {
        "permission": "resourcemanager.projects.get"
      }
    ],
    "currentTotalPermissionsCount": "5069"
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"d3cdec23cc712bd0\"",
  "severity": "HIGH"
}

如要瞭解如何取得政策洞察資料,請參閱下列文章:

後續步驟