Mengumpulkan log GitLab

Didukung di:

Ringkasan

Parser ini mengekstrak kolom dari log JSON GitLab, menormalisasinya ke dalam Model Data Terpadu (UDM), dan memperkaya data dengan konteks tambahan. Fitur ini menangani berbagai jenis peristiwa GitLab, yang berfokus pada tindakan pengguna, akses resource, dan hasil keamanan, sekaligus memproses informasi terkait jaringan dan aplikasi. Parser juga melakukan logika berdasarkan peran dan tindakan dalam GitLab, mengategorikan peristiwa, dan menetapkan tingkat keparahan yang sesuai.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps.
  • Akses istimewa ke GitLab.

Menyiapkan feed

Ada dua titik entri berbeda untuk menyiapkan feed di platform Google SecOps:

  • Setelan SIEM > Feed
  • Hub Konten > Paket Konten

Menyiapkan feed dari Setelan SIEM > Feed

Untuk mengonfigurasi feed, ikuti langkah-langkah berikut:

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Di halaman berikutnya, klik Konfigurasi satu feed.
  4. Di kolom Feed name, masukkan nama untuk feed (misalnya, GitLab Logs).
  5. Pilih Webhook sebagai Jenis sumber.
  6. Pilih Gitlab sebagai Jenis log.
  7. Klik Berikutnya.
  8. Opsional: tentukan nilai untuk parameter input berikut:
    • Pemisah pemisahan: pemisah yang digunakan untuk memisahkan baris log, seperti \n.
    • Namespace aset: namespace aset.
    • Label penyerapan: label yang diterapkan ke peristiwa dari feed ini.
  9. Klik Berikutnya.
  10. Tinjau konfigurasi feed di layar Selesaikan, lalu klik Kirim.
  11. Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.
  12. 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.
  13. Di tab Detail, salin URL endpoint feed dari kolom Informasi Endpoint. Anda perlu menentukan URL endpoint ini di aplikasi klien Anda.
  14. Klik Selesai.

Menyiapkan feed dari Hub Konten

Tentukan nilai untuk kolom berikut:

  • Pemisah pemisahan: pemisah yang digunakan untuk memisahkan baris log, seperti \n.

Opsi lanjutan

  • Nama Feed: Nilai yang telah diisi otomatis yang mengidentifikasi feed.
  • Jenis Sumber: Metode yang digunakan untuk mengumpulkan log ke Google SecOps.
  • Namespace Aset: Namespace yang terkait dengan feed.
  • Label Penyerapan: Label yang diterapkan ke semua peristiwa dari feed ini.

  • Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.

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

  • Di tab Detail, salin URL endpoint feed dari kolom Informasi Endpoint. Anda perlu menentukan URL endpoint ini di aplikasi klien Anda.

Membuat kunci API untuk feed webhook

  1. Buka konsolGoogle Cloud > Kredensial.

    Buka Kredensial

  2. Klik Create credentials, lalu pilih API key.

  3. Membatasi akses kunci API ke Chronicle API.

Tentukan URL endpoint

  1. Di aplikasi klien Anda, tentukan URL endpoint HTTPS yang disediakan di feed webhook.
  2. Aktifkan autentikasi dengan menentukan kunci API dan kunci rahasia 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. 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 Security Operations.
  • SECRET: kunci rahasia yang Anda buat untuk mengautentikasi feed.

Mengonfigurasi webhook di GitLab untuk Google SecOps

  1. Buka browser web Anda, lalu buka project GitLab yang ingin Anda konfigurasi webhook-nya.
  2. Di project Anda, buka Settings > Webhooks.
  3. Klik Tambahkan webhook baru.
  4. Di kolom URL, tempelkan URL Endpoint SecOps Google.
  5. Klik Tambahkan header kustom.
  6. Ketik X-Webhook-Access-Key di kolom Header Name.
  7. Untuk kolom Header Value, salin Kunci Secret yang dibuat selama konfigurasi Feed Google SecOps.
  8. Klik Tambahkan header kustom.
  9. Ketik X-goog-api-key di kolom Header Name.
  10. Untuk kolom Header Value, salin Kunci API yang dihasilkan selama konfigurasi Feed Google SecOps. Catatan: Untuk meningkatkan keamanan, buat token rahasia dan tambahkan ke konfigurasi webhook GitLab dan konfigurasi Feed Google SecOps yang sesuai. Hal ini membantu memverifikasi keaslian webhook masuk.
  11. Pilih peristiwa GitLab yang akan memicu webhook. Misalnya, Anda dapat memilih Push events untuk mengirim data ke Google SecOps setiap kali kode di-push ke repositori. Pertimbangkan dengan cermat peristiwa mana yang relevan dengan kebutuhan pemantauan keamanan Anda. Terlalu banyak peristiwa dapat menyebabkan pemuatan yang tidak perlu.
  12. Untuk lebih memahami tujuan webhook, beri nama yang bermakna, seperti Webhook Google SecOps.
  13. Pastikan kotak Enable SSL verification dicentang. Hal ini sangat penting untuk komunikasi yang aman.
  14. Klik Tambahkan webhook untuk menyimpan konfigurasi Anda.

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
author_id principal.user.userid Dikonversi ke string.
author_name principal.user.email_addresses Jika nilai cocok dengan ekspresi reguler alamat email.
author_name principal.user.user_display_name Jika nilai tidak cocok dengan ekspresi reguler alamat email.
details.as principal.resource.attribute.labels Ditambahkan sebagai label dengan kunci "as".
details.add principal.resource.attribute.labels Ditambahkan sebagai label dengan kunci "add".
details.as principal.user.role_name Nilai kolom log mentah.
details.as principal.user.attribute.roles.type Disetel ke "ADMINISTRATOR" jika details.as adalah "Pemilik", "SERVICE_ACCOUNT" jika details.as adalah "Developer", "Pengelola", atau "Pelapor", dan "TYPE_UNSPECIFIED" jika details.as adalah "Tamu".
details.custom_message security_result.description Nilai kolom log mentah.
details.custom_message.action security_result.summary Nilai kolom log mentah.
details.entity_path target.file.full_path Nilai kolom log mentah.
details.target_id target.resource.id Dikonversi ke string.
entity_path target.file.full_path Nilai kolom log mentah.
entity_type target.resource.attribute.labels Ditambahkan sebagai label dengan kunci "Jenis Entitas".
event_type metadata.product_event_type Nilai kolom log mentah.
insertId metadata.product_log_id Nilai kolom log mentah.
ip_address principal.ip, principal.asset.ip Nilai kolom log mentah.
jsonPayload.action additional.fields Ditambahkan sebagai kolom dengan kunci "action" dan nilai string.
jsonPayload.controller additional.fields Ditambahkan sebagai kolom dengan kunci "controller" dan nilai string.
jsonPayload.correlation_id principal.asset_id Diawali dengan "id: ".
jsonPayload.cpu_s additional.fields Ditambahkan sebagai kolom dengan kunci "cpu_s" dan nilai string.
jsonPayload.details.custom_message.protocol network.application_protocol Ditetapkan ke "UNKNOWN_APPLICATION_PROTOCOL" jika nilainya adalah "web", atau dikonversi menjadi huruf besar. Juga ditambahkan sebagai kolom tambahan dengan kunci "Application Protocol" jika nilainya adalah "web".
jsonPayload.mem_total_bytes additional.fields Ditambahkan sebagai kolom dengan kunci "mem_total_bytes" dan nilai string.
jsonPayload.meta_caller_id additional.fields Ditambahkan sebagai kolom dengan kunci "Caller Id" dan nilai string.
jsonPayload.meta_client_id target.user.userid Nilai kolom log mentah.
jsonPayload.meta_feature_category additional.fields Ditambahkan sebagai kolom dengan kunci "Kategori Fitur" dan nilai string.
jsonPayload.meta_remote_ip principal.ip, principal.asset.ip Nilai kolom log mentah, diuraikan sebagai array JSON dan digabungkan ke dalam kolom IP.
jsonPayload.meta_user principal.user.userid Digunakan sebagai penggantian jika jsonPayload.username kosong.
jsonPayload.method network.http.method Nilai kolom log mentah.
jsonPayload.path target.process.file.full_path Nilai kolom log mentah.
jsonPayload.pid target.process.pid Dikonversi ke string.
jsonPayload.remote_ip principal.ip, principal.asset.ip Nilai kolom log mentah.
jsonPayload.request_urgency additional.fields Ditambahkan sebagai kolom dengan kunci "Request Urgency" dan nilai string.
jsonPayload.severity security_result.severity Ditetapkan ke "INFORMATIONAL" jika nilainya adalah "INFO", "ERROR" jika nilainya adalah "ERROR", dan "MEDIUM" jika nilainya adalah "NOTICE".
jsonPayload.status network.http.response_code Dikonversi menjadi bilangan bulat jika bukan "AKTIF".
jsonPayload.ua network.http.user_agent Nilai kolom log mentah.
jsonPayload.username principal.user.userid Nilai kolom log mentah.
jsonPayload.worker_id principal.application Nilai kolom log mentah.
labels.instance_name principal.hostname, principal.asset.hostname Nilai kolom log mentah, digunakan jika pesan berisi "Removing user".
logName security_result.category_details Nilai kolom log mentah.
message security_result.summary Nilai kolom log mentah, digunakan jika jsonPayload.severity adalah "ERROR".
protoPayload.@type additional.fields Ditambahkan sebagai kolom dengan kunci "protoPayload type" dan nilai string.
protoPayload.authenticationInfo.principalEmail principal.user.email_addresses, principal.user.userid Nilai kolom log mentah.
protoPayload.authenticationInfo.principalSubject additional.fields Ditambahkan sebagai kolom dengan kunci "authenticationInfo principalSubject" dan nilai string.
protoPayload.authenticationInfo.serviceAccountKeyName additional.fields Ditambahkan sebagai kolom dengan kunci "authenticationInfo serviceAccountKeyName" dan nilai string.
protoPayload.authorizationInfo target.resource.attribute.labels, security_result.action Nilai dalam kolom ini ditambahkan sebagai label dengan kunci yang diawali dengan "authenticationInfo". security_result.action ditetapkan ke "ALLOW" jika nilai dalam granted benar, dan "BLOCK" jika salah. Kolom bertingkat seperti resourceAttributes juga ditambahkan sebagai label dengan kunci yang diawali dengan "authenticationInfo_resourceAttributes".
protoPayload.methodName additional.fields Ditambahkan sebagai kolom dengan kunci "protoPayload methodName" dan nilai string.
protoPayload.request.@type additional.fields Ditambahkan sebagai kolom dengan kunci "Jenis Permintaan" dan nilai string.
protoPayload.request.resource target.resource.attribute.labels Ditambahkan sebagai label dengan kunci "Minta resource".
protoPayload.requestMetadata.callerIp additional.fields Ditambahkan sebagai kolom dengan kunci "requestMetadata callerIp" dan nilai string.
protoPayload.requestMetadata.callerSuppliedUserAgent additional.fields Ditambahkan sebagai kolom dengan kunci "requestMetadata callerSuppliedUserAgent" dan nilai string.
protoPayload.serviceName additional.fields Ditambahkan sebagai kolom dengan kunci "serviceName" dan nilai string.
protoPayload.status.code additional.fields Ditambahkan sebagai kolom dengan kunci "protoPayload status code" dan nilai string.
protoPayload.status.message additional.fields, target.user.email_addresses, target.user.userid Ditambahkan sebagai kolom dengan kunci "protoPayload status message" dan nilai string. Jika alamat email dapat diekstrak dari pesan, alamat email tersebut akan ditambahkan ke target.user.email_addresses dan target.user.userid.
receiveTimestamp metadata.event_timestamp, timestamp Diuraikan sebagai stempel waktu peristiwa.
resource.labels.project_id target.resource.attribute.labels Ditambahkan sebagai label dengan kunci "Project id".
resource.labels.zone target.cloud.availability_zone Nilai kolom log mentah.
resource.type target.cloud.environment Tetapkan ke "GOOGLE_CLOUD_PLATFORM" jika nilainya cocok dengan "gce".
security_result.action security_result.action Diperoleh dari protoPayload.authorizationInfo.granted.
security_result.category_details security_result.category_details Digabungkan dengan logName.
security_result.description security_result.description Diperoleh dari jsonPayload.details.custom_message.
security_result.severity security_result.severity Berasal dari severity atau jsonPayload.severity.
security_result.summary security_result.summary Berasal dari jsonPayload.details.custom_message.action atau jsonPayload.message.
severity security_result.severity Ditetapkan ke "INFORMATIONAL" jika nilainya adalah "INFO", "ERROR" jika nilainya adalah "ERROR", dan "MEDIUM" jika nilainya adalah "NOTICE".
sourceLocation principal.resource.attribute.labels Nilai dalam kolom ini ditambahkan sebagai label.
target_details target.resource.attribute.labels Ditambahkan sebagai label dengan kunci "Detail Target".
target_type target.resource.attribute.labels Ditambahkan sebagai label dengan kunci "target type".
timestamp timestamp Nilai kolom log mentah. Ditetapkan berdasarkan keberadaan kolom target dan prinsipal. Defaultnya adalah "GENERIC_EVENT" jika tidak ada kondisi tertentu yang terpenuhi. Nilai yang mungkin adalah "USER_RESOURCE_UPDATE_CONTENT", "USER_RESOURCE_ACCESS", "USER_UNCATEGORIZED". Ditetapkan ke "GITLAB". Ditetapkan ke "GITLAB".

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.