Memecahkan masalah izin IAM

Pemecah Masalah Kebijakan membantu Anda memahami apakah akun utama dapat mengakses resource. Dengan mempertimbangkan akun utama, resource, dan izin, Pemecah Masalah Kebijakan akan memeriksa kebijakan izinkan, kebijakan tolak, dan kebijakan batas akses akun utama (PAB) yang memengaruhi akses akun utama. Kemudian, class ini akan memberi tahu Anda apakah, berdasarkan kebijakan tersebut, akun utama dapat menggunakan izin yang ditentukan untuk mengakses resource. Bagian ini juga mencantumkan kebijakan yang relevan dan menjelaskan pengaruhnya terhadap akses akun utama.

Anda dapat mengakses Pemecah Masalah Kebijakan menggunakan Konsol Google Cloud, Google Cloud CLI, atau REST API. Untuk kueri dasar, menggunakan konsol Google Cloud biasanya paling cepat. Untuk skenario yang lebih kompleks, pertimbangkan gcloud CLI atau REST API.

Sebelum memulai

  • Enable the Policy Troubleshooter API.

    Enable the API

Izin yang diperlukan

Untuk memecahkan masalah akses akun utama sepenuhnya, Anda memerlukan izin berikut.

Izin untuk memecahkan masalah akses untuk setiap akun utama

Pemecah Masalah Kebijakan menganalisis akses akun utama ke resource berdasarkan kebijakan izinkan, kebijakan tolak, kebijakan batas akses akun utama, dan peran yang izin lihatnya Anda miliki. Jika tidak memiliki izin untuk melihat kebijakan yang berlaku untuk resource, atau jika tidak memiliki izin untuk melihat peran kustom, Anda mungkin tidak dapat mengetahui apakah akun utama memiliki akses.

Izin untuk memecahkan masalah kebijakan izinkan dan tolak

Untuk memecahkan masalah kebijakan izin dan tolak, Anda memerlukan izin di organisasi yang berisi resource yang ingin dipecahkan masalahnya. Izin ini memungkinkan Anda melihat kebijakan izin dan tolak yang mengontrol akses ke resource.

Untuk mendapatkan izin yang Anda perlukan guna memecahkan masalah akses akun utama, minta administrator untuk memberi Anda peran IAM berikut di organisasi yang berisi resource yang aksesnya ingin Anda pecahkan masalahnya:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Jika Anda tidak memiliki izin untuk melihat kebijakan izinkan dan tolak untuk resource, hasil akses untuk kebijakan izinkan dan tolak tersebut adalah Unknown.

Izin untuk memecahkan masalah kebijakan batas akses akun utama

Untuk memecahkan masalah kebijakan batas akses akun utama, Anda memerlukan izin di organisasi yang kumpulan akun utamanya menyertakan akun utama. Cara Anda mengidentifikasi organisasi ini bergantung pada jenis akun utama:

  • Akun Google dan Google Grup: Organisasi yang terkait dengan domain Google Workspace yang menyertakan akun utama
  • Identitas gabungan (identitas dalam workforce identity pool atau workload identity pool): Organisasi yang berisi identity pool yang menyertakan akun utama
  • Akun layanan: Organisasi yang berisi project tempat akun layanan dibuat

Dengan izin ini, Anda dapat melihat kebijakan batas akses akun utama yang mengontrol hal-hal yang dapat diakses akun utama.

Untuk mendapatkan izin yang diperlukan guna memecahkan masalah akses akun utama, minta administrator untuk memberi Anda peran IAM berikut di organisasi yang sesuai:

  • Principal Access Boundary Policy Viewer (roles/iam.principalAccessBoundaryViewer)
  • Memecahkan masalah kebijakan batas akses akun utama yang terikat dengan kumpulan akun utama project, folder, atau organisasi: Administrator Organisasi (roles/resourcemanager.organizationAdmin)
  • Memecahkan masalah kebijakan batas akses akun utama yang terikat ke domain Google Workspace: Admin IAM Workspace Pool (roles/iam.workspacePoolAdmin)
  • Memecahkan masalah kebijakan batas akses akun utama yang terikat dengan workforce identity pool: IAM Workforce Pool Admin (roles/iam.workforcePoolAdmin)
  • Memecahkan masalah kebijakan batas akses akun utama yang terikat dengan workload identity pool: IAM Workload Identity Pool Admin (roles/iam.workloadIdentityPoolAdmin)

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Jika Anda tidak memiliki izin untuk melihat kebijakan batas akses akun utama yang berlaku untuk akun utama, hasil akses untuk kebijakan batas akses akun utama adalah Unknown.

Izin untuk memecahkan masalah akses bagi anggota grup

Jika kebijakan izin dan tolak Anda menyertakan grup, Anda memerlukan izin Google Workspace Admin API groups.read untuk memecahkan masalah akses bagi setiap anggota grup. Admin Super dan Admin Grup otomatis memiliki izin ini. Untuk memberikan izin ini kepada pengguna yang bukan admin Super atau Grup, buat peran administrator Google Workspace kustom yang berisi hak istimewa groups.read (terletak di bagian Hak Istimewa Admin API) dan berikan kepada pengguna.

Jika Anda tidak memiliki izin ini, binding peran dan aturan tolak yang berisi grup atau domain akan menjadi hasil akses dari Tidak diketahui, kecuali jika binding peran atau aturan tolak juga menyertakan akun utama secara eksplisit.

Izin untuk memecahkan masalah akses bagi anggota domain

Jika kebijakan izinkan dan tolak Anda menyertakan akun Google Workspace atau domain Cloud Identity, Anda harus menjadi administrator domain untuk memecahkan masalah akses bagi setiap anggota domain.

Jika Anda tidak memiliki izin ini, binding peran dan aturan tolak yang berisi grup atau domain akan menjadi hasil akses dari Tidak diketahui, kecuali jika binding peran atau aturan tolak juga menyertakan akun utama secara eksplisit.

Memecahkan masalah akses

Untuk memecahkan masalah akses, Anda memerlukan informasi berikut:

  • Prinsipal: Alamat email yang akan diperiksa. Alamat email harus merujuk ke pengguna atau akun layanan. Jenis akun utama lainnya, termasuk grup, domain, identitas tenaga kerja, dan identitas beban kerja, tidak didukung.
  • Resource: Nama lengkap resource yang aksesnya ingin Anda pecahkan masalahnya. Misalnya, untuk memecahkan masalah akses ke project my-project, masukkan //cloudresourcemanager.googleapis.com/projects/my-project. Untuk jenis resource lainnya, lihat contoh nama resource lengkap.

  • Izin: Izin yang akan diperiksa. Jika Anda menggunakan Konsol Google Cloud, konsol akan menampilkan daftar saran saat Anda mengetik.

    Untuk memecahkan masalah izin, izin harus berlaku untuk resource dalam permintaan. Dengan kata lain, izin tersebut harus dapat digunakan untuk mengakses resource dengan cara tertentu. Jika izin tidak berlaku untuk resource, permintaan akan gagal. Misalnya, jika Anda mencoba memecahkan masalah izin compute.instances.get untuk cluster Google Kubernetes Engine, permintaan akan gagal karena izin compute.instance.get tidak dapat digunakan untuk mengakses cluster Google Kubernetes Engine.

    Untuk mengetahui daftar lengkap izin, lihat referensi izin.

Konsol

Untuk memecahkan masalah akses, lakukan hal berikut:

  1. Di konsol Google Cloud, buka halaman Policy Troubleshooter.

    Buka Pemecah Masalah Kebijakan

  2. Masukkan email akun utama yang aksesnya ingin Anda periksa.

  3. Masukkan nama resource lengkap dari resource yang akan diperiksa.

    Jika Anda tidak mengetahui nama resource lengkap, lakukan salah satu tindakan berikut:

    • Jika Anda memecahkan masalah akses untuk project, folder, atau organisasi, mulailah mengetik untuk melihat opsi pelengkapan otomatis.
    • Jika Anda memecahkan masalah akses untuk jenis resource lain, klik Jelajahi untuk membuka dialog penelusuran resource, lalu telusuri resource:

      1. Di kotak Select scope, pilih project, folder, atau organisasi yang akan ditelusuri.
      2. Di kotak Resource type, pilih jenis resource yang ingin Anda telusuri.
      3. Di kotak Telusuri referensi, masukkan sebagian nama referensi.
      4. Di bagian hasil, pilih resource yang ingin Anda periksa.
      5. Klik Pilih untuk memilih resource dan menutup dialog.
  4. Masukkan izin yang akan diperiksa.

    Jika Anda tidak mengetahui nama izin lengkap, mulai ketik untuk melihat opsi pelengkapan otomatis.

  5. Opsional: Untuk memeriksa beberapa resource dan izin, pilih Add Another Pair, lalu ulangi langkah sebelumnya.

  6. Klik Periksa akses.

gcloud

Untuk mengetahui alasan akun utama memiliki, atau tidak memiliki, izin IAM, gunakan perintah gcloud beta policy-troubleshoot iam.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • VERSION: Opsional. Versi perintah yang akan digunakan. Untuk memecahkan masalah akses berdasarkan kebijakan izinkan dan tolak saja, jangan tentukan versi. Untuk memecahkan masalah akses berdasarkan kebijakan batas akses izin, tolak, dan akun utama, gunakan versi beta.
  • EMAIL: Alamat email akun utama yang izinnya ingin Anda pecahkan masalahnya.
  • RESOURCE: Resource tempat izin diberikan.
  • PERMISSION: Izin yang ingin Anda pecahkan masalahnya.

Jalankan perintah gcloud beta policy-troubleshoot iam:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

Respons

{
  "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

Untuk mengetahui alasan akun utama memiliki, atau tidak memiliki, izin IAM, gunakan metode iam.troubleshoot Pemecah Masalah Kebijakan API.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • VERSION: Versi API yang akan digunakan untuk permintaan ini. Untuk memecahkan masalah akses berdasarkan kebijakan izin dan tolak saja, gunakan v3. Untuk memecahkan masalah akses berdasarkan kebijakan batas akses izin, tolak, dan akun utama, gunakan v3beta.
  • EMAIL: Alamat email akun utama yang izinnya ingin Anda pecahkan masalahnya.
  • RESOURCE: Resource tempat izin diberikan.
  • PERMISSION: Izin yang ingin Anda pecahkan masalahnya.
  • PROJECT_ID: ID project yang ingin Anda gunakan untuk membuat permintaan. Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

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

Meminta isi JSON:

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

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Memahami hasil Pemecah Masalah

Konsol

Halaman hasil berisi informasi berikut:

Detail evaluasi

Bagian Detail evaluasi berisi ringkasan akses yang sedang Anda pecahkan masalahnya, termasuk akun utama, resource, dan izin yang ditentukan. Jika memecahkan masalah beberapa pasangan izin resource, Anda dapat menggunakan daftar Evaluasi Akses untuk beralih di antara keduanya.

Detail kebijakan

Bagian Detail kebijakan berisi detail tentang pengaruh kebijakan batas akses akun utama, izin, dan tolak yang relevan terhadap akses akun utama.

Kebijakan batas akses akun utama yang relevan mencakup semua kebijakan batas akses akun utama yang terikat dengan kumpulan akun utama yang menyertakan akun utama.

Kebijakan izin dan tolak yang relevan mencakup hal berikut:

  • Kebijakan izinkan resource
  • Kebijakan penolakan resource, jika ada
  • Kebijakan izinkan project induk, folder, dan organisasi resource, jika ada
  • Kebijakan penolakan project, folder, dan organisasi induk resource, jika ada

Kebijakan izinkan dan tolak project induk, folder, dan organisasi relevan karena adanya pewarisan kebijakan. Jika Anda melampirkan kebijakan izinkan atau tolak ke project, folder, atau organisasi, kebijakan tersebut juga berlaku untuk semua resource di dalam project, folder, atau organisasi tersebut.

Misalnya, jika kebijakan penolakan untuk organisasi mengatakan bahwa akun utama tidak dapat menggunakan izin tertentu, akun utama tidak dapat menggunakan izin tersebut untuk resource apa pun dalam organisasi. Aturan ini berlaku meskipun folder dan project di dalam organisasi tersebut memiliki kebijakan penolakan yang lebih permisif, atau mengizinkan kebijakan yang memberikan izin kepada entity utama.

Demikian pula, jika kebijakan izinkan untuk suatu project memberikan izin khusus kepada akun utama, maka akun utama memiliki izin tersebut untuk setiap resource dalam project, asalkan tidak ditolak.

Bagian Detail kebijakan berisi bagian berikut:

Status akses

Bagian Status akses merangkum hasil untuk setiap jenis kebijakan (kebijakan batas akses akun utama, kebijakan penolakan, dan kebijakan izin), serta menyatakan hasil keseluruhan. Hasilnya menunjukkan apakah akun utama dapat menggunakan izin untuk mengakses resource, sesuai dengan kebijakan yang relevan.

Agar pengguna dapat menggunakan izin untuk mengakses resource, semua jenis kebijakan harus mengizinkan akses. Untuk mengetahui informasi selengkapnya, lihat Evaluasi kebijakan.

Kebijakan batas akses akun utama

Di bagian Kebijakan batas akses akun utama, Anda dapat melihat semua kebijakan batas akses akun utama yang berlaku untuk akun utama, dan binding kebijakan yang mengikat kebijakan ini ke akun utama.

Panel Policies mencantumkan semua kebijakan yang terikat dengan kumpulan akun utama yang menyertakan akun utama. Di samping setiap kebijakan terdapat ikon yang menunjukkan pengaruh kebijakan tersebut terhadap akses akun utama.

Kebijakan batas akses akun utama dapat memengaruhi akses akun utama dengan cara berikut:

  • Akun utama memenuhi syarat untuk mengakses resource: Kebijakan batas akses akun utama berlaku untuk akun utama, dan salah satu aturannya berisi resource yang dikueri.
  • Akun utama tidak memenuhi syarat untuk mengakses resource: Kebijakan batas akses akun utama berlaku untuk akun utama, tetapi resource yang dikueri tidak ada dalam aturan kebijakan tersebut.
  • Tidak diterapkan: Kebijakan batas akses akun utama tidak diterapkan dalam situasi berikut:

    Jika tidak diterapkan, kebijakan batas akses akun utama tidak dapat memengaruhi apakah akun utama dapat mengakses resource atau tidak.

Untuk melihat aturan dan binding yang terkait dengan kebijakan batas akses akun utama, klik nama kebijakan. Panel di samping panel Kebijakan menampilkan detail kebijakan.

Untuk melihat aturan dalam kebijakan, klik tab Boundary rules. Tab ini menampilkan tabel aturan kebijakan batas akses akun utama yang relevan.

Aturan batas akses akun utama relevan jika aturan tersebut memengaruhi keseluruhan hasil kueri Pemecah Masalah Kebijakan. Oleh karena itu, aturan yang relevan bervariasi bergantung pada hasil Pemecah Masalah Kebijakan. Misalnya, pertimbangkan situasi berikut:

  • Pemecah Masalah Kebijakan menunjukkan bahwa akun utama dapat mengakses resource. Akibatnya, aturan yang relevan adalah aturan yang membuat akun utama memenuhi syarat untuk mengakses resource.
  • Pemecah Masalah Kebijakan menunjukkan bahwa akun utama tidak dapat mengakses resource. Namun, menurut kebijakan batas akses akun utama yang relevan, akun utama tersebut memenuhi syarat untuk mengakses resource. Akibatnya, tidak ada aturan yang relevan, karena kebijakan batas akses akun utama bukan alasan akun utama tidak dapat mengakses resource.
  • Pemecah Masalah Kebijakan menunjukkan bahwa akun utama tidak dapat mengakses resource. Selain itu, berdasarkan kebijakan batas akses akun utama yang relevan, akun utama tidak memenuhi syarat untuk mengakses resource. Akibatnya, aturan yang relevan adalah aturan yang tidak membuat akun utama memenuhi syarat untuk mengakses resource.

Untuk melihat semua aturan batas akses akun utama dalam kebijakan, hapus centang pada kotak Show only relevant rules and bindings.

Kolom Temuan dalam tabel aturan batas menunjukkan apakah aturan batas akses akun utama berisi resource yang dikueri. Untuk melihat detail selengkapnya tentang aturan, klik Lihat detail aturan.

Untuk melihat binding kebijakan untuk kebijakan, klik tab Bindings. Tab ini menampilkan tabel binding kebijakan yang relevan untuk kebijakan batas akses prinsipal yang dipilih.

Binding kebijakan relevan jika menerapkan kebijakan batas akses akun utama secara efektif ke akun utama yang dikueri. Agar binding kebijakan dapat menerapkan kebijakan batas akses akun utama ke akun utama, hal berikut harus benar:

  • Akun utama yang ditetapkan dalam binding kebijakan harus menyertakan akun utama yang dikueri
  • Setiap kondisi dalam binding kebijakan harus dievaluasi ke true untuk akun utama yang dikueri.

Untuk melihat semua binding kebijakan dengan kumpulan akun utama yang menyertakan akun utama yang dikueri, terlepas dari apakah akun utama yang dikueri memenuhi kondisi dalam binding, hapus centang pada kotak Hanya tampilkan aturan dan binding yang relevan.

Kolom Temuan dalam tabel binding menunjukkan apakah binding diterapkan untuk akun utama yang dikueri. Untuk melihat detail selengkapnya tentang binding kebijakan, klik Lihat detail binding.

Kebijakan tolak

Di bagian Kebijakan tolak, Anda dapat melihat semua kebijakan tolak yang relevan, mengidentifikasi aturan tolak yang menolak akses ke akun utama, dan memahami alasan aturan tolak menolak atau tidak menolak izin akun utama.

Panel Resource with deny policies mencantumkan semua kebijakan tolak yang relevan, yang diatur berdasarkan resource yang dilampirkan. Di samping setiap kebijakan tolak terdapat evaluasi akses. Evaluasi ini hanya berlaku untuk kebijakan penolakan tersebut dan tidak mencerminkan akses apa pun dari kebijakan yang diwarisi. Jika Anda tidak memiliki izin untuk melihat kebijakan penolakan resource, daftar resource tidak menyertakan resource tersebut atau kebijakan penolakannya.

Untuk melihat aturan penolakan yang relevan dalam kebijakan penolakan ini, klik kebijakan penolakan. Untuk melihat semua aturan tolak dalam kebijakan tolak resource, klik resource. Aturan tolak akan muncul di panel Aturan tolak. Panel ini berisi tabel semua aturan penolakan dengan akun utama atau izin yang dikueri untuk resource atau kebijakan penolakan yang Anda pilih.

Kolom Akses menunjukkan apakah aturan tolak menolak izin utama. Untuk melihat detail selengkapnya tentang aturan tolak, klik Lihat aturan tolak di baris aturan tersebut.

Kebijakan izin

Di bagian Kebijakan izinkan, Anda dapat melihat semua kebijakan izin yang relevan, mengidentifikasi binding peran yang memberikan akses ke akun utama, dan memahami alasan binding peran memberikan atau tidak memberikan izin kepada akun utama.

Panel Resources mencantumkan resource yang ditentukan dan ancestor-nya. Di samping setiap resource terdapat evaluasi akses. Evaluasi ini hanya berlaku untuk kebijakan izinkan resource tersebut—tidak mencerminkan akses apa pun dari kebijakan yang diwarisi. Jika Anda tidak memiliki izin untuk melihat kebijakan izin resource, daftar resource tidak akan menyertakan resource tersebut.

Untuk melihat binding peran yang relevan dalam kebijakan izin resource dan melihat cara binding peran tersebut memberikan atau tidak memberikan izin kepada akun utama, klik resource. Binding peran kebijakan izin akan muncul di panel Role bindings.

Panel Binding peran berisi tabel binding peran dalam kebijakan izin resource yang dipilih. Secara default, tabel hanya berisi binding peran yang menyertakan peran dengan izin yang ditentukan. Jika akun utama tidak memiliki akses, tabel juga akan menampilkan binding peran dengan peran kustom yang dapat diedit. Untuk melihat semua penetapan peran, hapus centang pada kotak Hanya tampilkan penetapan yang relevan.

Kolom Akses menunjukkan apakah binding peran memberikan izin kepada akun utama. Untuk melihat detail selengkapnya tentang penetapan peran, klik Lihat detail penetapan di baris penetapan peran tersebut.

gcloud

Respons berisi empat bagian utama: deskripsi tuple akses dalam permintaan, hasil evaluasi kebijakan izin, hasil evaluasi kebijakan tolak, dan status akses secara keseluruhan.

  • accessTuple: Deskripsi tuple akses dalam permintaan, termasuk konteks kondisi apa pun yang Anda berikan. Bagian ini juga berisi ringkasan tag yang berlaku untuk resource.
  • allowPolicyExplanation: Ringkasan apakah kebijakan izin yang relevan memberikan izin kepada akun utama, diikuti dengan daftar kebijakan izin dan binding peran mereka.

    Untuk setiap kebijakan izin, respons akan mencantumkan semua binding peran dalam kebijakan dan mengevaluasinya berdasarkan kriteria berikut:

    • Apakah binding peran menyertakan izin.
    • Apakah binding peran menyertakan akun utama.
    • Apakah kondisi dalam binding peran, jika ada, terpenuhi.

    Kemudian, respons akan mencetak teks JSON lengkap dari kebijakan izin.

  • denyPolicyExplanation: Ringkasan apakah kebijakan tolak yang relevan menolak izin akun utama, diikuti dengan daftar resource dengan kebijakan tolak. Untuk setiap resource, respons mencantumkan semua kebijakan tolak yang dilampirkan ke resource.

    Untuk setiap kebijakan tolak, respons akan mencetak metadata kebijakan, mencantumkan aturan tolak dalam kebijakan, lalu mengevaluasi setiap aturan berdasarkan kriteria berikut:

    • Apakah aturan tolak menyertakan izin.
    • Apakah izin tercantum sebagai pengecualian dalam aturan tolak.
    • Apakah aturan tolak menyertakan akun utama.
    • Apakah akun utama tercantum sebagai pengecualian dalam aturan tolak.
    • Apakah kondisi dalam aturan tolak, jika ada, terpenuhi.
  • overallAccessState: Apakah akun utama dapat menggunakan izin yang ditentukan untuk mengakses resource yang ditentukan berdasarkan kebijakan izin, kebijakan tolak, dan kebijakan batas akses akun utama yang relevan.

    Kebijakan batas akses akun utama yang relevan mencakup semua kebijakan batas akses akun utama yang terikat dengan kumpulan akun utama yang menyertakan akun utama.

    Kebijakan izin dan tolak yang relevan mencakup hal berikut:

    • Kebijakan izinkan resource
    • Kebijakan penolakan resource, jika ada
    • Kebijakan izinkan project induk, folder, dan organisasi resource, jika ada
    • Kebijakan penolakan project, folder, dan organisasi induk resource, jika ada

    Kebijakan izinkan dan tolak project induk, folder, dan organisasi relevan karena adanya pewarisan kebijakan. Jika Anda melampirkan kebijakan izinkan atau tolak ke project, folder, atau organisasi, kebijakan tersebut juga berlaku untuk semua resource di dalam project, folder, atau organisasi tersebut.

    Misalnya, jika kebijakan penolakan untuk organisasi mengatakan bahwa akun utama tidak dapat menggunakan izin tertentu, akun utama tidak dapat menggunakan izin tersebut untuk resource apa pun dalam organisasi. Aturan ini berlaku meskipun folder dan project di dalam organisasi tersebut memiliki kebijakan penolakan yang lebih permisif, atau mengizinkan kebijakan yang memberikan izin kepada entity utama.

    Demikian pula, jika kebijakan izinkan untuk suatu project memberikan izin khusus kepada akun utama, maka akun utama memiliki izin tersebut untuk setiap resource dalam project, asalkan tidak ditolak.

    Agar pengguna dapat menggunakan izin untuk mengakses resource, semua jenis kebijakan harus mengizinkan akses. Untuk mengetahui informasi selengkapnya, lihat Evaluasi kebijakan.

  • pabPolicyExplanation: Ringkasan apakah kebijakan batas akses akun utama yang relevan mengizinkan akun utama untuk mengakses resource, diikuti dengan binding kebijakan batas akses akun utama dan kebijakan batas akses akun utama yang relevan.

    Kebijakan batas akses akun utama dapat mengizinkan akses, tidak mengizinkan akses, atau tidak diterapkan. Kebijakan batas akses akun utama tidak diterapkan dalam situasi berikut:

    Jika tidak diterapkan, kebijakan batas akses akun utama tidak dapat memengaruhi apakah akun utama dapat mengakses resource atau tidak.

    Respons juga mencantumkan semua binding kebijakan yang menyertakan akun utama, dan detail kebijakan batas akses akun utama di setiap binding kebijakan tersebut:

    • Untuk setiap binding kebijakan batas akses akun utama, respons akan mencetak apakah binding kebijakan diterapkan untuk akun utama, lalu mencetak teks binding kebijakan. Binding kebijakan diterapkan jika akun utama yang ditetapkan dalam binding menyertakan akun utama yang dikueri, dan jika kondisi dalam binding kebijakan dievaluasi menjadi true untuk akun utama yang dikueri. Jika binding kebijakan tidak diterapkan, kebijakan tidak dapat memengaruhi apakah akun utama dapat mengakses resource.
    • Untuk setiap kebijakan batas akses akun utama, respons akan mencetak hal berikut:

      • Apakah kebijakan mengizinkan akses, tidak mengizinkan akses, atau tidak diterapkan.
      • Versi penegakan kebijakan. Nomor versi ini menentukan apakah IAM menerapkan kebijakan batas akses akun utama ini untuk izin yang dikueri. Jika izin tidak diterapkan, kebijakan tidak dapat memengaruhi apakah akun utama dapat mengakses resource atau tidak.
      • Aturan dalam kebijakan batas akses akun utama dan apakah setiap aturan mengizinkan akses. Untuk setiap aturan, respons menunjukkan apakah resource yang dikueri disertakan dalam aturan.

        Resource disertakan dalam aturan jika salah satu hal berikut terpenuhi:

        • Resource tercantum dalam aturan. Hanya resource Resource Manager (project, folder, dan organisasi) yang dapat langsung dicantumkan dalam aturan batas akses utama.
        • Salah satu ancestor resource (yaitu, project, folder, atau organisasi di atas resource dalam hierarki resource) tercantum dalam aturan.

Banyak objek dalam respons juga memiliki kolom relevance. Nilai di kolom ini menunjukkan seberapa besar kontribusi objek tersebut terhadap keseluruhan status akses. Kolom relevance dapat memiliki nilai berikut:

  • HEURISTIC_RELEVANCE_HIGH: Menunjukkan bahwa objek memiliki dampak yang kuat terhadap hasil. Dengan kata lain, menghapus objek kemungkinan akan mengubah status akses secara keseluruhan. Misalnya, binding peran yang memberikan izin yang ditentukan kepada akun utama akan memiliki nilai relevansi ini.

  • HEURISTIC_RELEVANCE_NORMAL: Menunjukkan bahwa objek memiliki dampak terbatas pada hasil. Dengan kata lain, menghapus objek tidak akan mengubah status akses secara keseluruhan. Misalnya, aturan tolak yang tidak berisi izin atau akun utama akan memiliki nilai relevansi ini.

REST

Responsnya berisi empat bagian utama: status akses secara keseluruhan, deskripsi tuple akses dalam permintaan, hasil evaluasi kebijakan izin, dan hasil evaluasi kebijakan tolak.

  • overallAccessState: Apakah akun utama dapat menggunakan izin yang ditentukan untuk mengakses resource yang ditentukan berdasarkan kebijakan izin, kebijakan tolak, dan kebijakan batas akses akun utama yang relevan.

    Kebijakan batas akses akun utama yang relevan mencakup semua kebijakan batas akses akun utama yang terikat dengan kumpulan akun utama yang menyertakan akun utama.

    Kebijakan izin dan tolak yang relevan mencakup hal berikut:

    • Kebijakan izinkan resource
    • Kebijakan penolakan resource, jika ada
    • Kebijakan izinkan project induk, folder, dan organisasi resource, jika ada
    • Kebijakan penolakan project, folder, dan organisasi induk resource, jika ada

    Kebijakan izinkan dan tolak project induk, folder, dan organisasi relevan karena adanya pewarisan kebijakan. Jika Anda melampirkan kebijakan izinkan atau tolak ke project, folder, atau organisasi, kebijakan tersebut juga berlaku untuk semua resource di dalam project, folder, atau organisasi tersebut.

    Misalnya, jika kebijakan penolakan untuk organisasi mengatakan bahwa akun utama tidak dapat menggunakan izin tertentu, akun utama tidak dapat menggunakan izin tersebut untuk resource apa pun dalam organisasi. Aturan ini berlaku meskipun folder dan project di dalam organisasi tersebut memiliki kebijakan penolakan yang lebih permisif, atau mengizinkan kebijakan yang memberikan izin kepada entity utama.

    Demikian pula, jika kebijakan izinkan untuk suatu project memberikan izin khusus kepada akun utama, maka akun utama memiliki izin tersebut untuk setiap resource dalam project, asalkan tidak ditolak.

    Agar pengguna dapat menggunakan izin untuk mengakses resource, semua jenis kebijakan harus mengizinkan akses. Untuk mengetahui informasi selengkapnya, lihat Evaluasi kebijakan.

  • accessTuple: Deskripsi tuple akses dalam permintaan, termasuk konteks kondisi apa pun yang Anda berikan. Bagian ini juga berisi ringkasan tag yang berlaku untuk resource.
  • allowPolicyExplanation: Ringkasan apakah kebijakan izin yang relevan memberikan izin kepada akun utama, diikuti dengan daftar kebijakan izin dan binding peran mereka.

    Untuk setiap kebijakan izin, respons akan mencantumkan semua binding peran dalam kebijakan dan mengevaluasinya berdasarkan kriteria berikut:

    • Apakah binding peran menyertakan izin.
    • Apakah binding peran menyertakan akun utama.
    • Apakah kondisi dalam binding peran, jika ada, terpenuhi.

    Kemudian, respons akan mencetak teks JSON lengkap dari kebijakan izin.

  • denyPolicyExplanation: Ringkasan apakah kebijakan tolak yang relevan menolak izin akun utama, diikuti dengan daftar resource dengan kebijakan tolak. Untuk setiap resource, respons mencantumkan semua kebijakan tolak yang dilampirkan ke resource.

    Untuk setiap kebijakan tolak, respons akan mencetak metadata kebijakan, mencantumkan aturan tolak dalam kebijakan, lalu mengevaluasi setiap aturan berdasarkan kriteria berikut:

    • Apakah aturan tolak menyertakan izin.
    • Apakah izin tercantum sebagai pengecualian dalam aturan tolak.
    • Apakah aturan tolak menyertakan akun utama.
    • Apakah akun utama tercantum sebagai pengecualian dalam aturan tolak.
    • Apakah kondisi dalam aturan tolak, jika ada, terpenuhi.
  • pabPolicyExplanation: Ringkasan apakah kebijakan batas akses akun utama yang relevan mengizinkan akun utama untuk mengakses resource, diikuti dengan binding kebijakan batas akses akun utama dan kebijakan batas akses akun utama yang relevan.

    Kebijakan batas akses akun utama dapat mengizinkan akses, tidak mengizinkan akses, atau tidak diterapkan. Kebijakan batas akses akun utama tidak diterapkan dalam situasi berikut:

    Jika tidak diterapkan, kebijakan batas akses akun utama tidak dapat memengaruhi apakah akun utama dapat mengakses resource atau tidak.

    Respons juga mencantumkan semua binding kebijakan yang menyertakan akun utama, dan detail kebijakan batas akses akun utama di setiap binding kebijakan tersebut:

    • Untuk setiap binding kebijakan batas akses akun utama, respons akan mencetak apakah binding kebijakan diterapkan untuk akun utama, lalu mencetak teks binding kebijakan. Binding kebijakan diterapkan jika akun utama yang ditetapkan dalam binding menyertakan akun utama yang dikueri, dan jika kondisi dalam binding kebijakan dievaluasi menjadi true untuk akun utama yang dikueri. Jika binding kebijakan tidak diterapkan, kebijakan tidak dapat memengaruhi apakah akun utama dapat mengakses resource.
    • Untuk setiap kebijakan batas akses akun utama, respons akan mencetak hal berikut:

      • Apakah kebijakan mengizinkan akses, tidak mengizinkan akses, atau tidak diterapkan.
      • Versi penegakan kebijakan. Nomor versi ini menentukan apakah IAM menerapkan kebijakan batas akses akun utama ini untuk izin yang dikueri. Jika izin tidak diterapkan, kebijakan tidak dapat memengaruhi apakah akun utama dapat mengakses resource atau tidak.
      • Aturan dalam kebijakan batas akses akun utama dan apakah setiap aturan mengizinkan akses. Untuk setiap aturan, respons menunjukkan apakah resource yang dikueri disertakan dalam aturan.

        Resource disertakan dalam aturan jika salah satu hal berikut terpenuhi:

        • Resource tercantum dalam aturan. Hanya resource Resource Manager (project, folder, dan organisasi) yang dapat langsung dicantumkan dalam aturan batas akses utama.
        • Salah satu ancestor resource (yaitu, project, folder, atau organisasi di atas resource dalam hierarki resource) tercantum dalam aturan.

Banyak objek dalam respons juga memiliki kolom relevance. Nilai di kolom ini menunjukkan seberapa besar kontribusi objek tersebut terhadap keseluruhan status akses. Kolom relevance dapat memiliki nilai berikut:

  • HEURISTIC_RELEVANCE_HIGH: Menunjukkan bahwa objek memiliki dampak yang kuat terhadap hasil. Dengan kata lain, menghapus objek kemungkinan akan mengubah status akses secara keseluruhan. Misalnya, binding peran yang memberikan izin yang ditentukan kepada akun utama akan memiliki nilai relevansi ini.

  • HEURISTIC_RELEVANCE_NORMAL: Menunjukkan bahwa objek memiliki dampak terbatas pada hasil. Dengan kata lain, menghapus objek tidak akan mengubah status akses secara keseluruhan. Misalnya, aturan tolak yang tidak berisi izin atau akun utama akan memiliki nilai relevansi ini.

Memecahkan masalah binding peran bersyarat

Pemecah Masalah Kebijakan secara otomatis memecahkan masalah pengikatan peran bersyarat dan aturan tolak berdasarkan tag. Alat ini juga otomatis memecahkan masalah binding kebijakan batas akses akun utama dengan kondisi berdasarkan akun utama.

Untuk memecahkan masalah jenis binding peran bersyarat atau aturan penolakan bersyarat lainnya, Pemecah Masalah Kebijakan memerlukan konteks tambahan tentang permintaan. Misalnya, untuk memecahkan masalah kondisi berdasarkan atribut tanggal/waktu, Pemecah Masalah Kebijakan memerlukan waktu permintaan.

Di gcloud CLI dan REST API, Anda memberikan konteks tambahan ini secara manual.

Di konsol Google Cloud, Anda dapat memberikan konteks tambahan ini dengan memecahkan masalah langsung dari log audit Aktivitas Admin atau log audit Akses Data. Setiap entri log audit sesuai dengan permintaan ke Google Cloud API, atau tindakan yang dilakukan Google Cloud atas nama Anda. Saat Anda memecahkan masalah dari log audit, Pemecah Masalah Kebijakan akan otomatis mendapatkan informasi tambahan tentang permintaan, seperti tanggal dan waktunya, yang memungkinkan Pemecah Masalah Kebijakan menganalisis penetapan peran bersyarat dan aturan penolakan.

Konsol

Untuk memecahkan masalah binding peran bersyarat dan aturan tolak, lakukan tindakan berikut:

  1. Di Konsol Google Cloud, buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Jika judul halamannya adalah Logs Viewer Lama, klik daftar drop-down Upgrade, lalu pilih Upgrade ke Logs Explorer baru.

  3. Untuk hanya melihat log audit Aktivitas Admin dan Akses Data, masukkan kueri berikut di pembuat kueri, lalu klik Run query:

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

    Ganti nilai berikut:

    • RESOURCE_TYPE: Jenis resource yang log auditnya ingin Anda cantumkan. Gunakan projects, folders, atau organizations.
    • RESOURCE_ID: ID resource Anda.
  4. Temukan entri log audit yang sesuai dengan permintaan yang ingin Anda pecahkan masalahnya. Untuk mempelajari cara menggunakan Logs Explorer guna menemukan entri log tertentu, lihat Menggunakan Logs Explorer.

  5. Di kolom Ringkasan pada entri log, klik IAM, lalu klik Pecahkan masalah akses.

    Pemecah Masalah Kebijakan menggunakan informasi dalam entri log untuk memecahkan masalah akses, lalu menampilkan hasilnya kepada Anda. Konteks tambahan tercantum dalam detail evaluasi di bagian Konteks kondisi. Untuk melihat detail konteks, klik Lihat konteks kondisi. Untuk mempelajari halaman hasil Pemecah Masalah Kebijakan lebih lanjut, lihat Memahami hasil Pemecah Masalah di halaman ini.

  6. Opsional: Untuk memecahkan masalah permintaan lain yang melibatkan binding peran kondisional dan aturan penolakan, kembali ke halaman Logs Explorer dan ulangi langkah-langkah sebelumnya.

gcloud

Untuk memecahkan masalah binding peran bersyarat dan aturan tolak, gunakan perintah gcloud policy-troubleshoot iam.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • EMAIL: Alamat email akun utama yang izinnya ingin Anda pecahkan masalahnya.
  • RESOURCE: Resource tempat izin diberikan.
  • PERMISSION: Izin yang ingin Anda pecahkan masalahnya.
  • DESTINATION_IP: Opsional. Alamat IP tujuan permintaan yang akan digunakan saat memeriksa binding peran bersyarat. Misalnya, 198.1.1.1.
  • DESTINATION_PORT: Opsional. Port tujuan permintaan yang akan digunakan saat memeriksa binding peran bersyarat. Misalnya, `8080`.
  • REQUEST_TIME: Opsional. Stempel waktu permintaan yang akan digunakan saat memeriksa binding peran bersyarat. Gunakan stempel waktu dalam format RFC 3339—misalnya, 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: Opsional. Nilai nama resource yang akan digunakan saat memeriksa binding peran bersyarat. Untuk daftar format nama resource yang diterima, lihat Format nama resource.
  • RESOURCE_SERVICE: Opsional. Nilai layanan resource yang akan digunakan saat memeriksa binding peran bersyarat. Untuk daftar nama layanan yang diterima, lihat Nilai layanan resource.
  • RESOURCE_TYPE: Opsional. Untuk daftar jenis resource yang diterima, lihat Nilai jenis resource.

Jalankan perintah gcloud policy-troubleshoot iam:

Linux, macOS, atau 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

Responsnya berisi penjelasan tentang akses akun utama. Untuk setiap aturan penetapan peran dan penolakan dengan kondisi, respons menyertakan kolom conditionExplanation yang menjelaskan apakah kondisi bernilai benar atau salah berdasarkan konteks kondisi yang Anda berikan.

Misalnya, berikut adalah evaluasi binding peran dengan kondisi yang menentukan jenis resource dan layanan resource:

Respons

...
{
  "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

Untuk memecahkan masalah binding peran bersyarat dan aturan penolakan, gunakan metode iam.troubleshoot Pemecah Masalah Kebijakan API.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • EMAIL: Alamat email akun utama yang izinnya ingin Anda pecahkan masalahnya.
  • RESOURCE: Resource tempat izin diberikan.
  • PERMISSION: Izin yang ingin Anda pecahkan masalahnya.
  • DESTINATION_IP: Opsional. Alamat IP tujuan permintaan yang akan digunakan saat memeriksa binding peran bersyarat. Misalnya, 198.1.1.1.
  • DESTINATION_PORT: Opsional. Port tujuan permintaan yang akan digunakan saat memeriksa binding peran bersyarat. Misalnya, `8080`.
  • REQUEST_TIME: Opsional. Stempel waktu permintaan yang akan digunakan saat memeriksa binding peran bersyarat. Gunakan stempel waktu dalam format RFC 3339—misalnya, 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: Opsional. Nilai nama resource yang akan digunakan saat memeriksa binding peran bersyarat. Untuk daftar format nama resource yang diterima, lihat Format nama resource.
  • RESOURCE_SERVICE: Opsional. Nilai layanan resource yang akan digunakan saat memeriksa binding peran bersyarat. Untuk daftar nama layanan yang diterima, lihat Nilai layanan resource.
  • RESOURCE_TYPE: Opsional. Untuk daftar jenis resource yang diterima, lihat Nilai jenis resource.

Metode HTTP dan URL:

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

Meminta isi 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
      }
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Responsnya berisi penjelasan tentang akses akun utama. Untuk setiap aturan penetapan peran dan penolakan dengan kondisi, respons menyertakan kolom conditionExplanation yang menjelaskan apakah kondisi bernilai benar atau salah berdasarkan konteks kondisi yang Anda berikan.

Misalnya, berikut adalah evaluasi binding peran dengan kondisi yang menentukan jenis resource dan layanan resource:

...
{
  "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
    }]
  }
}
...

Langkah selanjutnya