Mengumpulkan log Atlassian Jira

Didukung di:

Ringkasan

Parser ini menangani log Atlassian Jira dalam format SYSLOG dan JSON. Pertama-tama, metode ini akan mencoba mengurai pesan sebagai JSON. Jika gagal, ia akan menggunakan pola grok untuk mengurai pesan berformat SYSLOG, mengekstrak berbagai kolom seperti alamat IP, nama pengguna, metode HTTP, dan kode respons sebelum memetakan ke UDM. Parser juga menangani peristiwa audit Jira tertentu, termasuk keberhasilan dan kegagalan login, serta memetakan kolom yang relevan ke atribut hasil keamanan dalam UDM.

Sebelum memulai

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

Mengonfigurasi feed di Google SecOps untuk menyerap log Atlassian Jira

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Atlassian Jira Logs).
  4. Pilih Webhook sebagai Jenis sumber.
  5. Pilih Atlassian Jira sebagai Jenis log.
  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. Di 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. 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.

Membuat webhook di Atlassian Jira untuk Google SecOps

  1. Akses instance Jira Anda sebagai administrator.
  2. Buka Setelan setelan > Sistem > WebHooks.
  3. Klik Buat WebHook.
  4. Konfigurasikan detail webhook berikut:
    • Nama: Berikan nama deskriptif untuk webhook (Misalnya, Integrasi Google SecOps).
    • URL: Masukkan URL endpoint Google SecOps API.
    • Peristiwa: Pilih peristiwa Jira yang akan memicu webhook. Pilih peristiwa yang relevan dengan kebutuhan pemantauan keamanan Anda (Misalnya, masalah dibuat, masalah diperbarui, komentar ditambahkan). Anda dapat memilih Semua Peristiwa jika diperlukan.
    • Opsional: Filter JQL: Gunakan filter JQL untuk lebih memfilter peristiwa yang memicu webhook. Hal ini berguna untuk berfokus pada project, jenis masalah, atau kriteria lainnya.
    • Kecualikan isi: Biarkan tidak dicentang. Webhook harus mengirim data peristiwa dalam format JSON ke Google SecOps.
  5. Klik Buat untuk menyimpan konfigurasi webhook.

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
affectedObjects.id target.resource.attribute.labels.value Kolom id dalam setiap objek array affectedObjects dipetakan ke label dengan kunci "ID_[index]" dengan [index] adalah posisi objek dalam array.
affectedObjects.name target.resource.attribute.labels.value Kolom name dalam setiap objek array affectedObjects dipetakan ke label dengan kunci "Name_[index]" dengan [index] adalah posisi objek dalam array.
affectedObjects.type target.resource.attribute.labels.value Kolom type dalam setiap objek array affectedObjects dipetakan ke label dengan kunci "Type_[index]" dengan [index] adalah posisi objek dalam array.
associatedItems.0.id target.user.userid Jika associatedItems.0.typeName adalah "USER", kolom ini akan dipetakan ke target.user.userid. Jika tidak, ID akan dipetakan ke label dengan kunci "associatedItems Id" di security_result.detection_fields.
associatedItems.0.name target.user.user_display_name Jika associatedItems.0.typeName adalah "USER", kolom ini akan dipetakan ke target.user.user_display_name. Jika tidak, nama akan dipetakan ke label dengan kunci "associatedItems Name" di security_result.detection_fields.
associatedItems.0.parentId target.process.parent_process.pid Jika associatedItems.0.typeName adalah "USER", kolom ini akan dipetakan ke target.process.parent_process.pid.
associatedItems.0.parentName target.resource.parent Jika associatedItems.0.typeName adalah "USER", kolom ini akan dipetakan ke target.resource.parent.
associatedItems.0.typeName security_result.detection_fields.value Dipetakan ke label dengan kunci "associatedItems TypeName" di security_result.detection_fields.
author.id principal.user.userid Dipetakan ke principal.user.userid.
author.name principal.user.user_display_name Dipetakan ke principal.user.user_display_name.
author.type principal.resource.attribute.labels.value Dipetakan ke label dengan kunci "Jenis Penulis" di principal.resource.attribute.labels.
author.uri principal.url Dipetakan ke principal.url.
authorAccountId principal.user.userid Dipetakan ke principal.user.userid.
authorKey target.resource.attribute.labels.value Dipetakan ke label dengan kunci "Kunci Penulis" di target.resource.attribute.labels.
auditType.action security_result.summary Dipetakan ke security_result.summary. Juga digunakan untuk mendapatkan security_result.action dan metadata.event_type (USER_LOGIN jika tindakan berisi "login", ALLOW jika "berhasil", BLOCK jika "gagal").
auditType.area metadata.product_event_type Dipetakan ke metadata.product_event_type.
auditType.category security_result.category_details Dipetakan ke security_result.category_details.
category metadata.product_event_type Dipetakan ke metadata.product_event_type.
changedValues.changedFrom security_result.about.resource.attribute.labels.value Dipetakan ke label dengan kunci "Changed From" di security_result.about.resource.attribute.labels.
changedValues.changedTo security_result.about.resource.attribute.labels.value Dipetakan ke label dengan kunci "Changed To" di security_result.about.resource.attribute.labels.
changedValues.fieldName security_result.about.resource.attribute.labels.value Dipetakan ke label dengan kunci "FieldName" di security_result.about.resource.attribute.labels.
changedValues.i18nKey security_result.about.resource.attribute.labels.value Dipetakan ke label dengan kunci "FieldName" di security_result.about.resource.attribute.labels.
changedValues.key security_result.about.resource.attribute.labels.value Dipetakan ke label dengan kunci "Changed From" di security_result.about.resource.attribute.labels.
changedValues.to security_result.about.resource.attribute.labels.value Dipetakan ke label dengan kunci "Changed To" di security_result.about.resource.attribute.labels.
created metadata.event_timestamp Diurai dan dipetakan ke metadata.event_timestamp.
dst_ip target.ip Dipetakan ke target.ip.
extraAttributes.name principal.resource.attribute.labels.value Dipetakan ke label dengan kunci "Nama" di principal.resource.attribute.labels.
extraAttributes.value principal.resource.attribute.labels.value Dipetakan ke label dengan kunci "Value" di principal.resource.attribute.labels.
http_method network.http.method Dipetakan ke network.http.method.
http_referral_url network.http.referral_url Dipetakan ke network.http.referral_url.
id metadata.product_log_id Dipetakan ke metadata.product_log_id.
objectItem.id security_result.detection_fields.value Dipetakan ke label dengan kunci "objectItem Id" di security_result.detection_fields.
objectItem.name security_result.detection_fields.value Dipetakan ke label dengan kunci "objectItem Name" di security_result.detection_fields.
objectItem.typeName security_result.detection_fields.value Dipetakan ke label dengan kunci "objectItem TypeName" di security_result.detection_fields.
path principal.url Jika bukan "-" atau "/status", dipetakan ke principal.url.
protocol network.ip_protocol Jika "HTTP", dipetakan ke network.ip_protocol.
remoteAddress principal.ip Dipetakan ke principal.ip.
response_code network.http.response_code Dipetakan ke network.http.response_code.
sent_bytes network.sent_bytes Dipetakan ke network.sent_bytes.
source principal.ip Diurai untuk mengekstrak alamat IP dan digabungkan ke dalam principal.ip.
src_ip1, src_ip2, src_ip3 principal.ip Dipetakan ke principal.ip.
summary metadata.description Dipetakan ke metadata.description.
user_agent network.http.user_agent Dipetakan ke network.http.user_agent.
user_name principal.user.userid Dipetakan ke principal.user.userid. Tetapkan ke "MACHINE" jika auditType.action berisi "login". Berasal dari date_time jika menguraikan syslog, atau created jika menguraikan JSON. Jika tersedia dalam JSON, timestamp akan digunakan, bukan created. Jika tidak ada yang ada, create_time dari batch akan digunakan. Diderivasikan berdasarkan keberadaan kolom lain: NETWORK_HTTP jika dst_ip ada, USER_UNCATEGORIZED jika user_name atau (associatedItems.0.typeName adalah "USER" dan associatedItems.0.id ada) ada, STATUS_UPDATE jika src_ip1, src_ip2, src_ip3, atau remoteAddress ada, atau GENERIC_EVENT jika tidak. Diganti menjadi USER_LOGIN jika auditType.action berisi "login". Selalu ditetapkan ke "ATLASSIAN_JIRA". Selalu ditetapkan ke "ATLASSIAN_JIRA". Tetapkan ke "ALLOW" jika auditType.action berisi "login berhasil", "BLOCK" jika auditType.action berisi "login gagal".

Perubahan

2023-12-12

  • Menambahkan dukungan untuk memetakan beberapa alamat IP dari "source" ke "principal.ip".

2023-11-10

  • Menambahkan pola Grok baru untuk mengurai log JSON yang gagal.
  • Memetakan "affectedObjects" ke "target.resource.attribute.labels".
  • Memetakan "changedValues" ke "security_result.about.resource.attribute.labels".
  • Memetakan "extraAttributes" ke "principal.resource.attribute.labels".
  • Memetakan "source" ke "principal.ip".
  • Memetakan "author.id", "author.name", "author.uri", "author.type", "auditType.area", "auditType.category", dan "auditType.action" ke "principal.user.userid", "principal.user.user_display_name", "principal.url", "principal.resource.attribute.labels", "metadata.product_event_type", "security_result.category_details", dan "security_result.summary".

2023-02-09

  • Menambahkan blok "json" untuk mengambil data JSON.

2023-01-10

  • Peningkatan - Menambahkan dukungan untuk log format JSON.
  • Memetakan "authorAccountId" ke "principal.user.userid".
  • Memetakan "id" ke "metadata.product_log_id".
  • Memetakan "remoteAddress" ke "principal.ip".
  • Memetakan "summary" ke "metadata.description".
  • Memetakan "category" ke "metadata.product_event_type".
  • Memetakan "authorKey" ke "target.resource.attribute.labels".
  • Memetakan "objectItem.id", "objectItem.name", "objectItem.typeName" ke "security_result.detection_fields".
  • Memetakan "associatedItems.0.id" ke "target.user.userid" saat "associatedItems.0.typeName" adalah "USER".
  • Memetakan "associatedItems.0.name" ke "target.user.user_display_name" saat "associatedItems.0.typeName" adalah "USER".
  • Memetakan "associatedItems.0.parentId" ke "target.process.parent_process.pid" saat "associatedItems.0.typeName" adalah "USER".
  • Memetakan "associatedItems.0.parentName" ke "target.resource.parent" saat "associatedItems.0.typeName" adalah "USER".
  • Memetakan "associatedItems.0.id" dan "associatedItems.0.name" ke "security_result.detection_fields" jika "associatedItems.0.typeName" bukan "USER".
  • Memetakan "associatedItems.0.typeName" ke "security_result.detection_fields".
  • Memetakan "changedValues.fieldName", "changedValues.changedFrom", ""changedValues.changedTo" ke "security_result.about.resource.attribute.labels".
  • Memetakan "STATUS_UPDATE" ke "metadata.event_type" jika "remoteAddress" ada.
  • Memetakan "USER_UNCATEGORIZED" ke "metadata.event_type" jika "authorAccountId" ada atau "associatedItems.0.typeName is "USER" dan "associatedItems.0.id" ada.

2022-05-31

  • Perbaikan bug - Menambahkan kondisi untuk memeriksa pemetaan yang salah untuk principal.url jika nilai URL dalam log memiliki '/status'.