排解政策問題

本頁說明如何排解 Identity and Access Management (IAM) 允許、拒絕和主體存取邊界政策的問題。

使用政策疑難排解工具

如要排解特定主體的存取權問題,請使用 IAM 政策疑難排解工具。

政策疑難排解工具可協助您瞭解主體是否能存取資源。指定主體、資源和權限後,政策疑難排解工具會檢查影響主體存取權的允許政策、拒絕政策和主體存取權範圍 (PAB) 政策。然後,根據這些政策,系統會告知主體是否能使用指定權限存取資源。並列出相關政策,說明這些政策對主體存取權的影響。

如要瞭解如何使用政策疑難排解工具排解允許政策、拒絕政策和主體存取邊界政策的問題,請參閱「排解 IAM 權限問題」。

查看適用於資源的所有允許和拒絕政策

在 Google Cloud中,下列允許和拒絕政策會影響資源存取權:

  • 資源的允許政策
  • 資源的拒絕政策 (如有)
  • 資源的父項專案、資料夾和機構的允許政策 (如有)
  • 資源的父項專案、資料夾和機構的拒絕政策 (如有)

由於政策繼承,父項專案、資料夾和機構的允許和拒絕政策會影響資源存取權。將允許或拒絕政策附加至專案、資料夾或機構時,該政策也會套用至專案、資料夾或機構內的所有資源。

舉例來說,如果機構的拒絕政策規定主體不得使用特定權限,則主體無法在機構內的任何資源使用該權限。即使該機構中的資料夾和專案有較寬鬆的拒絕政策,或是允許政策授予主體權限,這項規則仍適用。

同樣地,如果專案的允許政策授予主體特定權限,則主體在專案中的任何資源都具有該權限,前提是未遭拒絕該權限。

所有這些政策的聯集稱為資源的「適用政策」或「有效政策」

在 Google Cloud中,您可以使用帶有 --include-deny 旗標的 gcloud beta projects get-ancestors-iam-policy 指令,取得影響專案存取權的所有允許和拒絕政策清單。這些政策共同構成專案的適用政策。您可以調查每項政策,瞭解政策對主體存取權的影響。

gcloud

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

  • PROJECT_ID:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如 my-project

執行 gcloud beta projects get-ancestors-iam-policy 指令:

Linux、macOS 或 Cloud Shell

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (PowerShell)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (cmd.exe)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

回應會包含專案、專案的任何上層資料夾和機構的允許與拒絕政策。以下範例顯示組織 1234567890123 和專案 my-project 的允許政策,以及專案 my-project 的拒絕政策:

[
  {
    "id": "1234567890123",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/iam.denyAdmin"
        },
        {
          "members": [
            "user:raha@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwXW6Eab7TI=",
      "version": 1
    },
    "type": "organization"
  },
  {
    "id": "my-project",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwXXjOM7L6M=",
      "type": "project"
    }
  },
  {
    "id": "my-project",
    "policy": {
      "createTime": "2022-02-14T21:46:35.865279Z",
      "displayName": "My deny policy",
      "etag": "MTgyMzg2ODcwNTEyMjMxMTM3Mjg=",
      "kind": "DenyPolicy",
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/my-deny-policy",
      "rules": [
        {
          "denyRule": {
            "deniedPermissions": [
              "iam.googleapis.com/serviceAccounts.create"
            ],
            "deniedPrincipals": [
              "user:raha@example.com"
            ]
          },
          "description": "Prevent service account creation"
        }
      ],
      "uid": "c83e3dc3-d8a6-6f51-4018-814e9f200b05",
      "updateTime": "2022-02-14T21:46:35.865279Z"
    },
    "type": "project"
  }
]

在這個範例中,Raha 在機構中獲派服務帳戶管理員角色 (roles/iam.serviceAccountAdmin),但專案設有拒絕政策,禁止 Raha 使用 iam.googleapis.com/serviceAccounts.create 權限。因此,如果 Raha 嘗試在專案 my-project 中建立服務帳戶,系統會拒絕該要求。

在某些情況下,您可能只需要查看資源的有效允許政策,例如貴機構未使用拒絕政策。在這些情況下,您可以使用下列方法查看有效允許政策:

  • 在Google Cloud 控制台中查看資源的 IAM 允許政策。控制台會自動顯示每個資源的有效政策。 Google Cloud

    如要瞭解如何在Google Cloud 控制台中查看資源的 IAM 允許政策,請參閱「查看目前的存取權」。

  • 使用 Cloud Asset API 取得資源的有效允許政策。詳情請參閱「查看有效的 IAM 政策」。

如要在允許政策中找出特定角色繫結,可以搜尋允許政策。

Cloud Asset Inventory 可讓您搜尋符合指定參數的角色繫結允許政策。您可以使用各種搜尋參數,包括:

  • 資源類型
  • 主體類型
  • 角色
  • 專案
  • 資料夾
  • 機構

詳情請參閱「搜尋 IAM 允許政策」。