Mengumpulkan log Ansible AWX
Ringkasan
Parser ini mengekstrak data log berformat JSON dari Ansible AWX, yang mengonversinya menjadi Unified Data Model (UDM). Fungsi ini menangani berbagai format log, mengekstrak kolom yang relevan seperti stempel waktu, alamat IP, informasi host, dan detail peristiwa, serta memetakan kolom tersebut ke kolom UDM yang sesuai, serta menangani kasus ekstrem tertentu dan memperkaya data dengan label dan metadata.
Sebelum memulai
- Pastikan Anda memiliki instance Google Chronicle.
- Pastikan Anda memiliki akses dengan hak istimewa ke Ansible AWX.
Mengonfigurasi feed di Google SecOps untuk menyerap log Ansible AWX
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya, Ansible AWX Logs).
- Pilih Webhook sebagai Jenis sumber.
- Pilih Ansible AWX 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.
Mengonfigurasi Webhook di Ansible AWX
- Login ke instance AWX Anda.
- Buka bagian Notifikasi, yang terletak di bagian Administrasi.
- Klik Tambahkan.
Konfigurasi Setelan Webhook:
- Nama: Berikan nama deskriptif untuk webhook (misalnya, Webhook Google SecOps).
- Jenis: Pilih Webhook dari daftar.
- URL Target: Masukkan URL endpoint Google SecOps API.
- Metode HTTP: Pilih POST.
Opsional: Header HTTP: Tambahkan header yang diperlukan untuk autentikasi atau jenis konten. Misalnya, Anda mungkin perlu menyertakan header
Authorization
dengan token pembawa. Lihat dokumentasi Google SecOps untuk mengetahui persyaratan header tertentu.Klik Simpan untuk membuat webhook.
Buka Project, yang terletak di bagian Resource.
Pilih project yang ingin Anda kaitkan dengan webhook.
Dalam project yang dipilih, buka tab Notifikasi.
Pilih pemicu yang akan diAKTIFKAN untuk notifikasi Webhook yang dibuat sebelumnya Mulai | Berhasil | Gagal.
Notifikasi kini akan berlaku untuk semua template yang terkait dengan project. Anda dapat menonaktifkannya secara manual dengan membuka kolom Notifikasi di setiap template.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
Nilai agent.ephemeral_id dari log mentah. |
agent.hostname |
observer.hostname |
Nilai agent.hostname dari log mentah. |
agent.id |
observer.asset_id |
Penggabungan "filebeat:" dan nilai agent.id dari log mentah. |
agent.name |
observer.user.userid |
Nilai agent.name dari log mentah. |
agent.type |
observer.application |
Nilai agent.type dari log mentah. |
agent.version |
observer.platform_version |
Nilai agent.version dari log mentah. |
cloud.availability_zone |
principal.resource.attribute.labels.value |
Nilai cloud.availability_zone dari log mentah. |
cloud.instance.id |
principal.resource.product_object_id |
Nilai cloud.instance.id dari log mentah. |
cloud.instance.name |
principal.resource.name |
Nilai cloud.instance.name dari log mentah. |
cloud.machine.type |
principal.resource.attribute.labels.value |
Nilai cloud.machine.type dari log mentah. |
cloud.provider |
principal.resource.attribute.labels.value |
Nilai cloud.provider dari log mentah. |
event1 |
metadata.description |
Nilai event1 dari log mentah. Jika event1 tidak ada, nilai message akan digunakan. |
event1_data.host |
principal.hostname |
Nilai event1_data.host dari log mentah. Digunakan sebagai penggantian jika host_name dan host tidak ada. |
event1_data.remote_addr |
principal.ip |
Alamat IP yang diekstrak dari event1_data.remote_addr menggunakan pola grok. |
event1_data.task |
security_result.detection_fields.value |
Nilai event1_data.task dari log mentah. |
event1_data.task_path |
principal.process.file.full_path |
Nilai event1_data.task_path dari log mentah. |
event1_data.task_uuid |
security_result.detection_fields.value |
Nilai event1_data.task_uuid dari log mentah. |
event1_data.uuid |
metadata.product_log_id |
Nilai event1_data.uuid dari log mentah. |
event1_display |
security_result.description |
Nilai event1_display dari log mentah. |
host |
principal.hostname |
Nilai host dari log mentah. Digunakan sebagai penggantian jika host_name tidak ada. Jika berupa angka, angka tersebut akan dikonversi menjadi string. |
host.architecture |
target.asset.hardware.cpu_platform |
Nilai host.architecture dari log mentah. |
host.fqdn |
target.administrative_domain |
Nilai host.fqdn dari log mentah. |
host.hostname |
target.hostname |
Nilai host.hostname dari log mentah. |
host.id |
target.asset.asset_id |
"Host Id: " digabungkan dengan nilai host.id dari log mentah. |
host.ip |
target.asset.ip |
Nilai array host.ip dari log mentah. |
host.mac |
target.mac |
Nilai array host.mac dari log mentah. |
host.os.codename |
target.asset.attribute.labels.value |
Nilai host.os.codename dari log mentah. |
host.os.kernel |
target.platform_patch_level |
Nilai host.os.kernel dari log mentah. |
host.os.name |
target.asset.attribute.labels.value |
Nilai host.os.name dari log mentah. |
host.os.platform |
target.platform |
Jika nilai host.os.platform adalah "debian", kolom UDM akan ditetapkan ke "LINUX". |
host.os.version |
target.platform_version |
Nilai host.os.version dari log mentah. |
host_name |
principal.hostname |
Nilai host_name dari log mentah. |
input.type |
network.ip_protocol |
Jika nilai input.type adalah "tcp", kolom UDM akan ditetapkan ke "TCP". |
level |
security_result.severity |
Berdasarkan nilai level : "DEBUG", "INFO", "AUDIT" dipetakan ke "INFORMATIONAL"; "ERROR" dipetakan ke "ERROR"; "WARNING" dipetakan ke "MEDIUM". |
level |
security_result.severity_details |
Nilai level dari log mentah. |
log.source.address |
principal.ip |
Alamat IP yang diekstrak dari log.source.address menggunakan pola grok. |
log.source.address |
principal.port |
Port yang diekstrak dari log.source.address menggunakan pola grok. |
logger_name |
intermediary.application |
Nilai logger_name dari log mentah. |
message |
metadata.description |
Nilai message dari log mentah. Digunakan sebagai penggantian jika event1 tidak ada. |
metadata.event_type |
metadata.event_type |
Ditentukan oleh logika parser berdasarkan keberadaan kolom tertentu. "NETWORK_CONNECTION" jika log.source.address dan host.ip ada. "STATUS_UPDATE" jika principal_hostname atau event1_data.remote_addr ada. "GENERIC_EVENT" jika tidak. |
metadata.log_type |
metadata.log_type |
Di-hardcode ke "ANSIBLE_AWX". |
metadata.product_name |
metadata.product_name |
Di-hardcode ke "ANSIBLE_AWX". |
metadata.vendor_name |
metadata.vendor_name |
Di-hardcode ke "ANSIBLE_AWX". |
parent_uuid |
security_result.detection_fields.value |
Nilai parent_uuid dari log mentah. |
principal.resource.resource_type |
principal.resource.resource_type |
Di-hardcode ke "VIRTUAL_MACHINE" jika cloud.instance.name ada. |
observer.labels.key |
observer.labels.key |
Di-hardcode ke "ephemeral_id". |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
Di-hardcode ke "machine_type", "provider", atau "availability_zone", bergantung pada kolom yang dipetakan. |
security_result.detection_fields.key |
security_result.detection_fields.key |
Di-hardcode ke "parent_uuid", "task", atau "task_uuid", bergantung pada kolom yang dipetakan. |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
Di-hardcode ke "codename" atau "os_name", bergantung pada kolom yang dipetakan. |
timestamp |
metadata.event_timestamp |
Nilai timestamp dari log mentah, diuraikan, dan dikonversi menjadi stempel waktu. |
timestamp |
timestamp |
Nilai timestamp dari log mentah, diuraikan, dan dikonversi menjadi stempel waktu. |
Perubahan
2022-11-09
- Parser yang baru dibuat.