Mengumpulkan log audit CircleCI

Didukung di:

Parser ini mengekstrak kolom dari log audit CircleCI dalam format CSV dan JSON, yang mengubahnya menjadi Unified Data Model (UDM). Fungsi ini menangani kedua format, melakukan transformasi dan pengayaan data, serta memetakan kolom yang diekstrak ke kolom UDM yang sesuai dalam objek peristiwa. Fitur ini berfokus pada tindakan pengguna, akses resource, dan peristiwa pembaruan, serta mengategorikan dan mengisi kolom UDM yang relevan seperti prinsipal, target, jaringan, dan metadata.

Sebelum memulai

  • Pastikan Anda memiliki instance Google Chronicle.
  • Pastikan Anda memiliki akses dengan hak istimewa ke CircleCI.

Mengonfigurasi feed di Google SecOps untuk menyerap log CircleCI

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Log CircleCI).
  4. Pilih Webhook sebagai Jenis sumber.
  5. Pilih CircleCI sebagai Log type.
  6. Klik Berikutnya.
  7. Opsional: Tentukan nilai untuk parameter input berikut:
    • Pemisah pemisahan: pembatas yang digunakan untuk memisahkan baris log, seperti \n.
    • Namespace aset: namespace aset.
    • Label penyerapan: label yang diterapkan ke peristiwa dari feed ini.
  8. Klik Berikutnya.
  9. Tinjau konfigurasi feed di layar Finalize, lalu klik Submit.
  10. Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.
  11. Salin dan simpan kunci rahasia. Anda tidak dapat melihat kunci rahasia ini lagi. Jika perlu, Anda dapat membuat ulang kunci rahasia baru, tetapi tindakan ini akan membuat kunci rahasia sebelumnya tidak berlaku lagi.
  12. Dari tab Detail, salin URL endpoint feed dari kolom Endpoint Information. Anda perlu menentukan URL endpoint ini di aplikasi klien.
  13. Klik Done.

Membuat kunci API untuk feed webhook

  1. Buka Konsol Google Cloud > Kredensial.

    Buka Kredensial

  2. Klik Create credentials, lalu pilih API key.

  3. Batasi akses kunci API ke Google Security Operations API.

Menentukan URL endpoint

  1. Di aplikasi klien, tentukan URL endpoint HTTPS yang diberikan di feed webhook.
  2. Aktifkan autentikasi dengan menentukan kunci API dan kunci secret sebagai bagian dari header kustom dalam format berikut:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Rekomendasi: Tentukan kunci API sebagai header, bukan menentukannya di URL.

  3. Jika klien webhook Anda tidak mendukung header kustom, Anda dapat menentukan kunci API dan kunci rahasia menggunakan parameter kueri dalam format berikut:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Ganti kode berikut:

    • ENDPOINT_URL: URL endpoint feed.
    • API_KEY: kunci API untuk mengautentikasi ke Google SecOps.
    • SECRET: kunci rahasia yang Anda buat untuk mengautentikasi feed.

Mengonfigurasi webhook di CircleCI

  1. Login ke antarmuka web CircleCI.
  2. Pilih project tempat Anda ingin menyerap log.
  3. Klik Project Settings.
  4. Pilih Webhooks.
  5. Klik Tambahkan Webhook.
  6. Tentukan nilai untuk parameter input berikut:

    • Nama Webhook: berikan nama deskriptif (misalnya, Google SecOps).
    • Endpoint URL: masukkan <ENDPOINT_URL> endpoint Google SecOps API.
    • Peristiwa: Pilih peristiwa CircleCI yang akan memicu webhook (misalnya, pilih workflow-completed untuk mengirim data setelah alur kerja selesai).
  7. Klik Simpan untuk membuat webhook.

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
account.id read_only_udm.about.resource.attribute.labels.value Nilai account.id dari log mentah ditetapkan ke kolom UDM read_only_udm.about.resource.attribute.labels.value dengan kunci yang sesuai adalah account_id.
action read_only_udm.metadata.product_event_type Nilai action dari log mentah ditetapkan ke kolom UDM read_only_udm.metadata.product_event_type.
actor.id read_only_udm.principal.user.product_object_id Nilai actor.id dari log mentah ditetapkan ke kolom UDM read_only_udm.principal.user.product_object_id.
actor.name read_only_udm.principal.user.userid Awalan "github: " dihapus dari kolom actor.name dalam log mentah. Nilai yang tersisa ditetapkan ke kolom UDM read_only_udm.principal.user.userid. Jika actor.name ada dalam log mentah, nilai USER_RESOURCE_UPDATE_CONTENT ditetapkan ke read_only_udm.metadata.event_type. Jika tidak, USER_RESOURCE_ACCESS akan ditetapkan.
id read_only_udm.metadata.product_log_id Nilai id dari log mentah ditetapkan ke kolom UDM read_only_udm.metadata.product_log_id. Parser menetapkan read_only_udm.metadata.log_type ke CIRCLECI. Parser menetapkan read_only_udm.metadata.product_name ke CIRCLECI. Parser menetapkan read_only_udm.metadata.vendor_name ke CIRCLECI.
occurred_at read_only_udm.metadata.event_timestamp Nilai occurred_at dari log mentah diuraikan sebagai stempel waktu dan ditetapkan ke kolom UDM read_only_udm.metadata.event_timestamp.
organization.name read_only_udm.target.administrative_domain Awalan "github: " dihapus dari kolom organization.name dalam log mentah. Nilai lainnya ditetapkan ke kolom UDM read_only_udm.target.administrative_domain.
payload.job.id read_only_udm.about.resource.attribute.labels.value Nilai payload.job.id dari log mentah ditetapkan ke kolom UDM read_only_udm.about.resource.attribute.labels.value dengan kunci yang sesuai adalah job_id.
payload.job.job_name read_only_udm.about.resource.attribute.labels.value Nilai payload.job.job_name dari log mentah ditetapkan ke kolom UDM read_only_udm.about.resource.attribute.labels.value dengan kunci yang sesuai adalah job_name.
payload.job.job_status read_only_udm.about.resource.attribute.labels.value Nilai payload.job.job_status dari log mentah ditetapkan ke kolom UDM read_only_udm.about.resource.attribute.labels.value dengan kunci yang sesuai adalah job_status.
payload.workflow.id read_only_udm.about.resource.attribute.labels.value Nilai payload.workflow.id dari log mentah ditetapkan ke kolom UDM read_only_udm.about.resource.attribute.labels.value dengan kunci yang sesuai adalah workflow_id.
request.id read_only_udm.network.session_id Nilai request.id dari log mentah ditetapkan ke kolom UDM read_only_udm.network.session_id.
scope.id read_only_udm.about.resource.attribute.labels.value Nilai scope.id dari log mentah ditetapkan ke kolom UDM read_only_udm.about.resource.attribute.labels.value dengan kunci yang sesuai adalah scope_id. Parser awalnya menetapkan sec_action ke BLOCK. Jika kolom success dalam log mentah bernilai benar, sec_action akan diubah menjadi ALLOW. Nilai sec_action kemudian ditetapkan ke kolom UDM read_only_udm.security_result.action.
target.id read_only_udm.target.resource.product_object_id Nilai target.id dari log mentah ditetapkan ke kolom UDM read_only_udm.target.resource.product_object_id.
target.name read_only_udm.target.resource.name Awalan "github: " dihapus dari kolom target.name dalam log mentah. Nilai yang tersisa ditetapkan ke kolom UDM read_only_udm.target.resource.name. Parser menetapkan read_only_udm.target.resource.resource_type ke STORAGE_OBJECT.
version read_only_udm.target.resource.attribute.labels.value Nilai version dari log mentah dikonversi menjadi string dan ditetapkan ke kolom UDM read_only_udm.target.resource.attribute.labels.value dengan kunci yang sesuai adalah version.

Perubahan

09-03-2023

  • Parser yang baru dibuat.