Menulis analisis kebijakan ke BigQuery

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.

Enable the 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:

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

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

    Buka Penganalisis Kebijakan

  2. 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.

  3. 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.

  4. 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.

  5. Di panel yang berlabel dengan nama kueri, klik Analyze > Export result only. Panel Ekspor hasil akan terbuka.

  6. 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.
  7. Klik Lanjutkan.

  8. 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.
  9. 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 nilai project, folder, atau organization.
  • 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, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
  • PRINCIPAL: Akun utama yang aksesnya ingin Anda analisis, dalam bentuk PRINCIPAL_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 bentuk projects/PROJECT_ID/datasets/DATASET_ID, dengan PROJECT_ID adalah ID alfanumerik project Google Cloud Anda dan DATASET_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 partisi REQUEST_TIME.
  • WRITE_DISPOSITION: Opsional. Menentukan tindakan yang terjadi jika tabel atau partisi tujuan sudah ada. Untuk mengetahui daftar kemungkinan nilai, lihat writeDisposition. 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 nilai projects, folders, atau organizations.
  • 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, seperti my-project. Folder dan ID organisasi berupa numerik, seperti 123456789012.
  • 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 bentuk PRINCIPAL_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 bentuk projects/PROJECT_ID/datasets/DATASET_ID, dengan PROJECT_ID adalah ID alfanumerik project Google Cloud Anda dan DATASET_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 partisi REQUEST_TIME.
  • WRITE_DISPOSITION: Opsional. Menentukan tindakan yang terjadi jika tabel atau partisi tujuan sudah ada. Untuk mengetahui daftar kemungkinan nilai, lihat writeDisposition. 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

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Untuk menampilkan tabel dan tampilan dalam set data, buka panel navigasi. Di bagian Explorer, pilih project Anda untuk meluaskannya, lalu pilih set data.

  3. 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 akhiran analysis_result adalah hasil yang mencantumkan tuple {identity, role(s)/permission(s), resource} bersama dengan kebijakan IAM yang menghasilkan tuple tersebut.

  4. 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
;