Melihat data kustom dari kebijakan OS untuk organisasi Anda

Dokumen ini menjelaskan cara menggunakan VM Manager, Inventaris Aset Cloud, dan BigQuery untuk melihat data kustom dan pesan error penerapan dari kebijakan OS di seluruh organisasi Anda. Gunakan alur kerja ini saat Anda memerlukan pelaporan di seluruh organisasi tentang konfigurasi VM kustom, output skrip, atau kegagalan eksekusi kebijakan yang tidak tercakup dalam status kepatuhan standar.

Untuk mengumpulkan data kustom, Anda mengonfigurasi outputFilePath dalam kebijakan OS, yang merupakan jalur lokal di VM tempat skrip kebijakan menulis teks kustom atau output JSON. VM Manager membaca output dari jalur ini dan menyimpannya dalam laporan penetapan kebijakan OS. Kemudian, Anda dapat mengekspor laporan ini ke BigQuery dengan menggunakan Inventaris Aset Cloud untuk mengkueri hasil di seluruh fleet VM Anda.

Sebelum memulai

  • Siapkan VM Manager.
  • Aktifkan Cloud Asset Inventory API.
  • Buat set data BigQuery untuk menyimpan data yang diekspor.
  • Buat penetapan kebijakan OS yang menghasilkan data kustom.
  • Siapkan autentikasi jika Anda belum melakukannya. Autentikasi memverifikasi identitas Anda untuk mengakses layanan Cloud de Confiance by S3NS dan API. Untuk menjalankan kode atau sampel dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan konsol Cloud de Confiance untuk mengakses layanan Cloud de Confiance by S3NS dan API, Anda tidak perlu menyiapkan autentikasi.

    gcloud

    1. Instal Google Cloud CLI, lalu login ke gcloud CLI dengan identitas gabungan Anda. Setelah login, inisialisasi Google Cloud CLI dengan menjalankan perintah berikut:

      gcloud init
  • Tetapkan region dan zona default.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna mengekspor data resource ke BigQuery dan membuat kueri data kebijakan OS kustom, minta administrator Anda untuk memberi Anda peran IAM berikut di project, folder, atau organisasi:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk mengekspor data resource ke BigQuery dan membuat kueri data kebijakan OS kustom. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengekspor data resource ke BigQuery dan membuat kueri data kebijakan OS kustom:

  • cloudasset.assets.exportOSInventories
  • cloudasset.assets.exportResource
  • bigquery.datasets.get
  • bigquery.tables.create
  • bigquery.tables.update
  • bigquery.tables.get
  • bigquery.jobs.create

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Contoh kebijakan OS

Sebelum dapat mengekspor dan membuat kueri data kustom di BigQuery, Anda harus membuat dan menetapkan kebijakan OS yang mengumpulkan output kustom dari VM Anda. Untuk mengetahui informasi selengkapnya, lihat Membuat penetapan kebijakan OS.

Untuk mengumpulkan data kustom, tentukan kebijakan OS dengan resource exec yang mencakup bagian berikut:

  • validate: Memeriksa apakah VM cocok dengan status yang dipilih. Dalam contoh kebijakan berikut, skrip validate keluar dengan kode 101 untuk menunjukkan bahwa resource tidak cocok dengan status yang dipilih. Kode keluar ini memicu skrip enforce pada setiap evaluasi.
  • enforce: Menentukan kolom outputFilePath, menjalankan perintah kustom, menulis output ke jalur yang ditentukan, dan keluar dengan kode 100 untuk menunjukkan keberhasilan penegakan.

Kebijakan OS yang menghasilkan string

Contoh kebijakan OS berikut menghasilkan string yang berisi versi kernel instance VM:

id: return-kernel-version-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      id: return-kernel-version
      exec:
        validate:
          interpreter: SHELL
          script: exit 101
        enforce:
          interpreter: SHELL
          outputFilePath: policy-output.txt
          script: uname -r > policy-output.txt && exit 100

Kebijakan OS yang menghasilkan file JSON

Contoh kebijakan OS berikut menghasilkan objek JSON yang berisi nama sistem operasi dan versi kernel:

id: return-kernel-version-js-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      id: return-kernel-version-js
      exec:
        validate:
          interpreter: SHELL
          script: exit 101
        enforce:
          interpreter: SHELL
          outputFilePath: policy-output.json
          script: |-
            k=$(uname -r)
            o=$(uname -a)
            echo "{ \"name\": \""$o"\", \"kernel\": \""$k"\" }" > policy-output.json
            exit 100

Mengekspor data VM Manager ke BigQuery

Setelah VM Manager menerapkan kebijakan OS Anda, Inventaris Aset Cloud akan mengumpulkan laporan penetapan kebijakan OS dan inventaris OS yang dihasilkan di seluruh organisasi Anda. Saat Anda mengekspor data ini ke BigQuery dengan tanda --per-asset-type, Inventaris Aset Cloud akan membuat tabel terpisah untuk setiap jenis aset. Tabel <prefix>_osconfig_googleapis_com_OSPolicyAssignmentReport yang dihasilkan menyimpan output kebijakan kustom dan pesan error penegakan Anda.

Untuk mengekspor data inventaris dan resource OS ke BigQuery, ikuti langkah-langkah berikut:

  1. Untuk mengidentifikasi ID organisasi Anda, jalankan perintah berikut:

    gcloud projects get-ancestors PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

  2. Untuk mengekspor data inventaris OS yang dikumpulkan VM Manager dari instance VM Anda, jalankan perintah berikut:

    gcloud asset export \
        --content-type=os-inventory \
        --organization=ORGANIZATION_ID \
        --per-asset-type \
        --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/os"
    

    Ganti placeholder berikut dengan nilai Anda:

    • ORGANIZATION_ID: ID organisasi Anda.
    • BQ_PROJECT_ID: ID project yang berisi set data BigQuery Anda.
    • DATASET_ID: ID set data BigQuery Anda (misalnya, cai_exp).
  3. Untuk mengekspor metadata resource—termasuk laporan penetapan kebijakan OS—ke BigQuery, jalankan perintah berikut:

    gcloud asset export \
        --content-type=resource \
        --organization=ORGANIZATION_ID \
        --per-asset-type \
        --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/res"
    

    Ganti placeholder berikut dengan nilai Anda:

    • ORGANIZATION_ID: ID organisasi Anda.
    • BQ_PROJECT_ID: ID project yang berisi set data BigQuery Anda.
    • DATASET_ID: ID set data BigQuery Anda (misalnya, cai_exp).

    Setelah ekspor selesai, Inventaris Aset Cloud akan membuat tabel res_osconfig_googleapis_com_OSPolicyAssignmentReport di set data BigQuery Anda. Untuk mengetahui informasi selengkapnya, lihat Mengekspor snapshot aset.

Mengkueri data kebijakan OS kustom di BigQuery

Setelah mengekspor data aset ke BigQuery, Anda dapat mengkueri tabel res_osconfig_googleapis_com_OSPolicyAssignmentReport untuk melihat output kustom dan pesan error penerapan dari kebijakan OS Anda.

Untuk menjalankan kueri di BigQuery, ikuti langkah-langkah berikut:

  1. Di konsol Cloud de Confiance , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel salah satu kueri SQL berikut:

    • Output teks kueri:

      Kueri berikut menampilkan versi kernel yang dikumpulkan kebijakan OS untuk setiap instance VM:

      SELECT
        resource.data.instance as instance,
        ANY_VALUE(
          SAFE_CONVERT_BYTES_TO_STRING(FROM_BASE64(REPLACE(REPLACE(
            resource_compliances.execResourceOutput.enforcementOutput
            , '-', '+'), '_', '/')))
          HAVING MAX updateTime) as compliance_results
      FROM
        `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
        UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances,
        UNNEST(resource_compliances.configSteps) as config_steps
      WHERE
        resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-policy"
        AND resource_compliances.osPolicyResourceId = "return-kernel-version"
        AND config_steps.type = "VALIDATION"
      GROUP BY
        instance
      

      Ganti DATASET_ID dengan ID set data BigQuery Anda (misalnya, cai_exp).

      Output kueri mirip dengan tabel berikut:

      instance compliance_results
      ubuntu-1 5.15.0-1036-gcp
      ubuntu-2 5.15.0-1044-gcp
      rhel9-1 5.14.0-162.18.1.el9_1.x86_64
    • Output JSON kueri:

      Kueri berikut mengekstrak kolom name dan kernel dari output JSON dan menampilkannya sebagai kolom terpisah untuk setiap instance VM:

      WITH compliance_history AS (
        SELECT
          updateTime,
          resource.data.instance,
          SAFE_CONVERT_BYTES_TO_STRING(
            FROM_BASE64(
              REPLACE(
                REPLACE(
                  resource_compliances.execResourceOutput.enforcementOutput, '-', '+'
                ), '_', '/'
              )
            )
          ) as compliance_results
        FROM
          `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
          UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances,
          UNNEST(resource_compliances.configSteps) as config_steps
        WHERE
          resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-js-policy"
          AND resource_compliances.osPolicyResourceId = "return-kernel-version-js"
          AND config_steps.type = "VALIDATION"
      ),
      compliance_latest AS (
        SELECT
          instance,
          ANY_VALUE(compliance_results HAVING MAX updateTime) as compliance_results
        FROM compliance_history
        GROUP BY instance
      )
      SELECT
        instance,
        JSON_EXTRACT_SCALAR(compliance_results, "$.name") as os_name,
        JSON_EXTRACT_SCALAR(compliance_results, "$.kernel") as kernel_version
      FROM compliance_latest
      

      Ganti DATASET_ID dengan ID set data BigQuery Anda (misalnya, cai_exp).

      Output kueri mirip dengan tabel berikut:

      instance os_name kernel_version
      ubuntu-1 Linux ubuntu-1 5.15.0-1036-gcp #39-Ubuntu SMP 5.15.0-1036-gcp
      rhel9-1 Linux rhel9-1 5.14.0-162.18.1.el9_1.x86_64 #1 SMP 5.14.0-162.18.1.el9_1.x86_64
  3. Untuk menjalankan kueri, klik Run.

Untuk mengetahui informasi selengkapnya, lihat Menjalankan kueri.

Meninjau pesan error penegakan

Jika resource kebijakan OS gagal divalidasi atau diterapkan, VM Manager akan mencatat pesan error di kolom configSteps.errorMessage pada tabel res_osconfig_googleapis_com_OSPolicyAssignmentReport. Anda dapat membuat kueri kolom ini di BigQuery untuk memecahkan masalah kegagalan eksekusi kebijakan di seluruh organisasi Anda.

Kueri berikut menampilkan pesan error validasi atau penegakan terbaru untuk setiap instance VM:

SELECT
  resource.data.instance AS instance,
  resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId AS policy_id,
  resource_compliances.osPolicyResourceId AS resource_id,
  config_steps.type AS step_type,
  ANY_VALUE(config_steps.errorMessage HAVING MAX updateTime) AS error_message
FROM
  `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
  UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) AS resource_compliances,
  UNNEST(resource_compliances.configSteps) AS config_steps
WHERE
  config_steps.errorMessage IS NOT NULL
  AND config_steps.errorMessage != ""
GROUP BY
  instance,
  policy_id,
  resource_id,
  step_type

Ganti DATASET_ID dengan ID set data BigQuery Anda (misalnya, cai_exp).

Output kueri mirip dengan tabel berikut:

instance policy_id resource_id step_type error_message
ubuntu-2 return-kernel-version-policy return-kernel-version DESIRED_STATE_ENFORCEMENT Error running enforce script: exit status 1

Langkah berikutnya

Untuk mengetahui informasi selengkapnya tentang cara mengelola kebijakan OS dan menganalisis data kepatuhan, lihat referensi berikut: