分析允許政策

這個頁面說明如何使用政策分析工具分析允許政策,找出哪些主體 (使用者、服務帳戶、群組和網域) 具備哪些Google Cloud 資源的存取權。

本頁的範例說明如何執行政策分析查詢,並立即查看結果。如要匯出結果以進行進一步分析,可以使用 AnalyzeIamPolicyLongrunning 將查詢結果寫入 BigQueryCloud Storage

事前準備

必要角色和權限

如要分析允許政策,必須具備下列角色和權限。

必要 IAM 角色

如要取得分析允許政策所需的權限,請要求管理員在您要查詢的專案、資料夾或機構中,授予下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色具備分析允許政策所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要分析允許政策,必須具備下列權限:

  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • 如要使用自訂 IAM 角色分析政策,請按照下列步驟操作: iam.roles.get
  • 如要使用 Google Cloud CLI 分析政策,請按照下列步驟操作: serviceusage.services.use

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

所需的 Google Workspace 權限

如要展開查詢結果中的群組,查看主體是否因加入 Google Workspace 群組而擁有特定角色或權限,您需要 groups.read Google Workspace 權限。「網路論壇檢視者管理員」角色和「網路論壇管理員」或「超級管理員」等權限較高的角色,都具備這項權限。如要瞭解如何授予這些角色,請參閱「指派特定管理員角色」。

判斷哪些主體可以存取資源

您可以使用政策分析工具,檢查專案、資料夾或機構中,哪些主體對特定資源具有特定角色或權限。如要取得這項資訊,請建立查詢,其中包含要分析存取權的資源,以及要檢查的一或多個角色或權限。

控制台

  1. 前往 Google Cloud 控制台的「政策分析器」頁面。

    前往「政策分析工具」頁面

  2. 在「分析政策」部分,找出標示為「自訂查詢」的窗格,然後點按該窗格中的「建立自訂查詢」

  3. 在「選取查詢範圍」欄位中,選取要將查詢範圍限定在其中的專案、資料夾或機構。Policy Analyzer 會分析該專案、資料夾或機構的存取權,以及該專案、資料夾或機構中的所有資源。

  4. 選擇要檢查的資源,以及要檢查的角色或權限:

    1. 在「Parameter 1」(參數 1) 欄位中,從下拉式選單選取「Resource」(資源)
    2. 在「資源」欄位中,輸入要分析存取權的資源完整資源名稱。如果您不知道完整資源名稱,請輸入資源的顯示名稱,然後從系統提供的資源清單中選取資源。
    3. 按一下「新增選取器」
    4. 在「Parameter 2」(參數 2) 欄位中,選取「Role」(角色) 或「Permission」(權限)
    5. 在「選取角色」或「選取權限」欄位中,選取要檢查的角色或權限。
    6. 選用:如要檢查其他角色和權限,請繼續新增「角色」和「權限」選取器,直到列出所有要檢查的角色和權限為止。
  5. 選用:按一下「繼續」,然後選取要為這項查詢啟用的進階選項

  6. 在「自訂查詢」窗格中,依序點選「分析」>「執行查詢」。 報表頁面會顯示您輸入的查詢參數,以及結果表格,其中列出指定資源中具備指定角色或權限的所有主體。

    在 Google Cloud 控制台中,政策分析查詢最多可執行一分鐘。一分鐘後, Google Cloud 控制台會停止查詢,並顯示所有可用結果。如果查詢未在該時間內完成, Google Cloud 控制台會顯示橫幅,指出結果不完整。如要取得這些查詢的更多結果,請將結果匯出至 BigQuery

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectfolderorganization 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • FULL_RESOURCE_NAME:要分析存取權的資源完整資源名稱。如需完整資源名稱格式清單,請參閱「資源名稱格式」。
  • PERMISSIONS:以半形逗號分隔的權限清單,列出您要檢查的權限,例如 compute.instances.get,compute.instances.start。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。

執行 gcloud asset analyze-iam-policy 指令:

Linux、macOS 或 Cloud Shell

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \
    --full-resource-name=FULL_RESOURCE_NAME \
    --permissions='PERMISSIONS'

Windows (PowerShell)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID `
    --full-resource-name=FULL_RESOURCE_NAME `
    --permissions='PERMISSIONS'

Windows (cmd.exe)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^
    --full-resource-name=FULL_RESOURCE_NAME ^
    --permissions='PERMISSIONS'

您會收到包含分析結果的 YAML 回應。每項分析結果都會列出與查詢相關的一組存取權、身分和資源,以及相關的 IAM 角色繫結。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果為 CONDITIONAL

回應中的 identities 欄位會列出對指定資源具有任何指定權限的主體。以下範例顯示單一分析結果,並醒目顯示 identities 欄位。

...
---
ACLs:
- accesses:
  - permission: compute.instances.get
  - permission: compute.instances.start
  identities:
  - name: user:my-user@example.com
  resources:
  - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
  attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
  binding:
    members:
    - user: my-user@example.com
    role: roles/compute.admin
---
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyze-iam-policy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

REST

如要判斷哪些主體具備資源的特定權限,請使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。

使用任何要求資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectsfoldersorganizations 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • FULL_RESOURCE_NAME:要分析存取權的資源完整資源名稱。如需完整資源名稱格式清單,請參閱「資源名稱格式」。
  • PERMISSION_1PERMISSION_2... PERMISSION_N:您要檢查的權限,例如 compute.instances.get。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。

HTTP 方法和網址:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy

JSON 要求主體:

{
  "analysisQuery": {
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  }
}

如要傳送要求,請展開以下其中一個選項:

您會收到含有分析結果的 JSON 回應。每項分析結果都會說明相關的 IAM 角色繫結,然後列出該繫結中的資源、存取權和主體。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果會列為 CONDITIONAL

回應中的 identities 欄位會列出對指定資源具有任何指定權限的主體。以下範例顯示單一分析結果,並醒目顯示 identities 欄位。

...
{
  "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
  "iamBinding": {
    "role": "roles/compute.admin",
    "members": [
      "user:my-user@example.com"
    ]
  },
  "accessControlLists": [
    {
      "resources": [
        {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
        }
      ],
      "accesses": [
        {
          "permission": "compute.instances.get"
        },
        {
          "permission": "compute.instances.start"
        }
      ]
    }
  ],
  "identityList": {
    "identities": [
      {
        "name": "user:my-user@example.com"
      }
    ]
  },
  "fullyExplored": true
},
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyzeIamPolicy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

判斷哪些主體具備特定角色或權限

您可以使用政策分析工具,查看貴機構中哪些主體在任何 Google Cloud 資源上具有特定角色或權限。如要取得這項資訊,請建立查詢,其中包含一或多個要檢查的角色或權限,但未指定資源。

控制台

  1. 前往 Google Cloud 控制台的「政策分析器」頁面。

    前往「政策分析工具」頁面

  2. 在「分析政策」部分,找出標示為「自訂查詢」的窗格,然後點按該窗格中的「建立自訂查詢」

  3. 在「選取查詢範圍」欄位中,選取要將查詢範圍限定在其中的專案、資料夾或機構。Policy Analyzer 會分析該專案、資料夾或機構的存取權,以及該專案、資料夾或機構中的所有資源。

  4. 在「Parameter 1」(參數 1) 欄位中,選取「Role」(角色) 或「Permission」(權限)

  5. 在「Select a role」(選取角色) 或「Select a permission」(選取權限) 欄位中,選取要檢查的角色或權限。

  6. 選用:如要查看其他角色和權限,請執行下列步驟:

    1. 按一下「新增選取器」
    2. 在「Parameter 2」(參數 2) 欄位中,選取「Role」(角色) 或「Permission」(權限)
    3. 在「選取角色」或「選取權限」欄位中,選取要檢查的角色或權限。
    4. 繼續新增「角色」和「權限」選取器,直到列出所有要檢查的角色和權限為止。
  7. 選用:按一下「繼續」,然後選取要為這項查詢啟用的任何進階選項

  8. 在「自訂查詢」窗格中,依序點選「分析」>「執行查詢」。 報表頁面會顯示您輸入的查詢參數,以及所有主體的結果表格,這些主體在任何範圍內資源上都具有指定的角色或權限。

    在 Google Cloud 控制台中,政策分析查詢最多可執行一分鐘。一分鐘後, Google Cloud 控制台會停止查詢,並顯示所有可用結果。如果查詢未在該時間內完成, Google Cloud 控制台會顯示橫幅,指出結果不完整。如要取得這些查詢的更多結果,請將結果匯出至 BigQuery

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectfolderorganization 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • ROLES:以逗號分隔的清單,列出要檢查的角色,例如 roles/compute.admin,roles/compute.imageUser。如果您列出多個角色,政策分析器會檢查是否符合任何列出的角色。
  • PERMISSIONS:以半形逗號分隔的權限清單,列出您要檢查的權限,例如 compute.instances.get,compute.instances.start。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。

執行 gcloud asset analyze-iam-policy 指令:

Linux、macOS 或 Cloud Shell

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \
    --roles='ROLES' \
    --permissions='PERMISSIONS'

Windows (PowerShell)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID `
    --roles='ROLES' `
    --permissions='PERMISSIONS'

Windows (cmd.exe)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^
    --roles='ROLES' ^
    --permissions='PERMISSIONS'

您會收到含有分析結果的 JSON 回應。每項分析結果都會說明相關的 IAM 角色繫結,然後列出該繫結中的資源、存取權和主體。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果會列為 CONDITIONAL

回應的 identities 欄位會列出具有任何指定角色或權限的主體。以下範例顯示單一分析結果,並醒目顯示 identities 欄位。

...
---
ACLs:
- accesses:
  - permission: compute.instances.get
  - permission: compute.instances.start
  - role: roles/compute.admin
  identities:
  - name: user:my-user@example.com
  resources:
  - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
  attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
  binding:
    members:
    - user: my-user@example.com
    role: roles/compute.admin
---
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyze-iam-policy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

REST

如要判斷哪些主體具有特定角色或權限,請使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。

使用任何要求資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectsfoldersorganizations 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • ROLE_1ROLE_2... ROLE_N:要檢查的角色,例如 roles/compute.admin。如果您列出多個角色,政策分析工具會檢查是否列出任何角色。
  • PERMISSION_1PERMISSION_2... PERMISSION_N:您要檢查的權限,例如 compute.instances.get。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。

HTTP 方法和網址:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy

JSON 要求主體:

{
  "analysisQuery": {
    "accessSelector": {
      "roles": [
        "ROLE_1",
        "ROLE_2",
        "ROLE_N"
      ],
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  }
}

如要傳送要求,請展開以下其中一個選項:

您會收到含有分析結果的 JSON 回應。每項分析結果都會說明相關的 IAM 角色繫結,然後列出該繫結中的資源、存取權和主體。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果會列為 CONDITIONAL

回應的 identities 欄位會列出具有任何指定角色或權限的主體。以下範例顯示單一分析結果,並醒目顯示 identities 欄位。

...
{
  "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
  "iamBinding": {
    "role": "roles/compute.admin",
    "members": [
      "user:my-user@example.com"
    ]
  },
  "accessControlLists": [
    {
      "resources": [
        {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
        }
      ],
      "accesses": [
        {
          "permission": "compute.instances.get"
        },
        {
          "role": "roles/compute.admin"
        }
      ]
    }
  ],
  "identityList": {
    "identities": [
      {
        "name": "user:my-user@example.com"
      }
    ]
  },
  "fullyExplored": true
},
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyzeIamPolicy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

判斷主體對資源的存取權

您可以使用 Policy Analyzer,檢查主體在貴機構的資源中擁有哪些角色或權限。如要取得這項資訊,請建立查詢,其中包含要分析存取權的主體,以及要分析存取權的資源。

控制台

  1. 前往 Google Cloud 控制台的「政策分析器」頁面。

    前往「政策分析工具」頁面

  2. 在「分析政策」部分,找出標示為「自訂查詢」的窗格,然後點按該窗格中的「建立自訂查詢」

  3. 在「選取查詢範圍」欄位中,選取要將查詢範圍限定在其中的專案、資料夾或機構。Policy Analyzer 會分析該專案、資料夾或機構的存取權,以及該專案、資料夾或機構中的所有資源。

  4. 選擇要檢查的資源和主體:

    1. 在「Parameter 1」(參數 1) 欄位中,從下拉式選單選取「Resource」(資源)
    2. 在「資源」欄位中,輸入要分析存取權的資源完整資源名稱。如果您不知道完整資源名稱,請輸入資源的顯示名稱,然後從系統提供的資源清單中選取資源。
    3. 按一下「新增選取器」
    4. 在「Parameter 2」欄位中,從下拉式選單選取「Principal」
    5. 在「主體」欄位中,開始輸入使用者、服務帳戶或群組的名稱。然後從系統提供的主體清單中,選取要分析存取權的使用者、服務帳戶或群組。
  5. 選用:按一下「繼續」,然後選取要為這項查詢啟用的進階選項

  6. 在「自訂查詢」窗格中,依序點選「分析」>「執行查詢」。 報表頁面會顯示您輸入的查詢參數,以及指定主體在指定資源上擁有的所有角色結果表。

    在 Google Cloud 控制台中執行的政策分析查詢最多可執行一分鐘。一分鐘後, Google Cloud 控制台會停止查詢,並顯示所有可用結果。如果查詢未在該時間內完成, Google Cloud 控制台會顯示橫幅,指出結果不完整。如要取得這些查詢的更多結果,請將結果匯出至 BigQuery

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectfolderorganization 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • FULL_RESOURCE_NAME:要分析存取權的資源完整資源名稱。如需完整資源名稱格式清單,請參閱「資源名稱格式」。
  • PRINCIPAL:您要分析存取權的主體,格式為 PRINCIPAL_TYPE:ID,例如 user:my-user@example.com。如需主體類型的完整清單,請參閱「主體 ID」。

執行 gcloud asset analyze-iam-policy 指令:

Linux、macOS 或 Cloud Shell

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \
    --full-resource-name=FULL_RESOURCE_NAME \
    --identity=PRINCIPAL

Windows (PowerShell)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID `
    --full-resource-name=FULL_RESOURCE_NAME `
    --identity=PRINCIPAL

Windows (cmd.exe)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^
    --full-resource-name=FULL_RESOURCE_NAME ^
    --identity=PRINCIPAL

您會收到包含分析結果的 YAML 回應。每項分析結果都會列出與查詢相關的一組存取權、身分和資源,以及相關的 IAM 角色繫結。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果為 CONDITIONAL

回應中的 accesses 欄位會列出主體在指定資源上擁有的角色。以下範例顯示單一分析結果,並醒目顯示 accesses 欄位。

...
---
ACLs:
- accesses:
  - roles/iam.serviceAccountUser
  identities:
  - name: user:my-user@example.com
  resources:
  - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
  attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
  binding:
    members:
    - user: my-user@example.com
    role: roles/iam.serviceAccountUser
---
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyze-iam-policy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

REST

如要判斷主體對資源的存取權,請使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。

使用任何要求資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定於的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectsfoldersorganizations 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • FULL_RESOURCE_NAME:要分析存取權的資源完整資源名稱。如需完整資源名稱格式清單,請參閱「資源名稱格式」。
  • PRINCIPAL:您要分析存取權的主體,格式為 PRINCIPAL_TYPE:ID,例如 user:my-user@example.com。如需主體類型的完整清單,請參閱「主體 ID」。

HTTP 方法和網址:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy

JSON 要求主體:

{
  "analysisQuery": {
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "identitySelector": {
      "identity": "PRINCIPAL"
    }
  }
}

如要傳送要求,請展開以下其中一個選項:

您會收到含有分析結果的 JSON 回應。每項分析結果都會說明相關的 IAM 角色繫結,然後列出該繫結中的資源、存取權和主體。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果會列為 CONDITIONAL

回應中的 accesses 欄位會列出主體在指定資源上擁有的角色。以下範例顯示單一分析結果,並醒目顯示 accesses 欄位。

...
{
  "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
  "iamBinding": {
    "role": "roles/iam.serviceAccountUser",
    "members": [
      "user:my-user@example.com"
    ]
  },
  "accessControlLists": [
    {
      "resources": [
        {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
        }
      ],
      "accesses": [
        {
          "roles": "iam.serviceAccountUser"
        }
      ]
    }
  ],
  "identityList": {
    "identities": [
      {
        "name": "user:my-user@example.com"
      }
    ]
  },
  "fullyExplored": true
},
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyzeIamPolicy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

判斷主體可存取的資源

您可以使用政策分析工具,檢查機構內的主體對哪些資源具有特定角色或權限。如要取得這項資訊,請建立查詢,當中包含您要分析存取權的主體,以及您要檢查的一或多項權限或角色。

控制台

  1. 前往 Google Cloud 控制台的「政策分析器」頁面。

    前往「政策分析工具」頁面

  2. 在「分析政策」部分,找出標示為「自訂查詢」的窗格,然後點按該窗格中的「建立自訂查詢」

  3. 在「選取查詢範圍」欄位中,選取要將查詢範圍限定在其中的專案、資料夾或機構。Policy Analyzer 會分析該專案、資料夾或機構的存取權,以及該專案、資料夾或機構中的所有資源。

  4. 選擇要檢查的主體,以及要檢查的角色或權限:

    1. 在「Parameter 1」欄位中,從下拉式選單選取「Principal」
    2. 在「主體」欄位中,開始輸入使用者、服務帳戶或群組的名稱。然後從系統提供的主體清單中,選取要分析存取權的使用者、服務帳戶或群組。
    3. 按一下「新增選取器」
    4. 在「Parameter 2」(參數 2) 欄位中,選取「Role」(角色) 或「Permission」(權限)
    5. 在「選取角色」或「選取權限」欄位中,選取要檢查的角色或權限。
    6. 選用:如要檢查其他角色和權限,請繼續新增「角色」和「權限」選取器,直到列出所有要檢查的角色和權限為止。
  5. 選用:按一下「繼續」,然後選取要為這項查詢啟用的任何進階選項

  6. 在「自訂查詢」窗格中,依序點選「分析」>「執行查詢」。 報表頁面會顯示您輸入的查詢參數,以及結果表格,其中列出指定主體具備指定角色或權限的所有資源。

    在 Google Cloud 控制台中執行的政策分析查詢最多可執行一分鐘。一分鐘後, Google Cloud 控制台會停止查詢,並顯示所有可用結果。如果查詢未在該時間內完成, Google Cloud 控制台會顯示橫幅,指出結果不完整。如要取得這些查詢的更多結果,請將結果匯出至 BigQuery

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectfolderorganization 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • PRINCIPAL:您要分析存取權的主體,格式為 PRINCIPAL_TYPE:ID,例如 user:my-user@example.com。如需主體類型的完整清單,請參閱「主體 ID」。
  • PERMISSIONS:以半形逗號分隔的權限清單,列出您要檢查的權限,例如 compute.instances.get,compute.instances.start。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。

執行 gcloud asset analyze-iam-policy 指令:

Linux、macOS 或 Cloud Shell

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \
    --identity=PRINCIPAL \
    --permissions='PERMISSIONS'

Windows (PowerShell)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID `
    --identity=PRINCIPAL `
    --permissions='PERMISSIONS'

Windows (cmd.exe)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^
    --identity=PRINCIPAL ^
    --permissions='PERMISSIONS'

您會收到包含分析結果的 YAML 回應。每項分析結果都會列出與查詢相關的一組存取權、身分和資源,以及相關的 IAM 角色繫結。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果為 CONDITIONAL

回應中的 resources 欄位會列出指定主體擁有任何指定權限的資源。以下範例顯示單一分析結果,並醒目顯示 resources 欄位。

...
---
ACLs:
- accesses:
  - permission: compute.instances.get
  - permission: compute.instances.start
  identities:
  - name: user:my-user@example.com
  resources:
  - fullResourceName: //compute.googleapis.com/projects/my-project/global/images/my-image
policy:
  attachedResource: //compute.googleapis.com/projects/my-project/global/images/my-image
  binding:
    members:
    - user: my-user@example.com
    role: roles/compute.admin
---
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyze-iam-policy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

REST

如要判斷主體可以存取哪些資源,請使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。

使用任何要求資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectsfoldersorganizations 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • PRINCIPAL:您要分析存取權的主體,格式為 PRINCIPAL_TYPE:ID,例如 user:my-user@example.com。如需主體類型的完整清單,請參閱「主體 ID」。
  • PERMISSION_1PERMISSION_2... PERMISSION_N:您要檢查的權限,例如 compute.instances.get。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。

HTTP 方法和網址:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy

JSON 要求主體:

{
  "analysisQuery": {
    "identitySelector": {
      "identity": "PRINCIPAL"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  }
}

如要傳送要求,請展開以下其中一個選項:

您會收到含有分析結果的 JSON 回應。每項分析結果都會說明相關的 IAM 角色繫結,然後列出該繫結中的資源、存取權和主體。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果會列為 CONDITIONAL

回應中的 resources 欄位會列出指定主體擁有任何指定權限的資源。以下範例顯示單一分析結果,並醒目顯示 resources 欄位。

...
{
  "attachedResourceFullName": "//compute.googleapis.com/projects/my-project/global/images/my-image",
  "iamBinding": {
    "role": "roles/compute.admin",
    "members": [
      "user:my-user@example.com"
    ]
  },
  "accessControlLists": [
    {
      "resources": [
        {
          "fullResourceName": "//compute.googleapis.com/projects/my-project/global/images/my-image"
        }
      ],
      "accesses": [
        {
          "permission": "compute.instances.get"
        },
        {
          "permission": "compute.instances.start"
        }
      ]
    }
  ],
  "identityList": {
    "identities": [
      {
        "name": "user:my-user@example.com"
      }
    ]
  },
  "fullyExplored": true
},
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyzeIamPolicy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

判斷特定時間的存取權

如果提供足夠的背景資訊,政策分析器可以分析 IAM 條件式角色繫結,這類繫結只會在特定時間授予存取權。這些條件稱為「日期/時間條件」。 如要讓政策分析器準確分析具有日期/時間條件的角色繫結,您需要在要求中定義存取時間。

Policy Analyzer 也能分析資源條件,不需使用者額外輸入內容。如要進一步瞭解政策分析工具如何搭配條件使用,請參閱「條件式存取」一文。

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectfolderorganization 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • PERMISSIONS: 選用。以半形逗號分隔的權限清單,例如 compute.instances.get,compute.instances.start。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。
  • FULL_RESOURCE_NAME:選用。您要分析存取權的資源完整資源名稱。如需完整資源名稱格式清單,請參閱「資源名稱格式」。
  • PERMISSIONS: 選用。以半形逗號分隔的權限清單,例如 compute.instances.get,compute.instances.start。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。
  • ACCESS_TIME:要檢查的時間。這個時間必須是未來的時間,使用 RFC 3339 格式的時間戳記,例如 2099-02-01T00:00:00Z

執行 gcloud asset analyze-iam-policy 指令:

Linux、macOS 或 Cloud Shell

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID \
    --identity=PRINCIPAL \
    --full-resource-name=FULL_RESOURCE_NAME \
    --permissions='PERMISSIONS' \
    --access-time=ACCESS_TIME

Windows (PowerShell)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID `
    --identity=PRINCIPAL `
    --full-resource-name=FULL_RESOURCE_NAME `
    --permissions='PERMISSIONS' `
    --access-time=ACCESS_TIME

Windows (cmd.exe)

gcloud asset analyze-iam-policy --RESOURCE_TYPE=RESOURCE_ID ^
    --identity=PRINCIPAL ^
    --full-resource-name=FULL_RESOURCE_NAME ^
    --permissions='PERMISSIONS' ^
    --access-time=ACCESS_TIME

您會收到包含分析結果的 YAML 回應。每項分析結果都會列出與查詢相關的一組存取權、身分和資源,以及相關的 IAM 角色繫結。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果為 CONDITIONAL

在要求中加入存取時間後,政策分析工具就能評估日期/時間條件。如果條件評估結果為 false,該角色就不會納入回應。如果條件評估結果為 true,條件評估結果會列為 TRUE

...
---
ACLs:
- accesses:
  - permission: compute.instances.get
  - permission: compute.instances.start
  conditionEvaluationValue: 'TRUE'
  identities:
  - name: user:my-user@example.com
  resources:
  - fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
  attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
  binding:
    condition:
      expression: request.time.getHours("America/Los_Angeles") >= 5
      title: No access before 5am PST
    members:
    - user: my-user@example.com
    role: roles/compute.admin
---
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyze-iam-policy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

REST

如要判斷特定時間哪些主體會擁有資源的特定權限,請使用 Cloud Asset Inventory API 的 analyzeIamPolicy 方法。

使用任何要求資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要將搜尋範圍限定在的資源類型。系統只會分析附加至這項資源及其後代的 IAM 允許政策。請使用 projectsfoldersorganizations 值。
  • RESOURCE_ID:要將搜尋範圍限定於其中的Google Cloud 專案、資料夾或機構的 ID。系統只會分析附加至這項資源及其後代的 IAM 允許政策。專案 ID 是英數字元字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
  • PERMISSION_1PERMISSION_2... PERMISSION_N:選用。您要檢查的權限,例如 compute.instances.get。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。
  • FULL_RESOURCE_NAME:選用。您要分析存取權的資源完整資源名稱。如需完整資源名稱格式清單,請參閱「資源名稱格式」。
  • PERMISSION_1PERMISSION_2... PERMISSION_N:選用。您要檢查的權限,例如 compute.instances.get。如果您列出多項權限,政策分析工具會檢查是否列出任何權限。
  • ACCESS_TIME:要檢查的時間。這個時間必須是未來的時間,使用 RFC 3339 格式的時間戳記,例如 2099-02-01T00:00:00Z

HTTP 方法和網址:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicy

JSON 要求主體:

{
  "analysisQuery": {
    "identitySelector": {
      "identity": "PRINCIPAL"
    },
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    },
    "conditionContext": {
      "accessTime": "ACCESS_TIME"
    }
  }
}

如要傳送要求,請展開以下其中一個選項:

您會收到含有分析結果的 JSON 回應。每項分析結果都會說明相關的 IAM 角色繫結,然後列出該繫結中的資源、存取權和主體。如果角色繫結設有條件,分析結果也會包含條件評估結果。如果無法評估條件,結果會列為 CONDITIONAL

在要求中加入存取時間後,政策分析工具就能評估日期/時間條件。如果條件評估結果為 false,該角色就不會納入回應。如果條件評估結果為 true,分析回應中的條件評估值為 TRUE

...
{
  "attachedResourceFullName": "//cloudresourcemanager.googleapis.com/projects/my-project",
  "iamBinding": {
    "role": "roles/compute.admin",
    "members": [
      "user:my-user@example.com"
    ],
    "condition": {
      "expression": "request.time.getHours(\"America/Los_Angeles\") \u003e= 5",
      "title": "No access before 5am PST"
    }
  },
  "accessControlLists": [
    {
      "resources": [
        {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
        }
      ],
      "accesses": [
        {
          "permission": "compute.instances.get"
        },
        {
          "permission": "compute.instances.start"
        }
      ],
      "conditionEvaluation": {
        "evaluationValue": "TRUE"
      }
    }
  ],
  "identityList": {
    "identities": [
      {
        "name": "user:my-user@example.com"
      }
    ]
  },
  "fullyExplored": true
},
...

如果要求在查詢完成前逾時,您會收到 DEADLINE_EXCEEDED 錯誤。如要取得這些查詢的更多結果,請使用 analyzeIamPolicy 的長時間執行版本,將結果寫入 BigQuery 或 Cloud Storage。如需操作說明,請參閱「將政策分析結果寫入 BigQuery」或「將政策分析結果寫入 Cloud Storage」。

啟用選項

您可以啟用下列選項,取得更詳細的查詢結果。

控制台

選項 說明
列出與查詢相符的資源內有哪些資源 啟用這個選項後,查詢結果會列出最多 1,000 個相關的子項資源,這些資源屬於查詢結果中的任何父項資源 (專案、資料夾和機構)。
列出群組中的個別使用者

啟用這個選項後,查詢結果中的所有群組都會展開為個別成員。如果您具備足夠的群組權限,系統也會展開巢狀群組。每個群組最多可擴充至 1,000 名成員。

只有在查詢中未指定主體時,才能使用這個選項。

列出角色的權限

啟用這個選項後,查詢結果會列出每個角色中的所有權限,以及角色本身。

只有在查詢中未指定任何權限或角色時,才會顯示這個選項。

gcloud

本節說明使用 gcloud CLI 分析允許政策時,可以新增的幾個常見標記。如需完整選項清單,請參閱「選用標記」。

旗標 說明
--analyze-service-account-impersonation

如果啟用這個選項,Policy Analyzer 會執行額外的分析查詢,判斷哪些使用者可以模擬服務帳戶,並對指定資源擁有指定存取權。Policy Analyzer 會針對查詢結果中的每個服務帳戶執行一項查詢。這些查詢會分析誰對服務帳戶具有下列任一權限:

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

這項作業非常耗費資源,因為系統會自動執行許多查詢。強烈建議您使用 analyze-iam-policy-longrunning匯出至 BigQuery匯出至 Cloud Storage,而非使用 analyze-iam-policy

--expand-groups

啟用這個選項後,查詢結果中的所有群組都會展開為個別成員。如果您具備足夠的群組權限,系統也會展開巢狀群組。每個群組最多可擴充至 1,000 名成員。

只有在查詢中未指定主體時,這個選項才會生效。

--expand-resources 啟用這個選項後,查詢結果會列出最多 1,000 個相關的子項資源,這些資源屬於查詢結果中的任何父項資源 (專案、資料夾和機構)。
--expand-roles

啟用這個選項後,查詢結果會列出每個角色中的所有權限,以及角色本身。

只有在查詢中未指定任何權限或角色時,才會顯示這個選項。

--output-group-edges 啟用這個選項後,查詢結果會輸出群組間的相關成員關係。
--output-resource-edges 啟用這個選項後,查詢結果會輸出資源間的相關父項/子項關係。

REST

如要啟用任何選項,請先在分析查詢中新增 options 欄位。例如:

{
  "analysisQuery": {
    "resourceSelector": {
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project"
    },
    "accessSelector": {
      "permissions": [
        "iam.roles.get",
        "iam.roles.list"
      ]
   },
   "options": {
     OPTIONS
   }
  }
}

OPTIONS 替換為要啟用的選項,格式為 "OPTION": true。下表說明可用的選項:

選項 說明
analyzeServiceAccountImpersonation

如果啟用這個選項,Policy Analyzer 會執行額外的分析查詢,判斷哪些使用者可以模擬服務帳戶,並對指定資源擁有指定存取權。Policy Analyzer 會針對查詢結果中的每個服務帳戶執行一項查詢。這些查詢會分析誰對服務帳戶具有下列任一權限:

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

這項作業非常耗費資源,因為系統會自動執行許多查詢。強烈建議您使用 AnalyzeIamPolicyLongrunning匯出至 BigQuery匯出至 Cloud Storage,而非使用 AnalyzeIamPolicy

expandGroups

啟用這個選項後,查詢結果中的所有群組都會展開為個別成員。如果您具備足夠的群組權限,系統也會展開巢狀群組。每個群組最多可擴充至 1,000 名成員。

只有在查詢中未指定主體時,這個選項才會生效。

expandResources 啟用這個選項後,查詢結果會列出最多 1,000 個相關的子項資源,這些資源屬於查詢結果中的任何父項資源 (專案、資料夾和機構)。
expandRoles

啟用這個選項後,查詢結果會列出每個角色中的所有權限,以及角色本身。

只有在查詢中未指定任何權限或角色時,才會顯示這個選項。

outputGroupEdges 啟用這個選項後,查詢結果會輸出群組間的相關成員關係。
outputResourceEdges 啟用這個選項後,查詢結果會輸出資源間的相關父項/子項關係。

後續步驟