Mengumpulkan log Elastic Auditbeat
Dokumen ini menjelaskan cara menyerap log Elastic Auditbeat ke
Google Security Operations menggunakan Amazon S3. Parser mengekstrak kolom dari log JSON, menormalisasinya ke dalam Model Data Terpadu (UDM), dan memperkaya data dengan konteks tambahan seperti informasi host, detail jaringan, dan klasifikasi hasil keamanan. Hal ini menangani berbagai jenis peristiwa dengan memetakan event1.action
dan kolom lainnya ke jenis peristiwa metadata UDM tertentu, yang secara default adalah
GENERIC_EVENT
atau kategori yang lebih spesifik jika memungkinkan.
Sebelum memulai
Pastikan Anda memenuhi prasyarat berikut:
- Instance Google SecOps.
- Akses istimewa ke server Elastic Auditbeat.
- Akses istimewa ke server Logstash.
- Akses istimewa ke AWS (S3, Identity and Access Management (IAM)).
Mendapatkan prasyarat Elastic Auditbeat
- Pastikan Elastic Auditbeat diinstal dan dikonfigurasi di server Anda.
- Instal Logstash di server khusus atau bersama Auditbeat.
- Catat lokasi file konfigurasi Auditbeat (biasanya
/etc/auditbeat/auditbeat.yml
).
Mengonfigurasi bucket AWS S3 dan IAM untuk Google SecOps
- Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket
- Simpan Name dan Region bucket untuk referensi di masa mendatang (misalnya,
elastic-auditbeat-logs
). - Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
- Pilih Pengguna yang dibuat.
- Pilih tab Kredensial keamanan.
- Klik Create Access Key di bagian Access Keys.
- Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
- Klik Berikutnya.
- Opsional: Tambahkan tag deskripsi.
- Klik Create access key.
- Klik Download file .CSV untuk menyimpan Kunci Akses dan Kunci Akses Rahasia untuk referensi di masa mendatang.
- Klik Selesai.
- Pilih tab Permissions.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- Cari kebijakan AmazonS3FullAccess.
- Pilih kebijakan.
- Klik Berikutnya.
- Klik Add permissions.
Mengonfigurasi Auditbeat untuk mengirim ke Logstash
- Edit file konfigurasi Auditbeat
/etc/auditbeat/auditbeat.yml
. - Beri komentar pada konfigurasi output yang ada (Elasticsearch, dll.).
Tambahkan konfigurasi output Logstash:
# ==================== Outputs ==================== output.logstash: hosts: ["localhost:5044"] # If Logstash is on a different server, use its IP/hostname # hosts: ["logstash-server:5044"] # Optional: Enable load balancing if using multiple Logstash instances loadbalance: true # Optional: Configure bulk settings (default is 2048) bulk_max_size: 2048 # Optional: Configure SSL if needed # ssl.enabled: true # ssl.certificate_authorities: ["/path/to/ca.crt"]
Mulai ulang Auditbeat untuk menerapkan perubahan:
sudo systemctl restart auditbeat
Mengonfigurasi pipeline Logstash
Buat file konfigurasi pipeline Logstash baru
/etc/logstash/conf.d/auditbeat-to-s3.conf
:input { beats { port => 5044 # Optional: Configure SSL # ssl => true # ssl_certificate => "/path/to/server.crt" # ssl_key => "/path/to/server.key" } } filter { # Add any necessary transformations here # The data should remain in raw JSON format for Chronicle parsing # Optional: Add metadata for debugging mutate { add_field => { "[@metadata][pipeline]" => "auditbeat-to-s3" } } } output { s3 { # AWS credentials access_key_id => "YOUR_AWS_ACCESS_KEY_ID" secret_access_key => "YOUR_AWS_SECRET_ACCESS_KEY" # S3 bucket configuration region => "us-east-1" # Replace with your bucket region bucket => "elastic-auditbeat-logs" # Replace with your bucket name # Organize logs by date using Logstash timestamp interpolation prefix => "auditbeat/%{+YYYY}/%{+MM}/%{+dd}/" # File rotation settings size_file => 10485760 # 10MB files time_file => 5 # Rotate every 5 minutes # Compression for cost optimization encoding => "gzip" # Output format - keep as JSON for Chronicle codec => "json_lines" # Optional: Server-side encryption # server_side_encryption => true # server_side_encryption_algorithm => "AES256" } # Optional: Keep a local copy for debugging # stdout { # codec => rubydebug # } }
- Ganti
YOUR_AWS_ACCESS_KEY_ID
danYOUR_AWS_SECRET_ACCESS_KEY
dengan kredensial AWS Anda yang sebenarnya. - Perbarui nilai
region
danbucket
agar sesuai dengan konfigurasi S3 Anda. - Mulai atau mulai ulang Logstash:
sudo systemctl restart logstash
- Ganti
(Opsional) Buat pengguna & kunci IAM hanya baca untuk Google SecOps
- Buka Konsol AWS > IAM > Pengguna.
- Klik Add users.
- Berikan detail konfigurasi berikut:
- Pengguna: Masukkan
secops-reader
. - Jenis akses: Pilih Kunci akses – Akses terprogram.
- Pengguna: Masukkan
- Klik Buat pengguna.
- Lampirkan kebijakan baca minimal (kustom): Pengguna > secops-reader > Izin > Tambahkan izin > Lampirkan kebijakan secara langsung > Buat kebijakan.
JSON:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::elastic-auditbeat-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::elastic-auditbeat-logs" } ] }
Nama =
secops-reader-policy
.Klik Buat kebijakan > cari/pilih > Berikutnya > Tambahkan izin.
Buat kunci akses untuk
secops-reader
: Kredensial keamanan > Kunci akses.Klik Create access key.
Download
.CSV
. (Anda akan menempelkan nilai ini ke feed).
Mengonfigurasi feed di Google SecOps untuk memproses log Elastic Auditbeat
- Buka Setelan SIEM > Feed.
- Klik + Tambahkan Feed Baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Elastic Auditbeat Logs
). - Pilih Amazon S3 V2 sebagai Jenis sumber.
- Pilih Elastic Audit Beats sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- URI S3:
s3://elastic-auditbeat-logs/auditbeat/
- Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda.
- Usia File Maksimum: Menyertakan file yang diubah dalam jumlah hari terakhir. Defaultnya adalah 180 hari.
- ID Kunci Akses: Kunci akses pengguna dengan akses ke bucket S3.
- Kunci Akses Rahasia: Kunci rahasia pengguna dengan akses ke bucket S3.
- Namespace aset: Namespace aset.
- Label penyerapan: Label yang diterapkan ke peristiwa dari feed ini.
- URI S3:
- Klik Berikutnya.
- Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Tabel pemetaan UDM
Kolom log | Pemetaan UDM | Logika |
---|---|---|
@timestamp |
metadata.event_timestamp |
Stempel waktu peristiwa diuraikan dari kolom @timestamp . |
agent.id |
observer.asset_id |
Diawali dengan "agent_id: ". |
agent.type |
observer.application |
Aplikasi pengamat ditetapkan ke jenis agen. |
agent.version |
observer.platform_version |
Versi platform pengamat ditetapkan ke versi agen. |
client.bytes |
principal.labels |
Ditambahkan sebagai label dengan kunci "Bytes". Dikonversi ke string. |
client.ip |
principal.ip |
IP utama ditetapkan ke IP klien. |
client.packets |
principal.labels |
Ditambahkan sebagai label dengan kunci "Packets". Dikonversi ke string. |
client.port |
principal.port |
Port utama disetel ke port klien. Dikonversi ke bilangan bulat. |
cloud.availability_zone |
principal.cloud.availability_zone |
Zona ketersediaan cloud utama ditetapkan ke zona ketersediaan cloud. |
cloud.instance.id |
principal.resource.id |
ID resource utama ditetapkan ke ID instance cloud. |
cloud.machine.type |
principal.resource.resource_subtype |
Subjenis resource utama ditetapkan ke jenis mesin cloud. |
cloud.region |
principal.cloud.availability_zone |
Jika region cloud ada, region tersebut akan menggantikan zona ketersediaan. |
destination.bytes |
target.labels |
Ditambahkan sebagai label dengan kunci "Bytes". Dikonversi ke string. |
destination.ip |
target.ip |
IP target ditetapkan ke IP tujuan. |
destination.packets |
target.labels |
Ditambahkan sebagai label dengan kunci "Packets". Dikonversi ke string. |
destination.port |
target.port |
Port target ditetapkan ke port tujuan. Dikonversi ke bilangan bulat. |
ecs.version |
metadata.product_version |
Jika ada, mengganti nilai dari jsonPayload.@metadata.version . |
event1.category |
security_result.category_details |
Semua nilai ditambahkan ke category_details. |
event1.duration |
network.session_duration.seconds |
Dikonversi ke bilangan bulat. |
event1.id |
metadata.product_log_id |
ID log produk metadata ditetapkan ke ID peristiwa. |
event1.outcome |
extensions.auth.auth_details |
Detail autentikasi ditetapkan ke hasil acara. |
file.extension |
target.file.mime_type |
Jenis MIME file target ditetapkan ke ekstensi file. |
file.hash.sha1 |
target.file.sha1 |
SHA-1 file target ditetapkan ke hash SHA-1 file. |
file.path |
target.file.full_path |
Jalur lengkap file target ditetapkan ke jalur. |
file.size |
target.file.size |
Dikonversi ke uinteger. |
group.id |
principal.group.product_object_id |
ID objek produk grup utama ditetapkan ke ID grup. |
group.name |
principal.group.group_display_name |
Nama tampilan grup utama ditetapkan ke nama grup. |
host.architecture |
principal.asset.hardware.cpu_platform |
Disimpan dalam variabel sementara hardware.cpu_platform , lalu digabungkan ke dalam principal.asset.hardware . |
host.hostname |
principal.hostname |
Nama host utama ditetapkan ke nama host host. |
host.id |
principal.asset.asset_id |
Diawali dengan "Host Id: ". |
host.ip |
principal.asset.ip |
Semua nilai ditambahkan ke IP aset utama. |
host.mac |
principal.mac |
Tanda hubung diganti dengan titik dua. |
host.name |
principal.hostname , observer.hostname |
Jika ada, mengganti nilai dari host.hostname . |
host.os.kernel |
principal.platform_patch_level |
Tingkat patch platform utama ditetapkan ke kernel OS host. |
host.os.version |
principal.platform_version |
Versi platform utama ditetapkan ke versi OS host. Disimpan dalam variabel sementara host_os_version . |
httpRequest.remoteIp |
target.ip |
Jika ada, dan tidak ada IP target lain yang ditetapkan, nilai ini akan digunakan. |
httpRequest.requestMethod |
network.http.method |
Metode HTTP jaringan ditetapkan ke metode permintaan HTTP. |
httpRequest.requestSize |
network.sent_bytes |
Dikonversi ke uinteger. |
httpRequest.requestUrl |
network.http.referral_url |
URL rujukan HTTP jaringan ditetapkan ke URL permintaan HTTP. |
httpRequest.responseSize |
network.received_bytes |
Dikonversi ke uinteger. |
httpRequest.serverIp |
principal.ip |
Jika ada, dan tidak ada IP utama lain yang ditetapkan, nilai ini akan digunakan. |
httpRequest.status |
network.http.response_code |
Dikonversi ke bilangan bulat. |
httpRequest.userAgent |
network.http.user_agent |
Agen pengguna HTTP jaringan ditetapkan ke agen pengguna permintaan HTTP. |
insertId |
network.session_id |
ID sesi jaringan ditetapkan ke ID penyisipan. |
jsonPayload.@metadata.beat |
metadata.product_event_type |
Jenis peristiwa produk metadata ditetapkan ke beat metadata. |
jsonPayload.@metadata.version |
metadata.product_version |
Versi produk metadata ditetapkan ke versi metadata. |
jsonPayload.destination.ip |
target.ip |
Jika ada, dan tidak ada IP target lain yang ditetapkan, nilai ini akan digunakan. |
jsonPayload.destination.port |
target.port |
Jika ada, dan tidak ada port target lain yang ditetapkan, nilai ini akan digunakan. Dikonversi ke bilangan bulat. |
jsonPayload.event1.category |
security_result.category_details |
Semua nilai ditambahkan ke category_details. |
jsonPayload.file.path |
target.file.full_path |
Jika ada, dan tidak ada jalur target lain yang ditetapkan, nilai ini akan digunakan. |
jsonPayload.process.executable |
principal.process.file.full_path , target.process.file.full_path |
Digunakan untuk menyetel jalur lengkap proses target dan utama jika tidak ada nilai lain. |
jsonPayload.process.name |
principal.application |
Jika ada, dan tidak ada aplikasi utama lain yang ditetapkan, nilai ini akan digunakan. |
jsonPayload.process.parent.pid |
principal.process.pid |
Jika ada, dan tidak ada PID proses utama lain yang ditetapkan, nilai ini akan digunakan. Dikonversi ke string. |
jsonPayload.process.parent.ppid |
principal.process.parent_process.pid |
Jika ada, dan tidak ada PID proses induk utama lain yang ditetapkan, nilai ini akan digunakan. Dikonversi ke string. |
jsonPayload.process.parent.process.executable |
principal.process.file.full_path |
Jika ada, dan tidak ada jalur lengkap proses utama lainnya yang ditetapkan, nilai ini akan digunakan. |
jsonPayload.process.parent.process.exe |
principal.process.file.full_path |
Jika ada, dan tidak ada jalur lengkap proses utama lainnya yang ditetapkan, nilai ini akan digunakan. |
jsonPayload.process.parent.process.title |
principal.process.command_line |
Jika ada, dan tidak ada baris perintah proses utama lain yang ditetapkan, nilai ini akan digunakan. |
jsonPayload.process.pid |
target.process.pid |
PID proses target ditetapkan ke PID proses payload JSON. |
jsonPayload.process.title |
target.process.command_line |
Command line proses target ditetapkan ke judul proses payload JSON. |
jsonPayload.user.id |
target.user.userid |
Jika ada, dan tidak ada ID pengguna target lain yang ditetapkan, nilai ini akan digunakan. Dikonversi ke string. |
jsonPayload.user.name |
target.user.user_display_name |
Jika ada, dan tidak ada nama tampilan pengguna target lain yang ditetapkan, nilai ini akan digunakan. |
msg |
metadata.description |
Deskripsi metadata ditetapkan ke pesan. |
network.bytes |
network.sent_bytes |
Dikonversi ke uinteger. |
network.community_id |
network.community_id |
ID komunitas jaringan ditetapkan ke ID komunitas jaringan. |
network.transport |
network.ip_protocol |
Dikonversi menjadi huruf besar. |
package.description |
security_result.description |
Deskripsi hasil keamanan disetel ke deskripsi paket. |
package.name |
security_result.rule_name |
Nama aturan hasil keamanan ditetapkan ke nama paket. |
package.reference |
security_result.about.url |
URL hasil keamanan disetel ke referensi paket. |
package.size |
security_result.about.file.size |
Dikonversi ke uinteger. |
package.type |
security_result.about.file.mime_type , security_result.rule_type |
Jenis MIME hasil keamanan dan jenis aturan ditetapkan ke jenis paket. |
process.created |
principal.asset.creation_time |
Jika ada, nilai ini akan digunakan. Diuraikan sebagai ISO8601. |
process.entity_id |
principal.process.product_specific_process_id |
Diawali dengan "Proses:". |
process.executable |
principal.process.file.full_path , target.process.file.full_path |
Digunakan untuk menyetel jalur lengkap proses target dan utama jika tidak ada nilai lain. |
process.hash.sha1 |
principal.process.file.sha1 |
SHA-1 utama disetel ke hash SHA-1 proses. |
process.name |
principal.application |
Jika ada, dan tidak ada aplikasi utama lain yang ditetapkan, nilai ini akan digunakan. |
process.pid |
principal.process.pid |
Jika ada, dan tidak ada PID proses utama lain yang ditetapkan, nilai ini akan digunakan. Dikonversi ke string. |
process.ppid |
principal.process.parent_process.pid |
Jika ada, dan tidak ada PID proses induk utama lain yang ditetapkan, nilai ini akan digunakan. Dikonversi ke string. |
process.start |
principal.asset.creation_time |
Jika process.created tidak ada, dan kolom ini ada, nilai ini akan digunakan. Diuraikan sebagai ISO8601. |
resource.labels.backend_service_name |
target.resource.name |
Nama resource target ditetapkan ke nama layanan backend resource. |
resource.labels.forwarding_rule_name |
target.resource.attribute.labels |
Ditambahkan sebagai label dengan kunci "Nama aturan penerusan". |
resource.labels.project_id |
target.resource.product_object_id |
ID objek produk resource target ditetapkan ke ID project resource. |
resource.labels.target_proxy_name |
target.resource.attribute.labels |
Ditambahkan sebagai label dengan kunci "Target proxy name". |
resource.labels.url_map_name |
target.resource.attribute.labels |
Ditambahkan sebagai label dengan kunci "Nama peta URL". |
server.bytes |
intermediary.labels |
Ditambahkan sebagai label dengan kunci "Bytes". Dikonversi ke string. |
server.ip |
intermediary.ip |
IP perantara ditetapkan ke IP server. |
server.packets |
intermediary.labels |
Ditambahkan sebagai label dengan kunci "Packets". Dikonversi ke string. |
server.port |
intermediary.port |
Port perantara ditetapkan ke port server. Dikonversi ke bilangan bulat. |
service.type |
target.application |
Aplikasi target ditetapkan ke jenis layanan. |
source.bytes |
src.labels |
Ditambahkan sebagai label dengan kunci "Bytes". Dikonversi ke string. |
source.ip |
src.ip |
IP sumber ditetapkan ke IP sumber. |
source.packets |
src.labels |
Ditambahkan sebagai label dengan kunci "Packets". Dikonversi ke string. |
source.port |
src.port |
Port sumber ditetapkan ke port sumber. Dikonversi ke bilangan bulat. |
system.audit.host.boottime |
about.asset.last_boot_time |
Diuraikan sebagai ISO8601. |
system.audit.host.hostname |
about.hostname |
Nama host tentang disetel ke nama host audit sistem. |
system.audit.host.id |
principal.user.userid |
ID pengguna utama ditetapkan ke ID host audit sistem. |
system.audit.host.mac.0 |
about.mac |
Alamat MAC tentang ditetapkan ke alamat MAC host audit sistem pertama. |
trace |
target.process.file.full_path |
Jika ada, dan tidak ada jalur lengkap proses target lain yang ditetapkan, nilai ini akan digunakan. |
user.effective.id |
target.user.userid |
Jika ada, dan tidak ada ID pengguna target lain yang ditetapkan, nilai ini akan digunakan. |
user.effective.name |
target.user.user_display_name |
Jika ada, dan tidak ada nama tampilan pengguna target lain yang ditetapkan, nilai ini akan digunakan. |
user.id |
target.user.userid |
Jika ada, dan tidak ada ID pengguna target lain yang ditetapkan, nilai ini akan digunakan. Dikonversi ke string. |
user.name |
target.user.user_display_name |
Jika ada, dan tidak ada nama tampilan pengguna target lain yang ditetapkan, nilai ini akan digunakan. |
T/A | metadata.event_type |
Awalnya ditetapkan ke "GENERIC_EVENT". Diubah berdasarkan logika yang dijelaskan dalam komentar kode parser. |
T/A | metadata.log_type |
Tetapkan ke "ELASTIC_AUDITBEAT". |
T/A | metadata.product_name |
Tetapkan ke "Auditbeat". |
T/A | metadata.vendor_name |
Tetapkan ke "Elastis". |
T/A | extensions.auth.type |
Disetel ke "AUTHTYPE_UNSPECIFIED" untuk peristiwa USER_LOGIN dan USER_LOGOUT. |
auditd.data.syscall |
metadata.product_event_type |
Jenis peristiwa produk metadata ditetapkan ke syscall auditd. |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.