排解 IAM 權限問題

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

您可以使用Google Cloud 控制台、Google Cloud CLI 或 REST API 存取政策疑難排解工具。對於基本查詢,使用 Google Cloud 控制台通常是最快的方法。對於更複雜的場景,請考慮使用 gcloud CLI 或 REST API。

事前準備

  • Enable the Policy Troubleshooter API.

    Enable the API

所需權限

如要完整排解實體的存取權問題,您需要具備下列權限。

具備排解個別實體存取權問題的權限

政策疑難排解工具會根據允許政策、拒絕政策、主體存取權範圍政策,以及您有權查看的角色,分析主體對資源的存取權。如果您沒有查看資源適用政策的權限,或是沒有查看自訂角色的權限,就無法判斷主體是否具有存取權。

具備排解允許和拒絕政策問題的權限

如要排解允許和拒絕政策問題,您必須具備包含要排解資源的組織的權限。這些權限可讓您查看用於控制資源存取權的允許和拒絕政策。

如要取得疑難排解實體存取權所需的權限,請要求管理員授予您下列 IAM 角色,這些角色適用於包含您要疑難排解存取權的資源所在機構:

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

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

如果您沒有查看資源允許和拒絕政策的權限,這些允許和拒絕政策的存取結果會是 Unknown

具備排解主體存取邊界政策問題的權限

如要排解主體存取邊界政策問題,您必須取得機構的權限,該機構的主體組合中包含主體。您識別這個機構的方式取決於主要類型:

  • Google 帳戶和 Google 群組:與含有實體的 Google Workspace 網域相關聯的機構
  • 聯合身分 (工作團隊身分集區或工作負載身分集區中的身分):包含主體的身份集區所在機構
  • 服務帳戶:包含建立服務帳戶的專案的機構

這些權限可讓您查看主體存取邊界政策,藉此控管主體可存取的內容。

如要取得解決實體存取權問題所需的權限,請要求管理員在適當的機構中授予您下列 IAM 角色:

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

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

如果您沒有權限查看主體適用的主體存取邊界政策,主體存取邊界政策的存取結果會是 Unknown

排解群組成員存取權問題的權限

如果允許和拒絕政策包含群組,您需要 Google Workspace 管理員 API 權限 groups.read,才能針對個別群組成員的存取權進行疑難排解。超級管理員和群組管理員會自動取得這項權限。如要將這項權限授予非超級使用者或群組管理員的使用者,請建立自訂 Google Workspace 管理員角色,這個角色包含 groups.read 權限 (位於「Admin API 權限」下),並將這項權限授予使用者。

如果您沒有這些權限,則包含群組或網域的角色繫結和拒絕規則會顯示「Unknown」存取結果,除非角色繫結或拒絕規則也明確包含主體。

排解網域成員存取權問題的權限

如果允許和拒絕政策包含 Google Workspace 帳戶或 Cloud Identity 網域,您必須是網域管理員,才能針對個別網域成員的存取權進行疑難排解。

如果您沒有這些權限,則包含群組或網域的角色繫結和拒絕規則會顯示「Unknown」存取結果,除非角色繫結或拒絕規則也明確包含主體。

疑難排解存取

如要排解存取權問題,請提供下列資訊:

  • Principal:要檢查的電子郵件地址。電子郵件地址必須是使用者或服務帳戶的地址。系統不支援其他類型的原始群組,包括群組、網域、人力資源身分和工作負載身分。
  • Resource:您要對存取權進行疑難排解的資源完整名稱。例如,如要排解 my-project 專案的存取權問題,請輸入 //cloudresourcemanager.googleapis.com/projects/my-project。如需其他類型的資源,請參閱完整資源名稱範例

  • 權限:要檢查的權限。如果您使用Google Cloud 主控台,系統會在您輸入時顯示建議清單。

    如要排解權限問題,該權限必須適用於要求中的資源。換句話說,您必須能夠以某種方式使用該權限存取資源。如果權限不適用於該項資源,要求就會失敗。舉例來說,如果您嘗試對 Google Kubernetes Engine 叢集的 compute.instances.get 權限進行疑難排解,由於 compute.instance.get 權限無法用於存取 Google Kubernetes Engine 叢集,因此要求會失敗。

    如需權限的完整清單,請參閱權限參考資料

控制台

如要排解存取權問題,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「政策疑難排解工具」頁面。

    前往「政策疑難排解工具」

  2. 輸入要檢查存取權的主體電子郵件地址。

  3. 輸入要檢查的資源完整資源名稱。

    如果不知道完整資源名稱,請執行下列任一操作:

    • 如果您要為專案、資料夾或機構排解存取權問題,請開始輸入內容,查看自動完成選項。
    • 如果您要排解其他資源類型的存取權問題,請按一下「瀏覽」開啟資源搜尋對話方塊,然後搜尋資源:

      1. 在「Select scope」方塊中,選取要搜尋的專案、資料夾或機構。
      2. 在「Resource type」方塊中,選取要搜尋的資源類型。
      3. 在「搜尋資源」方塊中輸入資源名稱的一部分。
      4. 在結果部分中,選取要檢查的資源。
      5. 按一下「選取」,選擇資源並關閉對話方塊。
  4. 輸入要檢查的權限。

    如果您不知道完整權限名稱,請開始輸入,即可查看自動完成選項。

  5. 選用:如要檢查其他更多資源和權限,請選取「Add Another Pair」,然後重複執行上一個步驟。

  6. 按一下「檢查存取權」

gcloud

如要瞭解主體為何擁有或沒有 IAM 權限,請使用 gcloud beta policy-troubleshoot iam 指令。

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

  • VERSION:選用。要使用的指令版本。如要排解僅根據允許和拒絕政策的存取權問題,請勿指定版本。如要針對允許、拒絕和主體存取邊界政策排解存取權問題,請使用 beta 版本。
  • EMAIL:您要解決權限問題的主體電子郵件地址。
  • RESOURCE:要授予權限的資源。
  • PERMISSION:要進行疑難排解的權限。

執行 gcloud beta policy-troubleshoot iam 指令:

Linux、macOS 或 Cloud Shell

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION

Windows (PowerShell)

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION

Windows (cmd.exe)

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION

您應該會收到類似以下的回應:

回應

{
  "accessTuple": {
    "conditionContext": {
      "destination": {},
      "effectiveTags": [
        {
          "namespacedTagKey": "project-1/tag-key-1",
          "namespacedTagValue": "project-1/tag-key-1/tag-value-1",
          "tagKey": "tagKeys/123456789012",
          "tagKeyParentName": "projects/123456789012",
          "tagValue": "tagValues/123456789012"
        },
      ],
      "request": {},
      "resource": {}
    },
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
    "permission": "bigtable.instances.create",
    "permissionFqdn": "bigtable.googleapis.com/instances.create",
    "principal": "service-account-3@project-1.iam.gserviceaccount.com"
  },
  "allowPolicyExplanation": {
    "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
    "explainedPolicies": [
      {
        "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
        "bindingExplanations": [
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
              "title": "Resource-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 62,
                  "value": false
                }
              ],
              "value": false
            },
            "memberships": {
              "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
              "title": "Tag-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 73,
                  "value": true
                }
              ],
              "value": true
            },
            "memberships": {
              "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/compute.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-3@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/iam.serviceAccountTokenCreator",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "role": "roles/owner",
            "rolePermission": "ROLE_PERMISSION_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.projectIamAdmin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.tagViewer",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          }
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
        "policy": {
          "bindings": [
            {
              "condition": {
                "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
                "title": "Resource-based condition"
              },
              "members": [
                "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "condition": {
                "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
                "title": "Tag-based condition"
              },
              "members": [
                "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "members": [
                "user:user-2@example.com"
              ],
              "role": "roles/compute.admin"
            },
            {
              "members": [
                "user:user-1@example.com",
                "user:user-3@example.com"
              ],
              "role": "roles/iam.serviceAccountTokenCreator"
            },
            {
              "members": [
                "user:user-2@example.com",
                "user:user-1@example.com"
              ],
              "role": "roles/owner"
            },
            {
              "members": [
                "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com",
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.projectIamAdmin"
            },
            {
              "members": [
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.tagViewer"
            }
          ],
          "etag": "BwYY6ttEMEY=",
          "version": 3
        },
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      },
    ],
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "denyPolicyExplanation": {
    "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
    "explainedResources": [
      {
        "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
        "explainedPolicies": [
          {
            "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
            "policy": {
              "createTime": "2024-04-09T23:28:24.103203Z",
              "displayName": "Troubleshooter v3 prober non-tag deny policy",
              "etag": "MTgyMzk3MDY4OTY4MDE0ODg4OTY=",
              "kind": "DenyPolicy",
              "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F546942305807/denypolicies/deny-policy-1",
              "rules": [
                {
                  "denyRule": {
                    "deniedPermissions": [
                      "bigquery.googleapis.com/datasets.create"
                    ],
                    "deniedPrincipals": [
                      "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com"
                    ]
                  }
                }
              ],
              "uid": "fab63b4d-ecfb-5f06-8a6d-602bf1be5062",
              "updateTime": "2024-05-20T23:29:38.428095Z"
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "ruleExplanations": [
              {
                "combinedDeniedPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedDeniedPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedExceptionPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedExceptionPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "deniedPermissions": {
                  "bigquery.googleapis.com/datasets.create": {
                    "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "deniedPrincipals": {
                  "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com": {
                    "membership": "MEMBERSHIP_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            ]
          },
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012",
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      }
    ],
    "permissionDeniable": true,
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  },
  "overallAccessState": "CANNOT_ACCESS",
  "pabPolicyExplanation": {
    "explainedBindingsAndPolicies": [
      {
        "bindingAndPolicyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
        "explainedPolicy": {
          "explainedRules": [
            {
              "combinedResourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED",
              "effect": "ALLOW",
              "explainedResources": [
                {
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL",
                  "resource": "//cloudresourcemanager.googleapis.com/projects/project-2",
                  "resourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED"
                }
              ],
              "relevance": "HEURISTIC_RELEVANCE_NORMAL",
              "ruleAccessState": "PAB_ACCESS_STATE_NOT_ALLOWED"
            }
          ],
          "policy": {
            "createTime": "2024-04-09T17:40:51.627668Z",
            "details": {
              "enforcementVersion": "1",
              "rules": [
                {
                  "effect": "ALLOW",
                  "resources": [
                    "//cloudresourcemanager.googleapis.com/projects/project-2"
                  ]
                }
              ]
            },
            "displayName": "Troubleshooter v3 PAB Policy",
            "etag": "m64s4IgR80eDJDywuVA2DA==",
            "name": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "uid": "puid_11875429267422576641",
            "updateTime": "2024-04-09T17:40:51.627668Z"
          },
          "policyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
          "policyVersion": {
            "enforcementState": "PAB_POLICY_ENFORCEMENT_STATE_NOT_ENFORCED",
            "version": 1
          },
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "explainedPolicyBinding": {
          "conditionExplanation": {
            "evaluationStates": [
              {
                "end": 53,
                "value": true
              },
              {
                "end": 153,
                "start": 58,
                "value": false
              },
              {
                "end": 248,
                "start": 157,
                "value": false
              }
            ],
            "value": false
          },
          "policyBinding": {
            "condition": {
              "expression": "principal.type == 'iam.googleapis.com/ServiceAccount' && (principal.subject=='service-account-1@project-1.iam.gserviceaccount.com' || principal.subject=='service-account-2@project-1.iam.gserviceaccount.com')"
            },
            "createTime": "2024-04-09T17:51:13.504418Z",
            "displayName": "PAB Policy Binding on project-1 project",
            "etag": "W/\"hz9IKzHsIqvopqDRcVYDxQ==\"",
            "name": "projects/123456789012/locations/global/policyBindings/example-policy-binding",
            "policy": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
            "policyUid": "puid_11875429267422576641",
            "target": {
              "principalSet": "//cloudresourcemanager.googleapis.com/projects/project-1"
            },
            "uid": "buid_1012746966204940289", 
            "updateTime": "2024-05-09T23:08:56.846355Z"
          },
          "policyBindingState": "POLICY_BINDING_STATE_NOT_ENFORCED",
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "relevance": "HEURISTIC_RELEVANCE_NORMAL"
      }
    ],
    "principalAccessBoundaryAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  }
}

REST

如要瞭解主體為何具備或不具備 IAM 權限,請使用政策疑難排解工具 API 的 iam.troubleshoot 方法。

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

  • VERSION:這項要求要使用的 API 版本。如要排解僅以允許和拒絕政策為依據的存取權問題,請使用 v3。如要針對允許、拒絕和主體存取邊界政策排解存取權問題,請使用 v3beta
  • EMAIL:您要解決權限問題的主體電子郵件地址。
  • RESOURCE:要授予權限的資源。
  • PERMISSION:要進行疑難排解的權限。
  • PROJECT_ID:您要用來提出要求的專案 ID。專案 ID 為英數字元字串,例如 my-project

HTTP 方法和網址:

POST https://policytroubleshooter.googleapis.com/VERSION/iam:troubleshoot

JSON 要求主體:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION"
  }
}

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

您應該會收到如下的 JSON 回應:

瞭解疑難排解工具結果

控制台

結果頁面包含下列資訊:

評估詳細資料

「評估詳細資料」部分會列出您要疑難排解的存取權摘要,包括指定的主體、資源和權限。如果您要為多個資源權限組合排解問題,可以使用「Access Evaluation」清單切換。

政策詳細資料

「政策詳細資料」部分會詳細說明相關的允許、拒絕和主體存取邊界政策如何影響主體的存取權。

相關主體存取邊界政策包括所有繫結至主體組合 (包含主體) 的主體存取邊界政策。

相關的允許和拒絕政策包括:

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

父項專案、資料夾和機構的允許和拒絕政策會因政策繼承而相關。當您將允許或拒絕政策附加至專案、資料夾或機構時,該政策也會套用至該專案、資料夾或機構內的所有資源。

舉例來說,如果機構的拒絕政策指出主體無法使用特定權限,則該主體就無法在機構內的任何資源上使用該權限。即使該機構中的資料夾和專案採用較寬鬆的拒絕政策,或允許政策為主體提供權限,這項規則仍會套用。

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

「政策詳細資料」部分包含下列部分:

存取狀態

「存取狀態」專區會概述各政策類型 (主體存取邊界政策、拒絕政策和允許政策) 的結果,並說明整體結果。結果會指出主體是否能根據相關政策,使用權限存取資源。

如要讓使用者能夠使用權限存取資源,所有政策類型都必須允許存取。詳情請參閱「政策評估」。

主體存取邊界政策

在「主體存取權範圍政策」部分,您可以查看主體適用的所有主體存取邊界政策,以及將這些政策繫結至主體的政策繫結。

「Policies」窗格會列出所有已繫結至主體組合 (包含主體) 的政策。每個政策旁邊都有一個圖示,指出該政策對主體存取權的影響。

主體存取邊界政策可透過以下方式影響主體的存取權:

  • 主體可存取資源:主體存取邊界政策已套用至主體,且其中一個規則含有查詢的資源。
  • 主體不可存取資源:主體存取邊界政策已套用至主體,但查詢的資源不在該政策的規則中。
  • 未強制執行:在下列情況下,系統不會強制執行主體存取邊界政策:

    • IAM 不會在主體存取邊界政策的執行版本中強制執行指定的權限。因此,主體存取邊界政策無法封鎖存取權。
    • 由於政策繫結中的條件,主體存取邊界政策或繫結不適用於主體。
    • 主體存取邊界政策沒有任何規則。

    如果未強制執行主體存取邊界政策,則無法影響主體是否能存取資源。

如要查看與主體存取邊界政策相關聯的規則和繫結,請按一下政策名稱。「Policies」窗格旁的窗格會顯示政策詳細資料。

如要查看政策中的規則,請按一下「邊界規則」分頁標籤。這個分頁會顯示相關主體存取邊界政策規則的資料表。

如果主體存取邊界規則會影響政策疑難排解工具查詢的整體結果,則該規則就很重要。因此,相關規則會因政策疑難排解工具結果而異。舉例來說,請考慮以下情況:

  • 政策疑難排解工具指出主體可以存取資源。因此,相關規則是指讓主體有權存取資源的規則。
  • 政策疑難排解工具指出主體無法存取資源。不過,根據相關主體存取邊界政策,主體有權存取該資源。因此,由於主體存取邊界政策並非主體無法存取資源的原因,因此沒有任何相關規則。
  • 政策疑難排解工具指出主體無法存取資源。此外,根據相關的主體存取邊界政策,主體不具備存取資源的資格。因此,相關規則是指不會讓主體有權存取資源的規則。

如要查看政策中的所有主體存取邊界規則,請取消勾選「只顯示相關的規則和繫結」核取方塊。

邊界規則表中的「Findings」欄會指出主體存取邊界規則是否含有查詢的資源。如要查看規則的詳細資料,請按一下「查看規則詳細資料」

如要查看政策的政策繫結,請按一下「繫結」分頁標籤。這個分頁會顯示所選主體存取邊界政策的相關政策繫結表格。

如果政策繫結可有效地將主體存取邊界政策套用至查詢的主體,則該繫結就與該政策相關。如要讓政策繫結將主體存取邊界政策套用至主體,必須符合下列條件:

  • 政策繫結中設定的主體必須包含查詢的主體
  • 政策繫結中的任何條件,都必須針對查詢的實體評估為 true

如要查看所有政策繫結,其中的主體組合包含查詢的主體,無論查詢的主體是否符合繫結中的條件,請取消勾選「只顯示相關的規則和繫結」核取方塊。

繫結表中的「Findings」欄會指出是否針對查詢的主體強制執行繫結。如要進一步瞭解政策繫結,請按一下「查看繫結詳細資料」

拒絕政策

在「拒絕政策」部分,您可以查看所有相關拒絕政策、找出拒絕主體存取權的拒絕規則,以及瞭解拒絕規則為何會拒絕或不會拒絕主體的權限。

「設有拒絕政策的資源」窗格會列出所有相關拒絕政策,並依附加的資源進行分類。每項拒絕政策旁邊都會顯示存取權評估。這項評估只適用於該拒絕政策,不會反映來自繼承政策的任何存取權。如果您沒有查看資源拒絕政策的權限,資源清單中就不會列出該資源或其拒絕政策。

如要查看這些拒絕政策中的相關拒絕規則,請按一下拒絕政策。如要查看資源拒絕政策中的所有拒絕規則,請按一下資源。拒絕規則會顯示在「拒絕規則」窗格中。這個窗格包含所有拒絕規則的資料表,其中包含所選資源的查詢主體或權限,或拒絕政策。

「存取」欄會指出拒絕規則是否拒絕主體的權限。如要進一步瞭解拒絕規則,請在該規則的資料列中按一下「查看拒絕規則」

允許政策

在「允許政策」專區中,您可以瀏覽所有相關的允許政策、找出授予主體存取權的角色繫結,以及瞭解角色繫結為何會或不會授予主體權限。

「Resources」窗格會列出指定資源及其祖系。每個資源旁邊都有一個存取權評估。這項評估只適用於該資源的允許政策,不會反映繼承政策的任何存取權。如果您沒有查看資源允許政策的權限,資源清單中就不會列出該資源。

如要查看資源允許政策中的相關角色繫結,並瞭解這些繫結是否會授予主體權限,請按一下資源。允許政策的角色繫結會顯示在「角色繫結」窗格中。

「角色繫結」窗格包含所選資源允許政策中的角色繫結表格。根據預設,這份表格只會包含具備指定權限的角色繫結。如果主體沒有存取權,表格也會顯示具有可編輯自訂角色的角色繫結。如要查看所有角色繫結,請取消勾選「僅顯示相關繫結」核取方塊。

「存取權」欄會指出角色繫結是否會將權限授予主體。如要進一步查看角色繫結的詳細資料,請在該角色繫結的資料列中按一下「查看繫結詳細資料」

gcloud

回應包含四個主要部分:要求中的存取元組說明、允許政策評估結果、拒絕政策評估結果,以及整體存取狀態。

  • accessTuple:說明要求中的存取元組,包括您提供的任何條件背景資訊。這個部分還包含適用於資源的標記摘要。
  • allowPolicyExplanation:摘要說明相關的允許政策是否授予主體權限,接著列出允許政策和其角色繫結。

    針對每個允許政策,回應會列出政策中的所有角色繫結,並根據下列條件進行評估:

    • 角色繫結是否包含權限。
    • 角色繫結是否包含主體。
    • 是否符合角色繫結中的條件 (如有)。

    接著,回應會列印允許政策的完整 JSON 文字。

  • denyPolicyExplanation:摘要說明相關拒絕政策是否拒絕主體的權限,後面會列出含有拒絕政策的資源。對於每項資源,回應會列出資源附加的所有拒絕政策。

    對於每項拒絕政策,回應會列印政策的中繼資料,並列出政策中的拒絕規則,然後根據下列條件評估每項規則:

    • 拒絕規則是否包含權限。
    • 權限是否在拒絕規則中列為例外狀況。
    • 拒絕規則是否包含主體。
    • 主體是否在拒絕規則中列為例外狀況。
    • 是否符合拒絕規則中的條件 (如果有的話)。
  • overallAccessState:主體是否能根據相關的允許政策、拒絕政策和主體存取邊界政策,使用指定權限存取指定資源。

    相關主體存取邊界政策包括所有繫結至主體組合 (包含主體) 的主體存取邊界政策。

    相關的允許和拒絕政策包括:

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

    父項專案、資料夾和機構的允許和拒絕政策會因政策繼承而相關。當您將允許或拒絕政策附加至專案、資料夾或機構時,該政策也會套用至該專案、資料夾或機構內的所有資源。

    舉例來說,如果機構的拒絕政策指出主體無法使用特定權限,則該主體就無法在機構內的任何資源上使用該權限。即使該機構中的資料夾和專案採用較寬鬆的拒絕政策,或允許政策為主體提供權限,這項規則仍會套用。

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

    如要讓使用者能夠使用權限存取資源,所有政策類型都必須允許存取。詳情請參閱「政策評估」。

  • pabPolicyExplanation:摘要說明相關主體存取邊界政策是否允許主體存取資源,接著是相關主體存取邊界政策繫結和主體存取邊界政策。

    主體存取邊界政策可以允許存取、不允許存取,或不強制執行。在下列情況下,系統不會強制執行主體存取邊界政策:

    • IAM 不會在主體存取邊界政策的執行版本中強制執行指定的權限。因此,主體存取邊界政策無法封鎖存取權。
    • 由於政策繫結中的條件,主體存取邊界政策或繫結不適用於主體。
    • 主體存取邊界政策沒有任何規則。

    如果未強制執行主體存取邊界政策,則無法影響主體是否能存取資源。

    回應也會列出包含主體的所有政策繫結,以及每個政策繫結中主體存取權範圍政策的詳細資料:

    • 針對每個主體存取邊界政策繫結,回應會列印是否對主體強制執行政策繫結,然後列印政策繫結的文字。如果繫結中設定的主體包含查詢的主體,且政策繫結中的條件針對查詢的主體評估為 true,就會強制執行政策繫結。如果未強制執行政策繫結,政策就無法影響主體是否能存取資源。
    • 針對每個主體存取邊界政策,回應會列印以下內容:

      • 政策是否允許存取、不允許存取或未強制執行。
      • 政策的強制執行版本。這個版本號碼會決定 IAM 是否會針對查詢的權限,強制執行這項主體存取邊界政策。如果未強制執行權限,政策就無法影響主體是否能存取資源。
      • 主體存取邊界政策中的規則,以及每項規則是否允許存取。對於每項規則,回應會指出規則中是否包含所查詢的資源。

        只要符合下列任一條件,資源就會納入規則:

        • 資源會列在規則中。只有 Resource Manager 資源 (專案、資料夾和機構) 可以直接列入主體存取邊界規則。
        • 規則中會列出資源的其中一個祖系 (也就是資源階層中位於資源上方的專案、資料夾或機構)。

回應中的許多物件也都有 relevance 欄位。這個欄位中的值會指出該物件對整體存取狀態的貢獻程度。relevance 欄位可包含下列值:

  • HEURISTIC_RELEVANCE_HIGH:表示物件對結果有重大影響。換句話說,移除物件可能會變更整體存取狀態。舉例來說,授予主體指定權限的角色繫結會具有這個關聯值。

  • HEURISTIC_RELEVANCE_NORMAL:表示物件對結果的影響有限。換句話說,移除物件不太可能會變更整體存取狀態。舉例來說,如果拒絕規則不含權限或實體,就會具有這個關聯值。

REST

回應包含四個主要部分:整體存取狀態、要求中的存取元組說明、允許政策評估結果,以及拒絕政策評估結果。

  • overallAccessState:主體是否可根據相關的允許政策、拒絕政策和主體存取邊界政策,使用指定權限存取指定資源。

    相關主體存取邊界政策包括所有繫結至包含主體的主體組合的主體存取邊界政策。

    相關的允許和拒絕政策包括:

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

    父項專案、資料夾和機構的允許和拒絕政策會因政策繼承而相關。當您將允許或拒絕政策附加至專案、資料夾或機構時,該政策也會套用至該專案、資料夾或機構內的所有資源。

    舉例來說,如果機構的拒絕政策指出主體無法使用特定權限,則該主體就無法在機構內的任何資源上使用該權限。即使該機構中的資料夾和專案採用較寬鬆的拒絕政策,或允許政策為主體提供權限,這項規則仍會套用。

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

    如要讓使用者能夠使用權限存取資源,所有政策類型都必須允許存取。詳情請參閱「政策評估」。

  • accessTuple:說明要求中的存取元組,包括您提供的任何條件背景資訊。這個部分還包含適用於資源的標記摘要。
  • allowPolicyExplanation:摘要說明相關的允許政策是否授予主體權限,接著列出允許政策和其角色繫結。

    針對每個允許政策,回應會列出政策中的所有角色繫結,並根據下列條件進行評估:

    • 角色繫結是否包含權限。
    • 角色繫結是否包含主體。
    • 是否符合角色繫結中的條件 (如有)。

    接著,回應會列印允許政策的完整 JSON 文字。

  • denyPolicyExplanation:摘要說明相關拒絕政策是否拒絕主體的權限,後面會列出含有拒絕政策的資源。對於每項資源,回應會列出資源附加的所有拒絕政策。

    對於每項拒絕政策,回應會列印政策的中繼資料,並列出政策中的拒絕規則,然後根據下列條件評估每項規則:

    • 拒絕規則是否包含權限。
    • 權限是否在拒絕規則中列為例外狀況。
    • 拒絕規則是否包含主體。
    • 主體是否在拒絕規則中列為例外狀況。
    • 是否符合拒絕規則中的條件 (如果有的話)。
  • pabPolicyExplanation:摘要說明相關主體存取邊界政策是否允許主體存取資源,接著是相關主體存取邊界政策繫結和主體存取邊界政策。

    主體存取邊界政策可以允許存取、不允許存取,或不強制執行。在下列情況下,系統不會強制執行主體存取邊界政策:

    • IAM 不會在主體存取邊界政策的執行版本中強制執行指定的權限。因此,主體存取邊界政策無法封鎖存取權。
    • 由於政策繫結中的條件,主體存取邊界政策或繫結不適用於主體。
    • 主體存取邊界政策沒有任何規則。

    如果未強制執行主體存取邊界政策,則無法影響主體是否能存取資源。

    回應也會列出包含主體的所有政策繫結,以及每個政策繫結中主體存取權範圍政策的詳細資料:

    • 針對每個主體存取邊界政策繫結,回應會列印是否對主體強制執行政策繫結,然後列印政策繫結的文字。如果繫結中設定的主體包含查詢的主體,且政策繫結中的條件針對查詢的主體評估為 true,就會強制執行政策繫結。如果未強制執行政策繫結,政策就無法影響主體是否能存取資源。
    • 針對每個主體存取邊界政策,回應會列印以下內容:

      • 政策是否允許存取、不允許存取或未強制執行。
      • 政策的強制執行版本。這個版本號碼會決定 IAM 是否會針對查詢的權限,強制執行這項主體存取邊界政策。如果未強制執行權限,政策就無法影響主體是否能存取資源。
      • 主體存取邊界政策中的規則,以及每項規則是否允許存取。對於每項規則,回應會指出規則中是否包含所查詢的資源。

        只要符合下列任一條件,資源就會納入規則:

        • 資源會列在規則中。只有 Resource Manager 資源 (專案、資料夾和機構) 可以直接列入主體存取邊界規則。
        • 規則中會列出資源的其中一個祖系 (也就是資源階層中位於資源上方的專案、資料夾或機構)。

回應中的許多物件也都有 relevance 欄位。這個欄位中的值會指出該物件對整體存取狀態的貢獻程度。relevance 欄位可包含下列值:

  • HEURISTIC_RELEVANCE_HIGH:表示物件對結果有重大影響。換句話說,移除物件可能會變更整體存取狀態。舉例來說,授予主體指定權限的角色繫結會具有這個關聯值。

  • HEURISTIC_RELEVANCE_NORMAL:表示物件對結果的影響有限。換句話說,移除物件不太可能會變更整體存取狀態。舉例來說,如果拒絕規則不含權限或實體,就會具有這個關聯性值。

排解條件式角色繫結問題

政策疑難排解工具會根據標記,自動排解有條件角色繫結和拒絕規則的問題。系統也會自動針對主體存取邊界政策繫結,根據主體設定條件進行疑難排解。

如要排解其他類型的條件角色繫結或條件拒絕規則,政策疑難排解工具需要有關要求的其他背景資訊。舉例來說,如要排解以日期/時間屬性為依據的條件,政策疑難排解工具需要要求的時間。

在 gcloud CLI 和 REST API 中,您必須手動提供這項額外背景資訊。

在 Google Cloud 控制台中,您可以直接透過任何管理員活動稽核記錄資料存取稽核記錄進行疑難排解,提供這項額外背景資訊。每個稽核記錄項目都對應至對Google Cloud API 的請求,或是 Google Cloud 代您執行的動作。從稽核記錄進行疑難排解時,政策疑難排解工具會自動取得有關要求的其他資訊 (例如日期和時間),以便分析條件角色繫結和拒絕規則。

控制台

如要排解條件角色繫結和拒絕規則的問題,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往「Logs Explorer」頁面

  2. 如果頁面標題為「Legacy Logs Viewer」,請按一下「Upgrade」下拉式清單,然後選取「Upgrade to the new Logs Explorer」

  3. 如要只查看「管理員活動」和「資料存取」稽核記錄,請在查詢建構工具中輸入以下查詢,然後按一下「執行查詢」

    logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

    替換下列值:

    • RESOURCE_TYPE:您要列出稽核記錄的資源類型。使用 projectsfoldersorganizations
    • RESOURCE_ID:資源 ID。
  4. 找出與您要排解問題的請求相對應的稽核記錄項目。如要瞭解如何使用記錄檔探索工具尋找特定記錄項目,請參閱「使用記錄檔探索工具」。

  5. 在記錄項目的「摘要」欄中,按一下「IAM」,然後點選「疑難排解存取權問題」

    政策疑難排解工具會使用記錄項目中的資訊排解存取權問題,然後顯示結果。其他背景資訊會列在「條件內容」下方的評估詳細資料中。如要查看情境詳細資料,請按一下「查看條件情境」。如要進一步瞭解政策疑難排解工具結果頁面,請參閱本頁的「瞭解疑難排解工具結果」一節。

  6. 選用:如要針對涉及條件角色繫結和拒絕規則的其他要求進行疑難排解,請返回「記錄探索器」頁面,然後重複上述步驟。

gcloud

如要排解條件角色繫結和拒絕規則的問題,請使用 gcloud policy-troubleshoot iam 指令。

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

  • EMAIL:您要解決權限問題的主體電子郵件地址。
  • RESOURCE:要授予權限的資源。
  • PERMISSION:您要進行疑難排解的權限。
  • DESTINATION_IP:選用。檢查條件角色繫結時要使用的要求目的地 IP 位址。例如 198.1.1.1
  • DESTINATION_PORT:選用。檢查條件角色繫結時要使用的要求目的地埠。例如 `8080`。
  • REQUEST_TIME:選用。檢查條件式角色繫結時要使用的要求時間戳記。使用 RFC 3339 格式的時間戳記,例如 2099-02-01T00:00:00Z
  • RESOURCE_NAME:選用。檢查條件角色繫結時要使用的資源名稱值。如要瞭解系統接受的資源名稱格式,請參閱「資源名稱格式」。
  • RESOURCE_SERVICE:選用。檢查條件角色繫結時要使用的資源服務值。如需接受的服務名稱清單,請參閱「資源服務值」。
  • RESOURCE_TYPE:選用。如需接受的資源類型清單,請參閱「資源類型值」。

執行 gcloud policy-troubleshoot iam 指令:

Linux、macOS 或 Cloud Shell

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION --destination-ip=DESTINATION_IP \
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME \
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE \
    --resource-type=RESOURCE_TYPE

Windows (PowerShell)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION --destination-ip=DESTINATION_IP `
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME `
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE `
    --resource-type=RESOURCE_TYPE

Windows (cmd.exe)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION --destination-ip=DESTINATION_IP ^
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME ^
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE ^
    --resource-type=RESOURCE_TYPE

回應會說明實體的存取權。對於每個設有條件的角色繫結和拒絕規則,回應都會包含 conditionExplanation 欄位,說明系統是否根據您提供的條件內容,將條件評估為 True 或 False。

舉例來說,以下是針對角色繫結進行評估的情況,其中條件會指定資源類型和資源服務:

回應

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "evaluationStates": [{
      "end": 51,
      "start": 1,
      "value": true
    }, {
      "end": 99,
      "start": 55,
      "value": true
    }],
    "value": true,
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
}
...

REST

如要排解條件角色繫結和拒絕規則的問題,請使用政策疑難排解工具 API 的 iam.troubleshoot 方法。

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

  • EMAIL:您要解決權限問題的主體電子郵件地址。
  • RESOURCE:要授予權限的資源。
  • PERMISSION:您要進行疑難排解的權限。
  • DESTINATION_IP:選用。檢查條件角色繫結時要使用的要求目的地 IP 位址。例如 198.1.1.1
  • DESTINATION_PORT:選用。檢查條件角色繫結時要使用的要求目的地埠。例如 `8080`。
  • REQUEST_TIME:選用。檢查條件式角色繫結時要使用的要求時間戳記。使用 RFC 3339 格式的時間戳記,例如 2099-02-01T00:00:00Z
  • RESOURCE_NAME:選用。檢查條件角色繫結時要使用的資源名稱值。如要瞭解系統接受的資源名稱格式,請參閱「資源名稱格式」。
  • RESOURCE_SERVICE:選用。檢查條件角色繫結時要使用的資源服務值。如需接受的服務名稱清單,請參閱「資源服務值」。
  • RESOURCE_TYPE:選用。如需接受的資源類型清單,請參閱「資源類型值」。

HTTP 方法和網址:

POST https://policytroubleshooter.googleapis.com/v3/iam:troubleshoot

JSON 要求主體:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION",
    "conditionContext": {
      "destination": {
        "ip": DESTINATION_IP,
        "port": DESTINATION_PORT
      },
      "request": {
        "receiveTime": REQUEST_TIME
      },
      "resource": {
        "name": RESOURCE_NAME,
        "service": RESOURCE_SERVICE,
        "type": RESOURCE_TYPE
      }
    }
  }
}

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

回應會說明實體的存取權。對於每個設有條件的角色繫結和拒絕規則,回應都會包含 conditionExplanation 欄位,說明系統是否根據您提供的條件內容,將條件評估為 True 或 False。

舉例來說,以下是針對角色繫結進行評估的情況,其中條件會指定資源類型和資源服務:

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "value": true,
    "evaluationStates": [{
      "start": 1,
      "end": 51,
      "value": true
    }, {
      "start": 55,
      "end": 99,
      "value": true
    }]
  }
}
...

後續步驟