Mengumpulkan log Atlassian Jira
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
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya, Atlassian Jira Logs).
- Pilih Webhook sebagai Jenis sumber.
- Pilih Atlassian Jira sebagai Jenis log.
- Klik Berikutnya.
- 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.
- Pemisah pemisahan: pembatas yang digunakan untuk memisahkan baris log, seperti
- Klik Berikutnya.
- Tinjau konfigurasi feed di layar Finalize, lalu klik Submit.
- 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 lagi.
- Di tab Detail, salin URL endpoint feed dari kolom Endpoint Information. Anda perlu menentukan URL endpoint ini di aplikasi klien.
- Klik Done.
Membuat kunci API untuk feed webhook
Buka Konsol Google Cloud > Kredensial.
Klik Create credentials, lalu pilih API key.
Batasi akses kunci API ke Google Security Operations API.
Menentukan URL endpoint
- Di aplikasi klien, tentukan URL endpoint HTTPS yang diberikan di feed webhook.
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
- Akses instance Jira Anda sebagai administrator.
- Buka Setelan setelan > Sistem > WebHooks.
- Klik Buat WebHook.
- 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.
- 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'.