Menulis analisis kebijakan ke BigQuery

Halaman ini menjelaskan cara menganalisis kebijakan Identity and Access Management (IAM) secara asinkron dan menulis hasilnya ke BigQuery. Proses ini mirip dengan menganalisis kebijakan IAM, tetapi hasil analisis ditulis ke tabel BigQuery.

Sebelum memulai

Aktifkan Cloud Asset API.

Mengaktifkan API

Anda harus mengaktifkan API di project atau organisasi yang akan digunakan untuk mengirim kueri. Ini tidak harus berupa sumber daya yang sama dengan tempat Anda menentukan 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 untuk menganalisis kebijakan dan mengekspor hasilnya ke BigQuery, minta administrator Anda untuk memberi Anda peran IAM berikut di project, folder, atau organisasi yang menjadi cakupan kueri Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Peran yang telah ditetapkan ini berisi izin yang diperlukan untuk menganalisis kebijakan dan mengekspor hasilnya ke BigQuery. Untuk melihat izin yang benar-benar diperlukan, perluas 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 kustom: iam.roles.get
  • Untuk menggunakan Google Cloud CLI guna menganalisis kebijakan: serviceusage.services.use

Anda mung juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaanlainnya.

Izin Google Workspace yang diperlukan

Jika Anda ingin melihat apakah akun utama memiliki peran atau izin tertentu karena keanggotaan mereka di grup Google Workspace, Anda memerlukan izin Google Workspace groups.read. Izin ini terdapat dalam peran Groups Reader Admin, dan dalam peran yang lebih penting seperti peran Grup Admin 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 Penganalisis Kebijakan.

    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 ingin Anda tetapkan cakupan kuerinya. Policy Analyzer 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 dikueri.

    Untuk mengetahui informasi selengkapnya tentang jenis kueri yang dapat dibuat, lihat Menganalisis kebijakan IAM.

  5. Di panel yang diberi label dengan nama kueri, klik Analyze > Export full result only. Panel Export full results akan terbuka.

  6. Di bagian Tetapkan tujuan ekspor, masukkan informasi berikut:

    • Project: Project tempat set data BigQuery Anda berada.
    • Set data: Set data BigQuery tujuan ekspor hasil.
    • Tabel: Awalan tabel BigQuery yang akan menjadi tempat penulisan hasil analisis. 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:

    • Partisi: Apakah akan mempartisi tabel. Untuk mempelajari tabel yang dipartisi lebih lanjut, lihat Pengantar tabel yang dipartisi.
    • Preferensi penulisan: 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.

Penganalisis Kebijakan menjalankan kueri Anda dan mengekspor hasil lengkapnya 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 tetapkan cakupan penelusurannya. Hanya IAM yang mengizinkan kebijakan yang disertakan pada 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 IAM yang mengizinkan kebijakan yang dilampirkan ke resource ini dan ke turunannya yang akan dianalisis. ID project adalah string alfanumerik, seperti my-project. ID folder dan 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 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, Penganalisis Kebijakan akan memeriksa apakah ada izin yang tercantum.
  • DATASET: Set data BigQuery dalam bentuk projects/PROJECT_ID/datasets/DATASET_ID, dengan PROJECT_ID adalah ID alfanumerik project Google Cloud 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 berpartisi BigQuery. Penganalisis Kebijakan hanya mendukung kunci partisi REQUEST_TIME.
  • WRITE_DISPOSITION: Opsional. Menentukan tindakan yang terjadi jika tabel atau partisi tujuan sudah ada. Untuk 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 tetapkan cakupan penelusurannya. Hanya IAM yang mengizinkan kebijakan yang disertakan pada 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 IAM yang mengizinkan kebijakan yang dilampirkan ke resource ini dan ke turunannya yang akan dianalisis. ID project adalah string alfanumerik, seperti my-project. ID folder dan organisasi berupa numerik, seperti 123456789012.
  • FULL_RESOURCE_NAME: Opsional. Nama lengkap resource resource yang aksesnya ingin Anda analisis. Untuk daftar format nama resource lengkap, 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 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 apakah ada izin yang tercantum.
  • DATASET: Set data BigQuery dalam bentuk projects/PROJECT_ID/datasets/DATASET_ID, dengan PROJECT_ID adalah ID alfanumerik project Google Cloud 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 berpartisi BigQuery. Penganalisis Kebijakan hanya mendukung kunci partisi REQUEST_TIME.
  • WRITE_DISPOSITION: Opsional. Menentukan tindakan yang terjadi jika tabel atau partisi tujuan sudah ada. Untuk 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 Anda:

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 tidak 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 kumpulan data, pilih tab Preview.

API

Untuk menjelajahi data tabel Anda, panggil tabledata.list. Di parameter tableId, tentukan nama tabel Anda.

Anda dapat mengonfigurasi parameter opsional berikut untuk mengontrol output.

  • maxResults adalah jumlah hasil maksimum untuk ditampilkan.
  • selectedFields adalah daftar kolom yang dipisahkan koma untuk 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 menyediakan contoh kueri SQL untuk menunjukkan cara menggunakan tabel BigQuery yang ditulis oleh AnalyzeIamPolicyLongrunning. Untuk mengetahui informasi selengkapnya tentang sintaksis BigQuery, lihat Sintaksis Kueri SQL Standar.

OP_ID diperlukan untuk sebagian besar kueri, Anda bisa mendapatkannya dari respons AnalyzeIamPolicyLongrunning. Misalnya, dalam 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 dari 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 akan ada beberapa data analisis yang dibuat. 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(Access Control Entry) dalam satu Analisis

ACE adalah {identity, role(s)/permission(s), resource} Entri Kontrol Akses. 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(Access Control Entry) dengan binding kebijakan IAM dalam satu Analisis

Dalam kueri ini, kami 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
;