Halaman ini menjelaskan cara menganalisis kebijakan Identity and Access Management (IAM) secara asinkron dan menulis hasilnya ke BigQuery. Prosesnya mirip dengan menganalisis kebijakan IAM, kecuali hasil analisis ditulis ke tabel BigQuery.
Sebelum memulai
Enable the Cloud Asset API.
Anda harus mengaktifkan API di project yang akan digunakan untuk mengirim kueri. Resource ini tidak harus sama dengan resource yang Anda gunakan untuk cakupan kueri.
Peran dan izin yang diperlukan
Peran dan izin berikut diperlukan untuk menjalankan analisis kebijakan dan mengekspor hasilnya ke BigQuery.
Peran IAM yang diperlukan
Untuk mendapatkan izin yang diperlukan guna menganalisis kebijakan dan mengekspor hasilnya ke BigQuery, minta administrator untuk memberi Anda peran IAM berikut pada project, folder, atau organisasi yang akan menjadi cakupan kueri Anda:
-
BigQuery Data Editor (
roles/bigquery.dataEditor
) -
Cloud Asset Viewer (
roles/cloudasset.viewer
) -
Untuk menganalisis kebijakan dengan peran IAM kustom:
Role Viewer (
roles/iam.roleViewer
) -
Untuk menggunakan Google Cloud CLI guna menganalisis kebijakan:
Konsumen Penggunaan Layanan (
roles/serviceusage.serviceUsageConsumer
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk menganalisis kebijakan dan mengekspor hasilnya ke BigQuery. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk menganalisis kebijakan dan mengekspor hasilnya ke BigQuery:
-
bigquery.datasets.create
-
bigquery.jobs.create
-
bigquery.tables.create
-
bigquery.tables.get
-
bigquery.tables.updateData
-
bigquery.tables.update
-
cloudasset.assets.analyzeIamPolicy
-
cloudasset.assets.searchAllResources
-
cloudasset.assets.searchAllIamPolicies
-
Untuk menganalisis kebijakan dengan peran IAM khusus:
iam.roles.get
-
Untuk menggunakan Google Cloud CLI guna menganalisis kebijakan:
serviceusage.services.use
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Izin Google Workspace yang diperlukan
Jika ingin melihat apakah akun utama memiliki peran atau izin tertentu sebagai hasil
dari keanggotaannya di grup Google Workspace, Anda memerlukan izin Google Workspace groups.read
. Izin ini terdapat dalam peran Admin
Pembaca Grup, dan dalam peran yang lebih canggih seperti peran Admin Grup atau Admin
Super. Lihat Menetapkan peran admin tertentu untuk mengetahui informasi
selengkapnya.
Menganalisis kebijakan dan mengekspor hasil
Konsol
Di konsol Google Cloud, buka halaman Policy Analyzer.
Di bagian Analisis kebijakan, temukan template kueri yang ingin Anda gunakan, lalu klik Buat kueri. Jika Anda ingin membuat kueri kustom, klik Buat kueri kustom.
Di kolom Select query scope, pilih project, folder, atau organisasi yang cakupan kuerinya ingin Anda tentukan. Penganalisis Kebijakan akan menganalisis akses untuk project, folder, atau organisasi tersebut, serta resource apa pun dalam project, folder, atau organisasi tersebut.
Pastikan parameter kueri Anda ditetapkan:
- Jika Anda menggunakan template kueri, konfirmasi parameter kueri yang telah diisi sebelumnya.
- Jika Anda membuat kueri kustom, tetapkan resource, akun utama, peran, dan izin yang ingin Anda buat kuerinya.
Untuk mengetahui informasi selengkapnya tentang jenis kueri yang dapat Anda buat, lihat Menganalisis kebijakan IAM.
Di panel yang berlabel dengan nama kueri, klik Analyze > Export result only. Panel Ekspor hasil akan terbuka.
Di bagian Set export destination, masukkan informasi berikut:
- Project: Project tempat set data BigQuery Anda berada.
- Set data: Set data BigQuery tempat Anda ingin mengekspor hasil.
- Tabel: Awalan tabel BigQuery tempat hasil analisis akan ditulis. Jika tabel dengan awalan yang ditentukan tidak ada, BigQuery akan membuat tabel baru.
Klik Lanjutkan.
Opsional: Di bagian Configure additional settings, pilih opsi yang Anda inginkan:
- Mempartisi: Apakah akan mempartisi tabel. Untuk mempelajari tabel berpartisi lebih lanjut, lihat Pengantar tabel berpartisi.
- Write preference: Menentukan tindakan yang terjadi jika tabel atau partisi tujuan sudah ada. Secara default, jika tabel atau partisi sudah ada, BigQuery akan menambahkan data ke tabel atau partisi terbaru.
Klik Ekspor.
Policy Analyzer menjalankan kueri Anda dan mengekspor hasilnya ke tabel yang ditentukan.
gcloud
Metode AnalyzeIamPolicyLongrunning
memungkinkan Anda mengeluarkan permintaan analisis dan mendapatkan hasil di tujuan BigQuery yang ditentukan.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
RESOURCE_TYPE
: Jenis resource yang ingin Anda cakup dalam penelusuran. Hanya kebijakan izin IAM yang dilampirkan ke resource ini dan turunannya yang akan dianalisis. Gunakan nilaiproject
,folder
, atauorganization
.RESOURCE_ID
: ID project, folder, atau organisasi Google Cloud yang ingin Anda jadikan cakupan penelusuran. Hanya kebijakan izin IAM yang dilampirkan ke resource ini dan turunannya yang akan dianalisis. Project ID berupa string alfanumerik, sepertimy-project
. Folder dan ID organisasi berupa numerik, seperti123456789012
.PRINCIPAL
: Akun utama yang aksesnya ingin Anda analisis, dalam bentukPRINCIPAL_TYPE:ID
—misalnya,user:my-user@example.com
. Untuk mengetahui daftar lengkap jenis akun utama, lihat ID utama.PERMISSIONS
: Daftar izin yang dipisahkan koma yang ingin Anda periksa—misalnya,compute.instances.get,compute.instances.start
. Jika Anda mencantumkan beberapa izin, Policy Analyzer akan memeriksa izin yang tercantum.DATASET
: Set data BigQuery dalam bentukprojects/PROJECT_ID/datasets/DATASET_ID
, denganPROJECT_ID
adalah ID alfanumerik project Google Cloud Anda danDATASET_ID
adalah ID set data Anda.TABLE_PREFIX
: Awalan tabel BigQuery tempat hasil analisis akan ditulis. Jika tabel dengan awalan yang ditentukan tidak ada, BigQuery akan membuat tabel baru.PARTITION_KEY
: Opsional. Kunci partisi untuk tabel yang dipartisi BigQuery. Penganalisis Kebijakan hanya mendukung kunci partisiREQUEST_TIME
.WRITE_DISPOSITION
: Opsional. Menentukan tindakan yang terjadi jika tabel atau partisi tujuan sudah ada. Untuk mengetahui daftar kemungkinan nilai, lihatwriteDisposition
. Secara default, jika tabel atau partisi sudah ada, BigQuery akan menambahkan data ke tabel atau partisi terbaru.
Jalankan perintah gcloud asset analyze-iam-policy-longrunning:
Linux, macOS, atau Cloud Shell
gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID \ --full-resource-name=FULL_RESOURCE_NAME \ --identity=PRINCIPAL \ --permissions='PERMISSIONS' \ --bigquery-dataset=DATASET \ --bigquery-table-prefix=TABLE_PREFIX \ --bigquery-partition-key=PARTITION_KEY \ --bigquery-write-disposition=WRITE_DISPOSITION
Windows (PowerShell)
gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ` --full-resource-name=FULL_RESOURCE_NAME ` --identity=PRINCIPAL ` --permissions='PERMISSIONS' ` --bigquery-dataset=DATASET ` --bigquery-table-prefix=TABLE_PREFIX ` --bigquery-partition-key=PARTITION_KEY ` --bigquery-write-disposition=WRITE_DISPOSITION
Windows (cmd.exe)
gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ^ --full-resource-name=FULL_RESOURCE_NAME ^ --identity=PRINCIPAL ^ --permissions='PERMISSIONS' ^ --bigquery-dataset=DATASET ^ --bigquery-table-prefix=TABLE_PREFIX ^ --bigquery-partition-key=PARTITION_KEY ^ --bigquery-write-disposition=WRITE_DISPOSITION
Anda akan melihat respons seperti berikut:
Analyze IAM Policy in progress. Use [gcloud asset operations describe projects/my-project/operations/AnalyzeIamPolicyLongrunning/1195028485971902504711950280359719028666] to check the status of the operation.
REST
Metode AnalyzeIamPolicyLongrunning
memungkinkan Anda mengeluarkan permintaan analisis dan mendapatkan hasil di tujuan BigQuery yang ditentukan.
Untuk menganalisis kebijakan izin IAM dan mengekspor hasilnya ke BigQuery, gunakan metode analyzeIamPolicyLongrunning
Cloud Asset Inventory API.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
RESOURCE_TYPE
: Jenis resource yang ingin Anda cakup dalam penelusuran. Hanya kebijakan izin IAM yang dilampirkan ke resource ini dan turunannya yang akan dianalisis. Gunakan nilaiprojects
,folders
, atauorganizations
.RESOURCE_ID
: ID project, folder, atau organisasi Google Cloud yang ingin Anda jadikan cakupan penelusuran. Hanya kebijakan izin IAM yang dilampirkan ke resource ini dan turunannya yang akan dianalisis. Project ID berupa string alfanumerik, sepertimy-project
. Folder dan ID organisasi berupa numerik, seperti123456789012
.-
FULL_RESOURCE_NAME
: Opsional. Nama resource lengkap dari resource yang aksesnya ingin Anda analisis. Untuk daftar format nama lengkap resource, lihat Format nama resource. PRINCIPAL
: Opsional. Akun utama yang aksesnya ingin Anda analisis, dalam bentukPRINCIPAL_TYPE:ID
—misalnya,user:my-user@example.com
. Untuk mengetahui daftar lengkap jenis akun utama, lihat ID utama.PERMISSION_1
,PERMISSION_2
...PERMISSION_N
: Opsional. Izin yang ingin Anda periksa—misalnya,compute.instances.get
. Jika Anda mencantumkan beberapa izin, Penganalisis Kebijakan akan memeriksa izin yang tercantum.DATASET
: Set data BigQuery dalam bentukprojects/PROJECT_ID/datasets/DATASET_ID
, denganPROJECT_ID
adalah ID alfanumerik project Google Cloud Anda danDATASET_ID
adalah ID set data Anda.TABLE_PREFIX
: Awalan tabel BigQuery tempat hasil analisis akan ditulis. Jika tabel dengan awalan yang ditentukan tidak ada, BigQuery akan membuat tabel baru.PARTITION_KEY
: Opsional. Kunci partisi untuk tabel yang dipartisi BigQuery. Penganalisis Kebijakan hanya mendukung kunci partisiREQUEST_TIME
.WRITE_DISPOSITION
: Opsional. Menentukan tindakan yang terjadi jika tabel atau partisi tujuan sudah ada. Untuk mengetahui daftar kemungkinan nilai, lihatwriteDisposition
. Secara default, jika tabel atau partisi sudah ada, BigQuery akan menambahkan data ke tabel atau partisi terbaru.
Metode HTTP dan URL:
POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicyLongrunning
Meminta isi JSON:
{ "analysisQuery": { "resourceSelector": { "fullResourceName": "FULL_RESOURCE_NAME" }, "identitySelector": { "identity": "PRINCIPAL" }, "accessSelector": { "permissions": [ "PERMISSION_1", "PERMISSION_2", "PERMISSION_N" ] } }, "outputConfig": { "bigqueryDestination": { "dataset": "DATASET", "tablePrefix": "TABLE_PREFIX", "partitionKey": "PARTITION_KEY", "writeDisposition": "WRITE_DISPOSITION" } } }
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/my-project/operations/AnalyzeIamPolicyLongrunning/1206385342502762515812063858425027606003", "metadata": { "@type": "type.googleapis.com/google.cloud.asset.v1.AnalyzeIamPolicyLongrunningMetadata", "createTime": "2022-04-12T21:31:10.753173929Z" } }
Melihat hasil analisis kebijakan IAM
Untuk melihat hasil analisis kebijakan IAM:
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
Untuk menampilkan tabel dan tampilan dalam set data, buka panel navigasi. Di bagian Explorer, pilih project Anda untuk meluaskannya, lalu pilih set data.
Dari daftar, pilih tabel dengan awalan Anda. Tabel dengan akhiran
analysis
berisi kueri dan metadata (misalnya, nama operasi, waktu permintaan, dan error non-kritis). Tabel dengan akhirananalysis_result
adalah hasil yang mencantumkan tuple{identity, role(s)/permission(s), resource}
bersama dengan kebijakan IAM yang menghasilkan tuple tersebut.Untuk melihat contoh set data, pilih tab Pratinjau.
API
Untuk menjelajahi data tabel, panggil
tabledata.list
.
Di parameter tableId
, tentukan nama tabel Anda.
Anda dapat mengonfigurasi parameter opsional berikut untuk mengontrol output.
maxResults
adalah jumlah hasil maksimum yang akan ditampilkan.selectedFields
adalah daftar kolom yang dipisahkan koma yang akan ditampilkan. Jika tidak ditentukan, semua kolom akan ditampilkan.startIndex
adalah indeks berbasis nol dari baris awal yang akan dibaca.
Nilai akan ditampilkan dan digabungkan dalam objek JSON yang harus Anda uraikan, seperti dijelaskan
dalam dokumentasi referensi
tabledata.list
.
Membuat kueri BigQuery
Bagian ini memberikan contoh kueri SQL untuk menunjukkan cara menggunakan tabel BigQuery yang ditulis oleh AnalyzeIamPolicyLongrunning
. Untuk informasi
selengkapnya tentang sintaksis BigQuery, lihat
Sintaksis Kueri SQL Standar.
OP_ID diperlukan untuk sebagian besar kueri, Anda bisa mendapatkannya dari respons AnalyzeIamPolicyLongrunning
. Misalnya, di gcloud, Anda akan menemukan OP_ID adalah 123456
di
"Gunakan [gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456]
untuk memeriksa status operasi".
Mencantumkan Operasi
Tabel Anda dapat menyimpan hasil beberapa operasi AnalyzeIamPolicyLongrunning
. Anda dapat menggunakan kueri berikut untuk mencantumkan semuanya:
SELECT DISTINCT requestTime, opName FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis` ORDER BY 1 DESC ;
Mencantumkan Analisis dalam satu Operasi
Dalam satu operasi AnalyzeIamPolicyLongrunning
, mungkin ada beberapa data analisis yang dihasilkan. Misalnya, saat Anda mengaktifkan
opsi analyze_service_account_impersonation
dalam permintaan, hasilnya dapat
berisi satu analisis utama (dengan analysisId 0) dan beberapa analisis peniruan identitas akun layanan.
Anda dapat menggunakan kueri berikut untuk mengetahui semua analisis dengan memberikan nama operasi.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT analysisId, requestTime, TO_JSON_STRING(analysis.analysisQuery, true) as analysisQuery, analysis.fullyExplored, TO_JSON_STRING(analysis.nonCriticalErrors, true) as nonCriticalErrors FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis` WHERE opName=_opName ORDER BY 1 ;
Mencantumkan ACE(Entri Kontrol Akses) dalam satu Analisis
ACE adalah Access Control Entry {identity, role(s)/permission(s), resource}
.
Anda dapat menggunakan kueri berikut untuk mencantumkan ACE dalam satu analisis.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT DISTINCT ids.name AS identity, resources.fullResourceName AS resource, accesses.role AS role, accesses.permission AS permission FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`, UNNEST(analysisResult.identityList.identities) AS ids, UNNEST(analysisResult.accessControlLists) AS acls, UNNEST(acls.accesses) AS accesses, UNNEST(acls.resources) AS resources WHERE opName=_opName AND analysisId = 0 ORDER BY 1,2,3,4 ;
Mencantumkan ACE(Entri Kontrol Akses) dengan binding kebijakan IAM dalam satu Analisis
Dalam kueri ini, kita mencantumkan ACE dan binding kebijakan IAM yang menghasilkan ACE ini untuk satu analisis.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT ids.name AS identity, resources.fullResourceName AS resource, accesses.role AS role, accesses.permission AS permission, analysisResult.attachedResourceFullName as iam_policy_attached_resource, TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`, UNNEST(analysisResult.identityList.identities) AS ids, UNNEST(analysisResult.accessControlLists) AS acls, UNNEST(acls.accesses) AS accesses, UNNEST(acls.resources) AS resources WHERE opName=_opName AND analysisId = 0 ORDER BY 1,2,3,4 ;
Mencantumkan binding kebijakan IAM dalam satu Analisis
Dalam kueri ini, kita mencantumkan binding kebijakan IAM yang muncul dalam satu analisis.
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT DISTINCT analysisResult.attachedResourceFullName as iam_policy_attached_resource, TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result` WHERE opName=_opName AND analysisId = 0 ORDER BY 1, 2 ;
Mencantumkan binding kebijakan IAM dengan ACE(Access Control Entry) dalam satu Analisis
Dalam kueri ini, kita mencantumkan binding kebijakan IAM dengan ACE turunannya dalam satu analisis
DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID"; SELECT analysisResult.attachedResourceFullName as iam_policy_attached_resource, TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding, TO_JSON_STRING(analysisResult.identityList.identities, true) as identities, TO_JSON_STRING(acls.accesses, true) as accesses, TO_JSON_STRING(acls.resources, true) as resources FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`, UNNEST(analysisResult.accessControlLists) AS acls WHERE opName=_opName AND analysisId = 0 ORDER BY 1,2 ;