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
-
Enable the Policy Simulator and Resource Manager APIs.
- Opsional: Pelajari cara kerja Simulator Kebijakan.
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:
-
Cloud Asset Viewer (
roles/cloudasset.viewer
) -
Simulator Admin (
roles/policysimulator.admin
) -
Security Reviewer (
roles/iam.securityReviewer
)
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
, denganresource
adalah jenis resource dari resource target danservice
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.
Izin yang direkomendasikan
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.
Izin IAM yang direkomendasikan
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
daniam.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
, denganresource
adalah nama jenis resource yang dapat memiliki kebijakan izinkan danservice
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 izinresourcemanager.folders.getIamPolicy
di folder tersebut.
Izin Google Workspace yang direkomendasikan
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:
Di konsol Google Cloud, buka halaman IAM.
Buat perubahan yang diusulkan pada kebijakan izin dengan mengedit izin akun utama yang ada:
- Cari akun utama yang aksesnya ingin Anda edit, lalu klik tombol Edit di sebelah kanan.
- Edit akses akun utama dengan menambahkan peran baru, atau dengan mencabut atau mengubah peran yang ada.
Untuk menyimulasikan perubahan yang diusulkan, klik Uji perubahan.
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.
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 nilaijson
atauyaml
.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
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.
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
, denganproject-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
atauyaml
.
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 izinresourcemanager.projects.list
danresourcemanager.projects.get
untuk projectmy-project
, dan tentu saja tidak lagi memiliki izinresourcemanager.projects.update
untuk projectmy-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.
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, sepertimy-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" ] } ] }
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.
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 berupaprojects
,folders
, atauorganizations
. 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
, denganPROJECT_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, sepertimy-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" } }
-
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 kolomname
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 awalanoperations
. Salin nilai ini dari kolomname
responsreplays.create
. Misalnya:operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8
PROJECT_ID
: Project ID Google Cloud Anda Project ID adalah string alfanumerik, sepertimy-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 } } } } }
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 kolomresponse.replay.name
responsoperations.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, sepertimy-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 izinresourcemanager.projects.list
danresourcemanager.projects.get
untuk projectmy-project
, dan tentu saja tidak akan lagi memiliki izinresourcemanager.projects.update
untuk projectmy-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
atauerror
: Jika replay percobaan akses berhasil, hasilnya akan berisi kolomdiff.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 kolomerror
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
, atauUNKNOWN_INFO_DENIED
. Jika hasilnya adalahUNKNOWN_CONDITIONAL
atauUNKNOWN_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 nilaiUNKNOWN
, 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
, atauUNKNOWN_INFO_DENIED
. Jika hasilnya adalahUNKNOWN_CONDITIONAL
atauUNKNOWN_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 nilaiUNKNOWN
, 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
atauerror
: Jika replay percobaan akses berhasil, hasilnya akan berisi kolomdiff.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 kolomerror
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
, atauUNKNOWN_INFO_DENIED
. Jika hasilnya adalahUNKNOWN_CONDITIONAL
atauUNKNOWN_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 nilaiUNKNOWN
, 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
, atauUNKNOWN_INFO_DENIED
. Jika hasilnya adalahUNKNOWN_CONDITIONAL
atauUNKNOWN_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 nilaiUNKNOWN
, 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 kolomreplayResult.error
. Jika hasil replay berisi kolom ini, hasil replay tidak akan berisi kolomdiff
. - Kolom
replayResult.diff.accessDiff.policy-type.errors
, dengan policy-type adalahbaseline
atausimulated
. Jika upaya pemutaran ulang berhasil, tetapi hasilnya adalahUNKNOWN_INFO_DENIED
atauUNKNOWN_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 "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 kolomreplayResult.error
. Jika hasil replay berisi kolom ini, hasil replay tidak akan berisi kolomdiff
. - Kolom
replayResult.diff.accessDiff.policy-type.errors
, dengan policy-type adalahbaseline
atausimulated
. Jika upaya pemutaran ulang berhasil, tetapi hasilnya adalahUNKNOWN_INFO_DENIED
atauUNKNOWN_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 "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
Klik Terapkan perubahan yang diusulkan.
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, sepertimy-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
atauyaml
.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
- Pelajari cara memecahkan masalah akses untuk akun utama yang ada.
- Pelajari cara menerapkan hak istimewa terendah dengan rekomendasi peran.