Menguji perubahan peran dengan Policy Simulator

Halaman ini menjelaskan cara menyimulasikan perubahan pada kebijakan izin menggunakan Policy Simulator untuk kebijakan izin Identity and Access Management. Bagian ini juga menjelaskan cara menafsirkan hasil simulasi, dan cara menerapkan kebijakan izin simulasi jika Anda memilihnya.

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 peran Identity and Access Management (IAM) lebih lanjut, lihat Memahami peran.

Izin resource target yang diperlukan

Resource target simulasi adalah resource yang kebijakan izinnya Anda simulasikan.

Untuk mendapatkan izin yang diperlukan untuk menjalankan simulasi, minta administrator 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 menetapkan 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 mengirim permintaan. Lihat Menyimulasikan 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 simulasi yang paling lengkap, sebaiknya Anda memiliki izin IAM dan Google Workspace tertentu. Jika tidak memiliki beberapa atau semua izin ini, Anda tetap dapat menjalankan simulasi. Namun, menjalankan simulasi tanpa izin ini dapat mengakibatkan peningkatan jumlah perubahan akses yang tidak diketahui, karena Anda mungkin tidak dapat mengambil informasi yang dapat memengaruhi hasil simulasi.

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

Peran ini memberi Anda izin berikut, yang membantu Anda mendapatkan hasil yang 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 resource yang kebijakan izinnya Anda simulasikan.
  • service.resource.getIamPolicy, dengan resource adalah nama jenis resource yang dapat memiliki kebijakan izinkan 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.
    • Resource memiliki kebijakan izin yang mungkin memengaruhi akses pengguna. Hal ini berlaku jika salah satu hal berikut berlaku:

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

    Misalnya, bayangkan Anda ingin menyimulasikan kebijakan izin untuk project. Jika log akses menyertakan upaya akses untuk bucket Cloud Storage dalam project, Anda memerlukan izin storage.buckets.getIamPolicy di 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 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 demikian, Anda dapat melihat keanggotaan semua grup dalam domain, dan menyimulasikan 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 mana pun yang memiliki kebijakan izin.

Edit izin akun utama, 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 simulasi, konsol Google Cloud tidak akan menampilkan perubahan akses apa pun.

gcloud

Untuk menyimulasikan perubahan pada kebijakan izin, ikuti pola baca-ubah-tulis, tetapi simulasikan kebijakan izin, bukan menulisnya.

  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 izinnya 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 izin untuk project my-project dalam format JSON dan menyimpannya ke direktori utama 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 resource lengkap, lihat Nama resource lengkap.

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

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

    Setelah beberapa menit, perintah akan mencetak daftar hasil replay 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 apa pun 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 bukan 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: Project ID 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 Replay 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 Replay. 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 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: Project ID 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 mewakili Replay Anda:

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

  4. Lakukan polling metode operations.get hingga Replay selesai.

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

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

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • OPERATION_NAME: Nama operasi Replay, termasuk awalan operations. Salin nilai ini dari kolom name respons replays.create. Misalnya: operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8
    • PROJECT_ID: Project ID 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 Replay.

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

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • REPLAY_NAME: Nama Replay yang ingin Anda ambil hasilnya. Salin nilai ini dari kolom response.replay.name respons operations.get. Sertakan jenis resource dan awalan lokasi. Misalnya, "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: Project ID 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 tentu saja tidak akan 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 izin yang ada dan kebijakan izin 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 kesenjangan dalam simulasi.

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

Konsol

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

  • Perubahan kebijakan: Bagian ini mencantumkan resource yang kebijakan izinnya Anda usulkan untuk diubah, peran yang Anda usulkan untuk dihapus, dan peran yang Anda usulkan untuk ditambahkan.

    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 akun utama akan berubah jika Anda menerapkan perubahan yang diusulkan. Jumlah izin ini dihitung dengan membandingkan izin dalam peran akun utama saat ini dengan izin dalam peran yang diusulkan akun utama, dengan mengabaikan peran yang diwarisi.

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

  • Perubahan akses selama 90 hari terakhir: Bagian ini menunjukkan upaya akses mana dari 90 hari terakhir yang memiliki hasil yang 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 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 yang berbeda berdasarkan kebijakan izin yang diusulkan dan berdasarkan kebijakan izin saat ini. Setiap entri menyertakan resource yang coba diakses akun utama, tanggal permintaan, akun utama yang membuat permintaan, izin dalam permintaan, dan status akses berdasarkan kebijakan izin yang diusulkan dibandingkan dengan status akses berdasarkan kebijakan izin 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 tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini tidak diketahui, tetapi akun utama tersebut tidak akan memiliki akses setelah perubahan yang diusulkan.
    Akses didapatkan Prinsipal tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi akan memiliki akses setelah perubahan yang diusulkan.
    Akses yang berpotensi didapatkan

    Hasil ini dapat terjadi karena alasan berikut:

    • Prinsipal tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya setelah perubahan yang diusulkan tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini tidak diketahui, tetapi mereka akan memiliki akses setelah perubahan yang diusulkan.
    Akses tidak diketahui Akses akun utama berdasarkan kebijakan izin saat ini dan kebijakan izin yang diusulkan 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 Access change details, yang menampilkan informasi tambahan tentang perubahan akses, termasuk akses yang ada dari akun utama, akses yang diusulkan dari akun utama, dan detail tambahan tentang hasil perubahan akses.

gcloud

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

Setiap hasil replay menjelaskan upaya akses yang hasilnya akan berbeda jika kebijakan izin yang diusulkan telah diterapkan pada saat upaya tersebut. 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 replay memiliki kolom berikut:

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

  • lastSeenDate: Tanggal terakhir upaya akses dilakukan.

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

Setiap perbedaan akses memiliki komponen berikut:

  • baseline: Hasil akses saat menggunakan kebijakan izin 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 apa pun yang terkait dengan informasi yang tidak diketahui, serta kebijakan izin yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN, lihat Hasil tidak dikenal di halaman ini.
  • simulated: Hasil akses saat menggunakan kebijakan izin 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 izin yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN, lihat Hasil tidak dikenal di halaman ini.
  • accessChange: Perubahan antara status akses dasar pengukuran dan status akses simulasi. Lihat tabel berikut untuk mengetahui daftar nilai potensial:

    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 tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini tidak diketahui, tetapi akun utama tersebut tidak akan memiliki akses setelah perubahan yang diusulkan.
    ACCESS_GAINED Prinsipal 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:

    • Prinsipal tidak memiliki akses berdasarkan kebijakan izin saat ini, tetapi aksesnya setelah perubahan yang diusulkan tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini tidak diketahui, tetapi mereka akan memiliki akses setelah perubahan yang diusulkan.
    UNKNOWN_CHANGE Akses akun utama berdasarkan kebijakan izin saat ini dan kebijakan izin yang diusulkan 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 replay menjelaskan upaya akses yang hasilnya akan berbeda jika kebijakan izin yang diusulkan telah diterapkan pada saat upaya tersebut. 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 replay memiliki kolom berikut:

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

  • lastSeenDate: Tanggal terakhir upaya akses dilakukan.

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

Setiap perbedaan akses memiliki komponen berikut:

  • baseline: Hasil akses saat menggunakan kebijakan izin 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 apa pun yang terkait dengan informasi yang tidak diketahui, serta kebijakan izin yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN, lihat Hasil tidak dikenal di halaman ini.
  • simulated: Hasil akses saat menggunakan kebijakan izin 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 izin yang terkait dengan error tersebut. Untuk mengetahui informasi selengkapnya tentang nilai UNKNOWN, lihat Hasil tidak dikenal di halaman ini.
  • accessChange: Perubahan antara status akses dasar pengukuran dan status akses simulasi. Lihat tabel berikut untuk mengetahui daftar nilai potensial:

    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 tidak diketahui.
    • Akses akun utama berdasarkan kebijakan izin saat ini tidak diketahui, tetapi akun utama tersebut tidak akan memiliki akses setelah perubahan yang diusulkan.
    ACCESS_GAINED Prinsipal 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:

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

Hasil tidak diketahui

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

Konsol

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

Ada beberapa alasan mengapa hasil 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 bahwa hasilnya tidak diketahui dalam perbedaan akses.

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

  • 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 tidak ada, 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 hal berikut:

  • 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 tidak ada, 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, Anda tidak dapat menjalankan simulasi pada resource.

    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 di tabel Perubahan akses selama 90 hari terakhir. Panel Detail perubahan akses untuk setiap error menyertakan pesan error untuk membantu Anda memahami masalah, serta resource dan izin yang sedang 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 replay berisi kolom ini, hasil replay tidak akan 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 akan melaporkan alasan hasilnya 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 mengatasinya, 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 akun utama yang tidak valid.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Simulator Kebijakan tidak dapat mengevaluasi keanggotaan akun utama 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 izin. 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 ancestor. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 Tupel akses berisi jenis akun utama yang tidak didukung oleh Policy Simulator.
UNIMPLEMENTED_MEMBER 12 Tupel akses berisi akun utama yang tidak didukung oleh Policy Simulator.
UNIMPLEMENTED_CONDITION 12 Tupel 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 replay log maksimum di halaman konsep Policy Simulator untuk mengetahui detailnya.
UNSUPPORTED_RESOURCE 12

Kebijakan izin 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 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 replay berisi kolom ini, hasil replay tidak akan 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 akan melaporkan alasan hasilnya 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 mengatasinya, 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 akun utama yang tidak valid.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Simulator Kebijakan tidak dapat mengevaluasi keanggotaan akun utama 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 izin. 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 ancestor. Jenis error ini terkait dengan perubahan akses UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 Tupel akses berisi jenis akun utama yang tidak didukung oleh Policy Simulator.
UNIMPLEMENTED_MEMBER 12 Tupel akses berisi akun utama yang tidak didukung oleh Policy Simulator.
UNIMPLEMENTED_CONDITION 12 Tupel 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 replay log maksimum di halaman konsep Policy Simulator untuk mengetahui detailnya.
UNSUPPORTED_RESOURCE 12

Kebijakan izin 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 informasi selengkapnya tentang jenis resource yang tidak didukung, lihat Tingkat dukungan untuk jenis resource di halaman konsep Policy Simulator.

Menerapkan perubahan kebijakan simulasi

Untuk menerapkan perubahan simulasi pada kebijakan izin, 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 izin 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 dalam sistem kontrol versi, Anda harus menyimpan kebijakan izin yang ditampilkan gcloud CLI, bukan file JSON yang berisi kebijakan izin simulasi.

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: Project ID 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 flag 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.

Secara opsional, 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 terpenting dari hasil simulasi 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: akun utama, izin, resource, perubahan akses, status akses dasar pengukuran, dan status akses simulasi.

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

Langkah selanjutnya