Menguji perubahan peran dengan Policy Simulator

Halaman ini menjelaskan cara menyimulasikan perubahan pada kebijakan izinkan IAM menggunakan Simulator Kebijakan. Bagian ini juga menjelaskan cara menafsirkan hasil simulasi, dan cara menerapkan kebijakan izinkan yang disimulasikan jika Anda memilih untuk melakukannya.

Fitur ini hanya mengevaluasi akses berdasarkan kebijakan izin.

Untuk mempelajari cara menyimulasikan perubahan pada jenis kebijakan lainnya, lihat artikel berikut:

Sebelum memulai

Izin yang diperlukan

Sebelum menyimulasikan perubahan pada kebijakan izin, Anda harus memastikan bahwa Anda memiliki izin yang sesuai. Izin tertentu diperlukan untuk menjalankan simulasi; izin lainnya tidak diperlukan, tetapi membantu Anda mendapatkan hasil paling lengkap dari simulasi.

Untuk mempelajari lebih lanjut peran Identity and Access Management (IAM), lihat Memahami peran.

Izin resource target yang diperlukan

Target resource simulasi adalah resource yang kebijakan izinnya Anda simulasikan.

Untuk mendapatkan izin yang diperlukan untuk menjalankan simulasi, minta administrator Anda untuk memberi Anda peran IAM berikut pada resource target:

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

Peran bawaan ini berisi izin yang diperlukan untuk menjalankan simulasi. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk menjalankan simulasi:

  • cloudasset.assets.searchAllResources
  • policysimulator.replays.run
  • service.resource.getIamPolicy, dengan resource adalah jenis resource dari resource target dan service adalah nama layanan Google Cloud yang memiliki resource tersebut.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Izin resource host yang diperlukan

Resource host simulasi adalah project, folder, atau organisasi yang membuat dan menjalankan simulasi. Resource host tidak perlu terkait dengan resource target dengan cara apa pun.

Cara Anda menyetel resource host bergantung pada platform yang Anda gunakan.

Konsol

Resource host adalah project, folder, atau organisasi yang muncul di pemilih resource.

Untuk mengubah resource host, pilih project, folder, atau organisasi lain di pemilih resource.

gcloud

Resource host adalah project kuota saat ini. Untuk menetapkan project kuota, gunakan perintah gcloud auth application-default set-quota-project.

REST

Anda menentukan resource host secara manual setiap kali Anda mengirim permintaan. Lihat Mensimulasikan perubahan kebijakan di halaman ini untuk mengetahui detailnya.

Untuk mendapatkan izin yang diperlukan guna menjalankan simulasi, minta administrator untuk memberi Anda peran IAM Simulator Admin (roles/policysimulator.admin) di resource host. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk menjalankan simulasi. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk menjalankan simulasi:

  • policysimulator.replayResults.list
  • policysimulator.replays.create
  • policysimulator.replays.get

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Untuk mendapatkan hasil paling lengkap dari simulasi, sebaiknya Anda memiliki izin IAM dan Google Workspace tertentu. Jika Anda tidak memiliki beberapa atau semua izin ini, Anda tetap dapat menjalankan simulasi. Namun, menjalankan simulasi tanpa izin ini dapat menyebabkan peningkatan jumlah perubahan akses yang tidak diketahui, karena Anda mungkin tidak dapat mengambil informasi yang dapat memengaruhi hasil simulasi.

Sebaiknya Anda memiliki peran Peninjau Keamanan (roles/iam.securityReviewer) untuk organisasi Anda saat menjalankan simulasi. Atau, jika Anda sudah memiliki peran Admin Keamanan (roles/iam.securityAdmin), Anda tidak perlu diberi peran tambahan.

Peran ini memberi Anda izin berikut, yang membantu Anda mendapatkan hasil paling lengkap dari simulasi:

  • iam.roles.get dan iam.roles.list di project, folder, atau organisasi yang relevan tempat peran kustom ditentukan. Project, folder, atau organisasi relevan jika merupakan ancestor atau turunan dari resource yang kebijakan izinkannya sedang Anda simulasikan.
  • service.resource.getIamPolicy, dengan resource adalah nama jenis resource yang dapat memiliki kebijakan izin dan service adalah nama layanan Google Cloud yang memiliki resource tersebut.

    Saat menjalankan simulasi, sebaiknya Anda memiliki izin ini di setiap resource yang sesuai dengan kriteria berikut:

    • Policy Simulator mendukung resource.
    • Resourcememiliki kebijakan izinkan yang dapat memengaruhi akses pengguna. Hal ini benar jika salah satu hal berikut berlaku:

      • Resource adalah turunan dari resource yang kebijakan izinnya Anda simulasikan, dan resource tersebut muncul di log akses yang relevan.
      • Resource adalah ancestor dari resource yang kebijakan izinnya sedang Anda simulasikan.

    Misalnya, Anda ingin menyimulasikan kebijakan izin untuk suatu project. Jika log akses menyertakan upaya akses untuk bucket Cloud Storage di project, Anda memerlukan izin storage.buckets.getIamPolicy pada bucket tersebut. Jika project memiliki folder induk dengan kebijakan izinkan, Anda juga memerlukan izin resourcemanager.folders.getIamPolicy di folder tersebut.

Sebaiknya Anda memiliki izin untuk mengambil informasi keanggotaan grup untuk setiap grup Google dalam kebijakan izin asli dan kebijakan izin yang diusulkan.

Admin Super dan Admin Grup Google Workspace biasanya memiliki akses untuk melihat keanggotaan grup. Jika Anda bukan Admin Super atau Admin Grup, minta administrator Google Workspace Anda untuk membuat peran administrator Google Workspace kustom yang berisi hak istimewa groups.read (terletak di bagian Hak Istimewa Admin API) dan berikan kepada Anda. Dengan begitu, Anda dapat melihat keanggotaan semua grup dalam domain Anda, dan mensimulasikan perubahan pada kebijakan izin secara lebih efektif.

Menyimulasikan perubahan kebijakan

Simulasikan perubahan pada kebijakan izin dengan mengikuti langkah-langkah berikut.

Konsol

Contoh berikut menunjukkan cara menyimulasikan perubahan pada kebijakan izin untuk project. Namun, Anda dapat menyimulasikan perubahan pada kebijakan izin untuk resource apa pun yang memiliki kebijakan izin.

Edit izin kepala sekolah, lalu, alih-alih mengklik Simpan, klik Uji perubahan:

  1. Di konsol Google Cloud , buka halaman IAM.

    Buka halaman IAM.

  2. Buat perubahan yang diusulkan pada kebijakan izin dengan mengedit izin akun utama yang ada:

    1. Cari akun utama yang aksesnya ingin Anda edit, lalu klik tombol Edit di sebelah kanan.
    2. Edit akses akun utama dengan menambahkan peran baru, atau dengan mencabut atau mengubah peran yang ada.
  3. Untuk menyimulasikan perubahan yang diusulkan, klik Uji perubahan.

  4. Setelah beberapa menit, konsol Google Cloud akan menampilkan hasil simulasi sebagai daftar perubahan akses. Lihat Memahami hasil Policy Simulator di halaman ini untuk mengetahui informasi selengkapnya.

    Jika tidak ada perubahan akses antara kebijakan izin yang ada dan kebijakan izin yang disimulasikan, konsol Google Cloud tidak akan menampilkan perubahan akses apa pun.

gcloud

Untuk menyimulasikan perubahan pada kebijakan izin, ikuti pola baca-modifikasi-tulis, tetapi simulasikan kebijakan izin alih-alih menuliskannya.

  1. Baca kebijakan izin saat ini dengan menjalankan perintah berikut:

    gcloud resource-type get-iam-policy resource-id --format=format > filepath

    Ganti nilai berikut:

    • resource-type: Jenis resource yang ingin Anda simulasikan kebijakan izinnya. Contoh, projects.
    • resource-id: ID resource yang kebijakan izinya ingin Anda simulasikan. Contoh, my-project.
    • format: Format respons. Gunakan nilai json atau yaml.
    • filepath: Jalur ke file output baru untuk kebijakan izin.

    Misalnya, perintah berikut mendapatkan kebijakan izinkan untuk project my-project dalam format JSON dan menyimpannya ke direktori beranda pengguna:

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json
  2. Ubah kebijakan izin JSON atau YAML yang ditampilkan oleh perintah get-iam-policy untuk mencerminkan perubahan yang ingin Anda simulasikan.

    Ada beberapa jenis perubahan yang dapat Anda lakukan pada kebijakan izin. Misalnya, Anda dapat menambahkan atau menghapus akun utama dari binding peran, atau menghapus binding peran dari kebijakan izin.

  3. Jalankan perintah berikut untuk menyimulasikan perubahan pada kebijakan izin:

    gcloud iam simulator replay-recent-access \
        full-resource-name \
        filepath \
        --format=format

    Ganti nilai berikut:

    • full-resource-name: Nama resource lengkap dari resource yang kebijakan izinnya ingin Anda simulasikan.

      Nama resource lengkap adalah URI yang terdiri dari nama layanan dan jalur ke resource. Misalnya, jika Anda menyimulasikan kebijakan izin untuk project, Anda akan menggunakan //cloudresourcemanager.googleapis.com/projects/project- id, dengan project-id adalah ID project yang kebijakan izinnya Anda simulasikan.

      Untuk daftar format nama lengkap resource, lihat Nama lengkap resource.

    • filepath: Jalur ke file yang berisi kebijakan izin yang diubah yang ingin Anda simulasikan. Contoh, ~/proposed_policy.json.

    • format: Format respons. Misalnya, json atau yaml.

    Setelah beberapa menit, perintah akan mencetak daftar hasil pemutaran ulang yang menjelaskan bagaimana akses akun utama akan berubah jika kebijakan izin yang diusulkan diterapkan. Hasil ini juga mencantumkan error yang terjadi selama simulasi, termasuk error karena jenis resource yang tidak didukung.

    Lihat Memahami hasil Policy Simulator di halaman ini untuk mempelajari cara membaca hasilnya. Untuk mempelajari cara menyimpan hasil simulasi, bukan mencetaknya, lihat Menyimpan hasil simulasi.

    Berikut adalah contoh respons untuk simulasi kebijakan izin yang melibatkan pengguna my-user@example.com. Dalam hal ini, jika perubahan yang diusulkan diterapkan, my-user@example.com berpotensi tidak lagi memiliki izin resourcemanager.projects.list dan resourcemanager.projects.get untuk project my-project, dan tentu saja tidak lagi memiliki izin resourcemanager.projects.update untuk project my-project:

    [
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.list",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_MAYBE_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "UNKNOWN_INFO_DENIED",
              "errors": [
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                      "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                      "resourceType": "cloudresourcemanager.googleapis.com/projects"
                    }
                  ],
                  "message": "Missing permission to get relevant IAM policies."
                }
              ],
              "policies": [
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "policy": {}
                }
              ]
            }
          }
        },
        "lastSeenDate": {
          "day": 12,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.get",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_MAYBE_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "UNKNOWN_INFO_DENIED",
              "errors": [
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to view group membership.",
                      "resourceName": "group:everyone@example.com",
                      "resourceType": "Google group"
                    }
                  ],
                  "message": "Missing permission to view group membership."
                },
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                      "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                      "resourceType": "cloudresourcemanager.googleapis.com/projects"
                    }
                  ],
                  "message": "Missing permission to get relevant IAM policies."
                }
              ],
              "policies": [
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "bindingExplanations": [
                    {
                      "access": "UNKNOWN_INFO_DENIED",
                      "memberships": {
                        "group:everyone@example.com": {
                          "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED"
                        }
                      },
                      "role": "roles/owner"
                    }
                  ],
                  "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                  "policy": {
                    "bindings": [
                      {
                        "members": [
                          "group:everyone@example.com"
                        ],
                        "role": "roles/owner"
                      }
                    ],
                    "etag": "BwWgJSIInYA=",
                    "version": 3
                  }
                },
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "policy": {}
                }
              ]
            }
          }
        },
        "lastSeenDate": {
          "day": 10,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.update",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "NOT_GRANTED"
            }
          }
        },
        "lastSeenDate": {
          "day": 15,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {},
        "error": {
          "code": 12,
          "details": [
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.create"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.setIamPolicy"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.delete"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.update"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "pubsub.topics.publish"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.list"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.getIamPolicy"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.get"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            }
          ],
          "message": "Simulator does not yet support all resource types for 8 removed permissions."
        }
      }
    ]

    Jika tidak ada perubahan akses antara kebijakan izin yang ada dan kebijakan izin yang disimulasikan, perintah akan mencetak No access changes found in the replay.

REST

Untuk menyimulasikan perubahan pada kebijakan izin, ikuti pola baca-ubah-tulis, tetapi alih-alih menulis kebijakan izin, buat dan jalankan simulasi.

  1. Baca kebijakan izin untuk resource.

    Untuk mendapatkan kebijakan izin project, gunakan metode projects.getIamPolicy Resource Manager API.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud Anda. Project ID adalah string alfanumerik, seperti my-project.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan melihat respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:project-owner@example.com"
          ]
        },
        {
          "role": "roles/iam.securityReviewer",
          "members": [
            "user:fatima@example.com"
          ]
        }
      ]
    }
    

  2. Ubah kebijakan izin yang ditampilkan untuk mencerminkan perubahan yang ingin Anda simulasikan.

    Ada beberapa jenis perubahan yang dapat Anda lakukan pada kebijakan izin. Misalnya, Anda dapat menambahkan atau menghapus akun utama dari binding peran, atau menghapus binding peran dari kebijakan izin.

  3. Buat simulasi, atau Putar Ulang, dengan kebijakan izin yang diubah.

    Untuk membuat Pemutaran Ulang untuk project, folder, atau organisasi, gunakan metode replays.create Policy Simulator API.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • HOST_RESOURCE_TYPE: Jenis resource yang akan menghosting Pemutaran Ulang. Nilai ini harus berupa projects, folders, atau organizations.
    • HOST_RESOURCE_ID: ID resource host, misalnya, my-project.
    • TARGET_FULL_RESOURCE_NAME: Nama resource lengkap dari resource yang kebijakannya ingin Anda simulasikan. Resource ini dapat berupa resource apa pun yang menerima kebijakan IAM, dan tidak perlu terkait dengan resource host dengan cara apa pun.

      Nama resource lengkap adalah URI yang terdiri dari nama layanan dan jalur ke resource. Misalnya, jika Anda menyimulasikan kebijakan untuk project, Anda akan menggunakan //cloudresourcemanager.googleapis.com/projects/PROJECT_ID, dengan PROJECT_ID adalah ID project yang kebijakannya Anda simulasikan.

      Untuk daftar lengkap format nama resource, lihat Nama resource lengkap.

    • POLICY: Kebijakan yang ingin Anda simulasikan. Untuk contoh kebijakan, lihat referensi kebijakan.

      Untuk menyimulasikan beberapa kebijakan, sertakan beberapa pasangan "OBJECT_FULL_RESOURCE_NAME" : POLICY dalam isi permintaan.

    • PROJECT_ID: ID project Google Cloud Anda. Project ID adalah string alfanumerik, seperti my-project.

    Metode HTTP dan URL:

    POST https://policysimulator.googleapis.com/v1/HOST_RESOURCE_TYPE/HOST_RESOURCE_ID/locations/global/replays

    Meminta isi JSON:

    {
      "config": {
        "policyOverlay": {
          "TARGET_FULL_RESOURCE_NAME" : POLICY
        }
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi nama operasi yang merepresentasikan Pemutaran Ulang Anda:

    {
      "name": "operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8",
      "metadata": {
        "type_url": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata"
      }
    }
    

  4. Polling metode operations.get hingga Pemutaran Ulang selesai.

    Untuk melakukan polling operasi, sebaiknya panggil metode operations.get berulang kali hingga respons menyertakan kolom "done": true dan kolom name dengan nama Pemutaran Ulang yang telah selesai. Gunakan backoff eksponensial terpotong untuk menambahkan penundaan di antara setiap permintaan.

    Untuk mendapatkan status Pemutaran Ulang, gunakan metode operations.get Policy Simulator API.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • OPERATION_NAME: Nama operasi Pemutaran Ulang, termasuk awalan operations. Salin nilai ini dari kolom name pada respons replays.create. Contoh: operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8
    • PROJECT_ID: ID project Google Cloud Anda. Project ID adalah string alfanumerik, seperti my-project.

    Metode HTTP dan URL:

    GET https://policysimulator.googleapis.com/v1/OPERATION_NAME

    Untuk mengirim permintaan, perluas salah satu opsi berikut:

    Operasi yang sedang berlangsung akan menampilkan respons seperti berikut:

    {
      "name": "operations/42083b6b-3788-41b9-ae39-e97d7615a22d",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata",
        "startTime": "2021-01-15T05:34:14.732Z"
      }
    }
    

    Operasi yang telah selesai akan menampilkan respons seperti berikut:

    {
      "name": "operations/89ab4892-9605-4c84-aedb-4fce4fc5195b",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata",
        "startTime": "2021-01-15T05:40:15.922Z"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.Replay",
        "replay": {
          "name": "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b",
          "state": SUCCEEDED,
          "config": {},
          "resultsSummary": {
            "logCount": 1319,
            "unchangedCount": 1169,
            "differenceCount": 149,
            "errorCount": 1,
            "oldestDate": {
              "year": 2020,
              "month": 10,
              "day": 15
            },
            "newestDate": {
              "year": 2021,
              "month": 1,
              "day": 12
            }
          }
        }
      }
    }
    

  5. Dapatkan hasil Pemutaran Ulang.

    Untuk mendapatkan hasil Pemutaran Ulang, gunakan metode replays.results.list Policy Simulator API.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • REPLAY_NAME: Nama Pemutaran Ulang yang ingin Anda ambil hasilnya. Salin nilai ini dari kolom response.replay.name dalam respons operations.get. Sertakan semua jenis resource dan awalan lokasi. Contoh, "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b"
    • PAGE_SIZE: Opsional. Jumlah maksimum hasil yang akan ditampilkan dari permintaan ini. Jika tidak ditentukan, server akan menentukan jumlah hasil yang akan ditampilkan. Jika jumlah hasil lebih besar dari ukuran halaman, respons akan berisi token penomoran halaman yang dapat Anda gunakan untuk mengambil halaman hasil berikutnya.
    • PAGE_TOKEN: Opsional. Token penomoran halaman yang ditampilkan dalam respons sebelumnya dari metode ini. Jika ditentukan, daftar hasil akan dimulai dari tempat permintaan sebelumnya berakhir.
    • PROJECT_ID: ID project Google Cloud Anda. Project ID adalah string alfanumerik, seperti my-project.

    Metode HTTP dan URL:

    GET https://policysimulator.googleapis.com/v1/REPLAY_NAME/results?pageSize=page-size&pageToken=PAGE_TOKEN

    Untuk mengirim permintaan, perluas salah satu opsi berikut:

    Respons berisi daftar hasil yang menjelaskan bagaimana akses akun utama akan berubah jika kebijakan yang diusulkan diterapkan. Hasil ini juga mencantumkan error yang terjadi selama simulasi, terutama error yang disebabkan oleh jenis resource yang tidak didukung

    Lihat Memahami hasil Policy Simulator di halaman ini untuk mempelajari cara membaca hasilnya.

    Berikut adalah contoh respons untuk simulasi kebijakan yang melibatkan pengguna my-user@example.com. Dalam hal ini, jika perubahan yang diusulkan diterapkan, my-user@example.com berpotensi tidak lagi memiliki izin resourcemanager.projects.list dan resourcemanager.projects.get untuk project my-project, dan pasti tidak lagi memiliki izin resourcemanager.projects.update untuk project my-project:

    {
      "replayResults": [
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.list",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_MAYBE_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "UNKNOWN_INFO_DENIED",
                "errors": [
                  {
                    "code": 7,
                    "message": "Missing permission to get relevant IAM policies.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                        "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                        "resourceType": "cloudresourcemanager.googleapis.com/projects"
                      }
                    ]
                  }
                ],
                "policies": [
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "policy": {}
                  }
                ]
              }
            }
          }
        },
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.get",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_MAYBE_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "UNKNOWN_INFO_DENIED",
                "errors": [
                  {
                    "code": 7,
                    "message": "Missing permission to view group membership.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to view group membership.",
                        "resourceName": "group:everyone@example.com",
                        "resourceType": "Google group"
                      }
                    ]
                  },
                  {
                    "code": 7,
                    "message": "Missing permission to get relevant IAM policies.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                        "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                        "resourceType": "cloudresourcemanager.googleapis.com/projects"
                      }
                    ]
                  }
                ],
                "policies": [
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "bindingExplanations": [
                      {
                        "access": "UNKNOWN_INFO_DENIED",
                        "memberships": {
                          "group:everyone@example.com": {
                            "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED"
                          }
                        },
                        "role": "roles/owner"
                      }
                    ],
                    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                    "policy": {
                      "bindings": [
                        {
                          "members": [
                            "group:everyone@example.com"
                          ],
                          "role": "roles/owner"
                        }
                      ],
                      "etag": "BwWgJSIInYA=",
                      "version": 3
                    }
                  },
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "policy": {}
                  }
                ]
              }
            }
          }
        },
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.update",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "NOT_GRANTED"
              }
            }
          }
        },
        {
          "accessTuple": {},
          "error": {
            "code": 12,
            "message": "Simulator does not yet support all resource types for 8 removed permissions.",
            "details": [
              {
                "@type": "type.googleapis.com/google.rpc.Status",
                "code": 12,
                "message": "Simulator does not yet support all resource types for 8 removed permissions.",
                "details": [
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.create"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.setIamPolicy"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.delete"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.update"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "pubsub.topics.publish"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.list"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.getIamPolicy"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.get"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  }
                ]
              }
            ]
          }
        }
      ],
      "nextPageToken": "AWukk3zjv80La+chWx6WNt7X8czGPLtP792gRpkNVEV/URZ/VdWzxmuJKr"
    }
    

    Jika tidak ada perubahan akses antara kebijakan izinkan yang ada dan kebijakan izinkan yang disimulasikan, permintaan akan menampilkan daftar kosong ({}).

Memahami hasil Policy Simulator

Policy Simulator melaporkan dampak perubahan yang diusulkan pada kebijakan izin sebagai daftar perubahan akses. Setiap perubahan akses mewakili upaya akses dari 90 hari terakhir yang akan memiliki hasil yang berbeda berdasarkan kebijakan izin yang diusulkan dibandingkan dengan kebijakan izin saat ini.

Simulator Kebijakan juga mencantumkan error yang terjadi selama simulasi, yang membantu Anda mengidentifikasi potensi kekurangan dalam simulasi.

Penyajian perubahan dan error ini bergantung pada platform yang Anda gunakan.

Konsol

Halaman hasil Simulator Kebijakan menampilkan hasil simulasi dalam beberapa bagian yang berbeda:

  • Perubahan kebijakan: Bagian ini mencantumkan resource yang kebijakan izinnya ingin Anda ubah, peran yang ingin Anda hapus, dan peran yang ingin Anda tambahkan.

    Bagian ini juga berisi tombol Lihat perbedaan kebijakan. Jika mengklik tombol ini, Anda dapat melihat tampilan kebijakan izin resource sebelum dan setelah perubahan yang diusulkan.

  • Perubahan izin: Bagian ini berisi jumlah izin yang dihapus dan ditambahkan, yang menjelaskan bagaimana izin prinsipal akan berubah jika Anda menerapkan perubahan yang diusulkan. Jumlah izin ini dihitung dengan membandingkan izin dalam peran saat ini akun utama dengan izin dalam peran yang diusulkan untuk akun utama, dengan mengabaikan peran yang diwariskan.

    Bagian ini juga berisi tombol Lihat perbedaan izin. Jika mengklik tombol ini, Anda dapat melihat perbandingan berdampingan izin dalam peran saat ini dan yang diusulkan untuk akun utama.

  • Perubahan akses selama 90 hari terakhir: Bagian ini menunjukkan upaya akses dari 90 hari terakhir yang memiliki hasil berbeda berdasarkan kebijakan izin yang diusulkan dan kebijakan izin saat ini. Bagian ini mencakup ringkasan perubahan akses, dan tabel dengan hasil yang lebih mendetail.

    Ringkasan perubahan akses mencantumkan jumlah setiap jenis perubahan akses, jumlah error dan hasil yang tidak diketahui, serta jumlah upaya akses yang memiliki hasil yang sama berdasarkan kebijakan izin yang diusulkan dan kebijakan izin saat ini. Ringkasan ini juga menunjukkan jumlah izin yang tidak dapat disimulasikan. Untuk mengetahui informasi selengkapnya, lihat Error di halaman ini.

    Bagian ini juga berisi tabel perubahan akses. Tabel ini mencantumkan setiap upaya akses dari 90 hari terakhir yang memiliki hasil berbeda berdasarkan kebijakan izin yang diusulkan dan berdasarkan kebijakan izin saat ini. Setiap entri mencakup resource yang coba diakses oleh akun utama, tanggal permintaan, akun utama yang membuat permintaan, izin dalam permintaan, dan status akses berdasarkan kebijakan izinkan yang diusulkan dibandingkan dengan status akses berdasarkan kebijakan izinkan saat ini.

    Ada beberapa jenis perubahan akses:

    Perubahan akses Detail
    Akses dicabut Akun utama memiliki akses berdasarkan kebijakan izin saat ini, tetapi tidak akan lagi memiliki akses setelah perubahan yang diusulkan.
    Akses berpotensi dicabut

    Hasil ini dapat terjadi karena alasan berikut:

    • Akun utama memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya berdasarkan kebijakan izin yang diusulkan adalah tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini adalah tidak diketahui, tetapi akun utama tidak akan memiliki akses setelah perubahan yang diusulkan.
    Akses didapatkan Principal tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi akan memiliki akses setelah perubahan yang diusulkan.
    Akses berpotensi didapatkan

    Hasil ini dapat terjadi karena alasan berikut:

    • Kepala sekolah tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya setelah perubahan yang diusulkan tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini adalah tidak diketahui, tetapi akun utama akan memiliki akses setelah perubahan yang diusulkan.
    Akses tidak diketahui Akses akun utama berdasarkan kebijakan izinkan saat ini dan kebijakan izinkan yang diusulkan adalah tidak diketahui, dan perubahan yang diusulkan dapat memengaruhi akses akun utama.
    Error Terjadi error selama simulasi.

    Untuk melihat detail tambahan tentang perubahan akses, klik perubahan akses. Tindakan ini akan membuka panel Detail perubahan akses, yang menampilkan informasi tambahan tentang perubahan akses, termasuk akses yang ada untuk akun utama, akses yang diusulkan untuk akun utama, dan detail tambahan tentang hasil perubahan akses.

gcloud

Saat Anda menggunakan perintah replay-recent-access, respons gcloud CLI berisi daftar replayResults.

Setiap hasil pemutaran ulang menjelaskan upaya akses yang hasilnya akan berbeda jika kebijakan izinkan yang diusulkan telah diterapkan pada saat upaya tersebut dilakukan. Misalnya, hasil pemutaran ulang berikut menunjukkan bahwa my-user@example.com menggunakan izin resourcemanager.projects.update di masa lalu untuk melakukan tindakan di project my-project. Namun, jika kebijakan izin yang diusulkan telah diterapkan, mereka akan ditolak aksesnya.

{
  "accessTuple": {
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "resourcemanager.projects.update",
    "principal": "my-user@example.com"
  },
  "lastSeenDate": {
    "day": 15,
    "month": 1,
    "year": 2021
  },
  "diff": {
    "accessDiff": {
      "baseline": {
        "accessState": "GRANTED"
      },
      "simulated": {
        "accessState": "NOT_GRANTED"
      },
      "accessChange": "ACCESS_REVOKED"
    }
  }
}

Setiap hasil pemutaran ulang memiliki kolom berikut:

  • accessTuple: Upaya akses yang terkait dengan hasil. Kolom ini mencakup resource, izin, dan akun utama yang terlibat dalam upaya akses.

  • lastSeenDate: Tanggal upaya akses terakhir dilakukan.

  • diff.accessDiff atau error: Jika pemutaran ulang upaya akses berhasil, hasilnya berisi kolom diff.accessDiff yang melaporkan perbedaan antara hasil upaya akses berdasarkan kebijakan izin saat ini dan berdasarkan kebijakan izin yang diusulkan. Jika upaya pemutaran ulang tidak berhasil, hasil pemutaran ulang akan berisi kolom error dengan deskripsi error. Untuk mempelajari lebih lanjut error simulasi, lihat Error di halaman ini.

Setiap perbedaan akses memiliki komponen berikut:

  • baseline: Hasil akses saat menggunakan kebijakan izinkan saat ini. Hal ini dilaporkan sebagai salah satu nilai berikut: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL, atau UNKNOWN_INFO_DENIED. Jika hasilnya adalah UNKNOWN_CONDITIONAL atau UNKNOWN_INFO_DENIED, respons juga akan mencantumkan error yang terkait dengan informasi yang tidak diketahui, serta kebijakan izinkan yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN ini, lihat Hasil tidak diketahui di halaman ini.
  • simulated: Hasil akses saat menggunakan kebijakan izinkan yang diusulkan. Hal ini dilaporkan sebagai salah satu nilai berikut: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL, atau UNKNOWN_INFO_DENIED. Jika hasilnya adalah UNKNOWN_CONDITIONAL atau UNKNOWN_INFO_DENIED, respons juga akan mencantumkan error apa pun yang terkait dengan informasi yang tidak diketahui, serta kebijakan izinkan yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN ini, lihat Hasil tidak diketahui di halaman ini.
  • accessChange: Perubahan antara status akses dasar dan status akses yang disimulasikan. Lihat tabel berikut untuk mengetahui daftar kemungkinan nilai:

    Perubahan akses Detail
    ACCESS_REVOKED Akun utama memiliki akses berdasarkan kebijakan izin saat ini, tetapi tidak akan lagi memiliki akses setelah perubahan yang diusulkan.
    ACCESS_MAYBE_REVOKED

    Hasil ini dapat terjadi karena alasan berikut:

    • Akun utama memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya berdasarkan kebijakan izin yang diusulkan adalah tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini adalah tidak diketahui, tetapi akun utama tidak akan memiliki akses setelah perubahan yang diusulkan.
    ACCESS_GAINED Principal tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi akan memiliki akses setelah perubahan yang diusulkan.
    ACCESS_MAYBE_GAINED

    Hasil ini dapat terjadi karena alasan berikut:

    • Kepala sekolah tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya setelah perubahan yang diusulkan tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini adalah tidak diketahui, tetapi akun utama akan memiliki akses setelah perubahan yang diusulkan.
    UNKNOWN_CHANGE Akses akun utama berdasarkan kebijakan izinkan saat ini dan kebijakan izinkan yang diusulkan adalah tidak diketahui, dan perubahan yang diusulkan dapat memengaruhi akses akun utama.

REST

Saat Anda memanggil metode replays.results.list, responsnya berisi daftar replayResults.

Setiap hasil pemutaran ulang menjelaskan upaya akses yang hasilnya akan berbeda jika kebijakan izinkan yang diusulkan telah diterapkan pada saat upaya tersebut dilakukan. Misalnya, hasil pemutaran ulang berikut menunjukkan bahwa my-user@example.com menggunakan izin resourcemanager.projects.update di masa lalu untuk melakukan tindakan di project my-project. Namun, jika kebijakan izin yang diusulkan telah diterapkan, mereka akan ditolak aksesnya.

{
  "accessTuple": {
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "resourcemanager.projects.update",
    "principal": "my-user@example.com"
  },
  "lastSeenDate": {
    "day": 15,
    "month": 1,
    "year": 2021
  },
  "diff": {
    "accessDiff": {
      "baseline": {
        "accessState": "GRANTED"
      },
      "simulated": {
        "accessState": "NOT_GRANTED"
      },
      "accessChange": "ACCESS_REVOKED"
    }
  }
}

Setiap hasil pemutaran ulang memiliki kolom berikut:

  • accessTuple: Upaya akses yang terkait dengan hasil. Kolom ini mencakup resource, izin, dan akun utama yang terlibat dalam upaya akses.

  • lastSeenDate: Tanggal upaya akses terakhir dilakukan.

  • diff.accessDiff atau error: Jika pemutaran ulang upaya akses berhasil, hasilnya berisi kolom diff.accessDiff yang melaporkan perbedaan antara hasil upaya akses berdasarkan kebijakan izin saat ini dan berdasarkan kebijakan izin yang diusulkan. Jika upaya pemutaran ulang tidak berhasil, hasil pemutaran ulang akan berisi kolom error dengan deskripsi error. Untuk mempelajari lebih lanjut error simulasi, lihat Error di halaman ini.

Setiap perbedaan akses memiliki komponen berikut:

  • baseline: Hasil akses saat menggunakan kebijakan izinkan saat ini. Hal ini dilaporkan sebagai salah satu nilai berikut: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL, atau UNKNOWN_INFO_DENIED. Jika hasilnya adalah UNKNOWN_CONDITIONAL atau UNKNOWN_INFO_DENIED, respons juga akan mencantumkan error yang terkait dengan informasi yang tidak diketahui, serta kebijakan izinkan yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN ini, lihat Hasil tidak diketahui di halaman ini.
  • simulated: Hasil akses saat menggunakan kebijakan izinkan yang diusulkan. Hal ini dilaporkan sebagai salah satu nilai berikut: GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL, atau UNKNOWN_INFO_DENIED. Jika hasilnya adalah UNKNOWN_CONDITIONAL atau UNKNOWN_INFO_DENIED, respons juga akan mencantumkan error yang terkait dengan informasi yang tidak diketahui, serta kebijakan izinkan yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN ini, lihat Hasil tidak diketahui di halaman ini.
  • accessChange: Perubahan antara status akses dasar dan status akses yang disimulasikan. Lihat tabel berikut untuk mengetahui daftar kemungkinan nilai:

    Perubahan akses Detail
    ACCESS_REVOKED Akun utama memiliki akses berdasarkan kebijakan izin saat ini, tetapi tidak akan lagi memiliki akses setelah perubahan yang diusulkan.
    ACCESS_MAYBE_REVOKED

    Hasil ini dapat terjadi karena alasan berikut:

    • Akun utama memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya berdasarkan kebijakan izin yang diusulkan adalah tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini adalah tidak diketahui, tetapi akun utama tidak akan memiliki akses setelah perubahan yang diusulkan.
    ACCESS_GAINED Principal tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi akan memiliki akses setelah perubahan yang diusulkan.
    ACCESS_MAYBE_GAINED

    Hasil ini dapat terjadi karena alasan berikut:

    • Kepala sekolah tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya setelah perubahan yang diusulkan tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini adalah tidak diketahui, tetapi akun utama akan memiliki akses setelah perubahan yang diusulkan.
    UNKNOWN_CHANGE Akses akun utama berdasarkan kebijakan izinkan saat ini dan kebijakan izinkan yang diusulkan adalah tidak diketahui, dan perubahan yang diusulkan dapat memengaruhi akses akun utama.

Hasil tidak diketahui

Jika hasil akses tidak diketahui, berarti Simulator Kebijakan tidak memiliki cukup informasi untuk mengevaluasi sepenuhnya upaya akses.

Konsol

Jika hasil akses tidak diketahui, panel detail perubahan akses akan melaporkan alasan mengapa hasil tersebut tidak diketahui, serta peran, kebijakan izin, keanggotaan grup, dan kondisi spesifik yang tidak dapat diakses atau dievaluasi.

Ada beberapa alasan mengapa hasil bisa tidak diketahui:

  • Info peran ditolak: Akun utama yang menjalankan simulasi tidak memiliki izin untuk melihat detail peran untuk satu atau beberapa peran yang disimulasikan.
  • Tidak dapat mengakses kebijakan: Akun utama yang menjalankan simulasi tidak memiliki izin untuk mendapatkan kebijakan izin untuk satu atau beberapa resource yang terlibat dalam simulasi.
  • Info keanggotaan ditolak: Akun utama yang menjalankan simulasi tidak memiliki izin untuk melihat anggota satu atau beberapa grup yang disertakan dalam kebijakan izin yang diusulkan.
  • Kondisi tidak didukung: Ada binding peran bersyarat dalam kebijakan izin yang sedang diuji. Simulator Kebijakan tidak mendukung kondisi, sehingga binding tidak dapat dievaluasi.

gcloud

Di gcloud CLI, hasil simulasi akan melaporkan alasan hasilnya tidak diketahui dalam perbedaan akses.

Alasan hasil akses tidak diketahui adalah salah satu dari berikut ini:

  • UNKNOWN_INFO_DENIED: Pengguna tidak memiliki izin untuk mengakses informasi yang diperlukan untuk mengevaluasi status akses. Hal ini dapat terjadi karena salah satu alasan berikut:

    • Pengguna tidak memiliki izin untuk mengambil kebijakan izin yang sedang disimulasikan, atau mereka tidak memiliki izin untuk mengambil kebijakan izin untuk resource dalam log akses.
    • Pengguna tidak memiliki izin untuk melihat keanggotaan grup.
    • Pengguna tidak dapat mengambil informasi peran yang diperlukan.

    Untuk mempelajari informasi yang kurang, lihat informasi error setelah status akses yang dilaporkan.

  • UNKNOWN_CONDITIONAL: Ada binding peran bersyarat dalam kebijakan izin yang sedang diuji. Simulator Kebijakan tidak mendukung kondisi, sehingga binding tidak dapat dievaluasi.

Jika hasilnya tidak diketahui, kolom untuk kebijakan izin (baseline atau simulated) berisi kolom errors yang menjelaskan alasan informasi tersebut tidak diketahui, dan kolom policies yang mencantumkan kebijakan izin yang terkait dengan error. Untuk mengetahui informasi selengkapnya tentang error, lihat Error di halaman ini.

REST

Di REST API, hasil simulasi akan melaporkan alasan bahwa hasilnya tidak diketahui dalam perbedaan akses.

Alasan hasil akses tidak diketahui adalah salah satu dari berikut ini:

  • UNKNOWN_INFO_DENIED: Pengguna tidak memiliki izin untuk mengakses informasi yang diperlukan untuk mengevaluasi status akses. Hal ini dapat terjadi karena salah satu alasan berikut:

    • Pengguna tidak memiliki izin untuk mengambil kebijakan izin yang sedang disimulasikan, atau mereka tidak memiliki izin untuk mengambil kebijakan izin untuk resource dalam log akses.
    • Pengguna tidak memiliki izin untuk melihat keanggotaan grup.
    • Pengguna tidak dapat mengambil informasi peran yang diperlukan.

    Untuk mempelajari informasi yang kurang, lihat informasi error setelah status akses yang dilaporkan.

  • UNKNOWN_CONDITIONAL: Ada binding peran bersyarat dalam kebijakan izin yang sedang diuji. Simulator Kebijakan tidak mendukung kondisi, sehingga binding tidak dapat dievaluasi.

Jika hasilnya tidak diketahui, kolom untuk kebijakan izin (baseline atau simulated) berisi kolom errors yang menjelaskan alasan informasi tersebut tidak diketahui, dan kolom policies yang mencantumkan kebijakan izin yang terkait dengan error. Untuk mengetahui informasi selengkapnya tentang error, lihat Error di halaman ini.

Error

Simulator Kebijakan juga melaporkan error yang terjadi selama simulasi. Penting untuk meninjau error ini agar Anda memahami potensi kesenjangan dalam simulasi.

Konsol

Ada beberapa jenis error yang mungkin dilaporkan oleh Simulator Kebijakan:

  • Error operasi: Simulasi tidak dapat dijalankan. Simulator Kebijakan melaporkan error operasi di bagian atas halaman hasil.

    Jika pesan error menyatakan bahwa simulasi tidak dapat dijalankan karena ada terlalu banyak log di project atau organisasi Anda, maka Anda tidak dapat menjalankan simulasi pada resource tersebut.

    Jika Anda mendapatkan error ini karena alasan lain, coba jalankan simulasi lagi. Jika Anda masih tidak dapat menjalankan simulasi, hubungi policy-simulator-feedback@google.com.

  • Error pemutaran ulang: Pemutaran ulang satu upaya akses tidak berhasil, sehingga Policy Simulator tidak dapat menentukan apakah hasil upaya akses akan berubah berdasarkan kebijakan izin yang diusulkan.

    Konsol Google Cloud mencantumkan error pemutaran ulang dalam tabel Perubahan akses selama 90 hari terakhir. Panel Detail perubahan akses untuk setiap error mencakup pesan error untuk membantu Anda memahami masalah, serta resource dan izin yang disimulasikan saat error terjadi.

  • Error jenis resource yang tidak didukung: Kebijakan izin yang diusulkan memengaruhi izin yang terkait dengan jenis resource yang tidak didukung, yang tidak dapat disimulasikan oleh Simulator Kebijakan.

    Policy Simulator mencantumkan izin ini dalam hasil simulasi sehingga Anda mengetahui izin mana yang tidak dapat disimulasikan.

gcloud

Dalam hasil simulasi gcloud CLI, error dapat muncul di dua tempat:

  • Kolom replayResult.error: Jika upaya pemutaran ulang tidak berhasil, Policy Simulator akan melaporkan error di kolom replayResult.error. Jika hasil pemutaran ulang berisi kolom ini, hasil tersebut tidak berisi kolom diff.
  • Kolom replayResult.diff.accessDiff.policy-type.errors, dengan policy-type adalah baseline atau simulated. Jika upaya pemutaran ulang berhasil, tetapi hasilnya adalah UNKNOWN_INFO_DENIED atau UNKNOWN_CONDITIONAL, Policy Simulator melaporkan alasan hasil tidak diketahui di kolom ini.

Policy Simulator menghasilkan jenis error berikut:

Error Kode error Detail
GENERIC_INTERNAL_ERROR 13 Simulasi gagal karena error internal. Untuk menyelesaikannya, coba jalankan simulasi lagi. Jika simulasi masih gagal, hubungi policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Simulator Kebijakan tidak dapat memutar ulang upaya akses karena berisi izin, nama resource, atau prinsipal yang tidak valid.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Simulator Kebijakan tidak dapat mengevaluasi keanggotaan prinsipal dalam grup karena grup memiliki terlalu banyak subgrup. Error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk melihat keanggotaan grup. Error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk mengambil kebijakan izinkan. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk mengambil izin dalam peran IAM. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk mengambil kebijakan izin resource induk. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 Tuple akses berisi jenis prinsipal yang tidak didukung oleh Policy Simulator.
UNIMPLEMENTED_MEMBER 12 Tuple akses berisi prinsipal yang tidak didukung oleh Simulator Kebijakan.
UNIMPLEMENTED_CONDITION 12 Tuple akses berisi kondisi, yang tidak didukung oleh Policy Simulator. Jenis error ini terkait dengan perubahan akses UNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 Resource dikaitkan dengan terlalu banyak log akses, sehingga Simulator Kebijakan tidak dapat menjalankan simulasi. Lihat Ukuran pemutaran ulang log maksimum di halaman konsep Policy Simulator untuk mengetahui detailnya.
UNSUPPORTED_RESOURCE 12

Perubahan kebijakan izinkan yang diusulkan mengubah izin yang terkait dengan jenis resource yang tidak didukung. Error ini muncul di kolom replayResult.error dan berisi daftar izin yang terkait dengan jenis resource yang tidak didukung. Contoh:

"error": {
  "code": 12,
  "details": [
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.create"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.setIamPolicy"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.get"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    }
  ],
  "message": "unsupported-permissions-error-message"
}

Untuk mengetahui informasi selengkapnya tentang jenis resource yang tidak didukung, lihat Tingkat dukungan untuk jenis resource di halaman konsep Policy Simulator.

REST

Dalam hasil simulasi REST API, error dapat muncul di dua tempat:

  • Kolom replayResult.error: Jika upaya pemutaran ulang tidak berhasil, Policy Simulator akan melaporkan error di kolom replayResult.error. Jika hasil pemutaran ulang berisi kolom ini, hasil tersebut tidak berisi kolom diff.
  • Kolom replayResult.diff.accessDiff.policy-type.errors, dengan policy-type adalah baseline atau simulated. Jika upaya pemutaran ulang berhasil, tetapi hasilnya adalah UNKNOWN_INFO_DENIED atau UNKNOWN_CONDITIONAL, Policy Simulator melaporkan alasan hasil tidak diketahui di kolom ini.

Policy Simulator menghasilkan jenis error berikut:

Error Kode error Detail
GENERIC_INTERNAL_ERROR 13 Simulasi gagal karena error internal. Untuk menyelesaikannya, coba jalankan simulasi lagi. Jika simulasi masih gagal, hubungi policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Simulator Kebijakan tidak dapat memutar ulang upaya akses karena berisi izin, nama resource, atau prinsipal yang tidak valid.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Simulator Kebijakan tidak dapat mengevaluasi keanggotaan prinsipal dalam grup karena grup memiliki terlalu banyak subgrup. Error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk melihat keanggotaan grup. Error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk mengambil kebijakan izinkan. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk mengambil izin dalam peran IAM. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Simulator Kebijakan tidak dapat mengevaluasi akses pengguna karena pemanggil tidak memiliki izin untuk mengambil kebijakan izin resource induk. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 Tuple akses berisi jenis prinsipal yang tidak didukung oleh Policy Simulator.
UNIMPLEMENTED_MEMBER 12 Tuple akses berisi prinsipal yang tidak didukung oleh Simulator Kebijakan.
UNIMPLEMENTED_CONDITION 12 Tuple akses berisi kondisi, yang tidak didukung oleh Policy Simulator. Jenis error ini terkait dengan perubahan akses UNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 Resource dikaitkan dengan terlalu banyak log akses, sehingga Simulator Kebijakan tidak dapat menjalankan simulasi. Lihat Ukuran pemutaran ulang log maksimum di halaman konsep Policy Simulator untuk mengetahui detailnya.
UNSUPPORTED_RESOURCE 12

Perubahan kebijakan izinkan yang diusulkan mengubah izin yang terkait dengan jenis resource yang tidak didukung. Error ini muncul di kolom replayResult.error dan berisi daftar izin yang terkait dengan jenis resource yang tidak didukung. Contoh:

"error": {
  "code": 12,
  "details": [
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.create"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.setIamPolicy"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.get"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    }
  ],
  "message": "unsupported-permissions-error-message"
}

Untuk mengetahui informasi selengkapnya tentang jenis resource yang tidak didukung, lihat Tingkat dukungan untuk jenis resource di halaman konsep Policy Simulator.

Menerapkan perubahan kebijakan yang disimulasikan

Untuk menerapkan perubahan simulasi pada kebijakan yang diizinkan, ikuti langkah-langkah berikut:

Konsol

  1. Klik Terapkan perubahan yang diusulkan.

  2. Pada dialog konfirmasi, klik Terapkan untuk mengonfirmasi perubahan.

gcloud

Gunakan perintah set-iam-policy, dan berikan jalur ke file JSON yang berisi kebijakan izinkan simulasi yang ingin Anda terapkan:

gcloud resource-type set-iam-policy resource-id filepath

Berikan nilai berikut:

  • resource-type: Jenis resource yang kebijakan izinnya ingin Anda perbarui. Contoh, projects.
  • resource-id: ID resource yang kebijakan izinnya ingin Anda perbarui. Contoh, my-project.
  • filepath: Jalur ke file yang berisi kebijakan izin yang telah diperbarui.

Respons berisi kebijakan izin yang diperbarui. Jika Anda memperlakukan kebijakan izin IAM sebagai kode dan menyimpannya di sistem kontrol versi, Anda harus menyimpan kebijakan izin yang ditampilkan gcloud CLI, bukan file JSON yang berisi kebijakan izin yang disimulasikan.

REST

Tetapkan kebijakan izin yang diusulkan sebagai kebijakan izin baru resource.

Untuk menetapkan kebijakan izin dalam permintaan sebagai kebijakan izin baru project, gunakan metode projects.setIamPolicy Resource Manager API.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID project Google Cloud Anda. Project ID adalah string alfanumerik, seperti my-project.
  • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat referensi Kebijakan.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Meminta isi JSON:

{
  "policy": {
    POLICY
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izin yang telah diperbarui.


Menyimpan hasil simulasi

Jika menggunakan gcloud CLI, Anda dapat menyimpan hasil Simulator Kebijakan sebagai file JSON, YAML, atau CSV.

Simpan sebagai JSON atau YAML

Untuk menyimpan hasil simulasi sebagai file JSON atau YAML, tambahkan flag berikut ke perintah replay-recent-access saat menjalankan simulasi:

--output=output-format > filename

Ganti nilai berikut:

  • output-format: Bahasa file yang diekspor, json atau yaml.
  • filename: Nama untuk file yang diekspor.

Simpan sebagai CSV

Untuk menyimpan file CSV, tambahkan tanda berikut ke perintah replay-recent-access saat menjalankan simulasi:

--flatten="diffs[]" --format=csv(output-fields) > filename

Ganti nilai berikut:

  • output-fields: Daftar kolom yang dipisahkan koma yang ingin Anda sertakan dalam hasil yang diekspor. Contoh, diffs.accessTuple.principal, diffs.accessTuple.permission.
  • filename: Nama untuk file yang diekspor.

Jika ingin, Anda dapat menambahkan kolom tambahan, seperti errors[] ke tanda --flatten. Menambahkan kolom ke tanda --flatten memungkinkan elemen dalam kolom tersebut dicantumkan di baris terpisah dalam file CSV.

Berikut adalah contoh perintah replay-recent-access yang menyimpan kolom hasil simulasi yang paling penting sebagai file CSV simulation-results.csv:

gcloud iam simulator replay-recent-access --flatten="diffs[]" \
    --format="csv(diffs.accessTuple.principal, diffs.accessTuple.permission, \
    diffs.accessTuple.fullResourceName, diffs.diff.accessDiff.accessChange, \
    diffs.diff.accessDiff.baseline.accessState, \
    diffs.diff.accessDiff.simulated.accessState)" \
    //cloudresourcemanager.googleapis.com/projects/my-project \
    proposed-policy.json > simulation-results.csv

Contoh ini menyimulasikan proposed-policy.json untuk project my-project dan menyimpan hasilnya sebagai simulation-results.csv. File CSV ini berisi kolom berikut: principal, izin, resource, perubahan akses, status akses dasar, dan status akses yang disimulasikan.

Untuk mengetahui informasi selengkapnya tentang pemformatan dengan gcloud CLI, lihat format.

Langkah berikutnya