Kumpulkan log Area 1
Dokumen ini menjelaskan cara menyerap log Area 1 Email Security (oleh Cloudflare) ke Google Security Operations menggunakan AWS S3. Parser memproses log dalam format JSON. Proses ini mengekstrak kolom yang relevan dari struktur JSON bertingkat, memetakannya ke Model Data Terpadu (UDM), dan memperkaya data dengan informasi geografis dan detail keamanan seperti hash lampiran dan disposisi.
Sebelum memulai
Pastikan Anda memenuhi prasyarat berikut:
- Instance Google SecOps
- Host Windows 2016 atau yang lebih baru, atau host Linux dengan
systemd
- Jika dijalankan di belakang proxy, port firewall terbuka
- Akses istimewa ke Area 1 Email Security (oleh Cloudflare)
Mengonfigurasi AWS IAM dan Bucket S3
- Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket
- Login ke Konsol AWS.
- Buka S3 > Create bucket.
- Masukkan nama untuk bucket (misalnya,
area1-security-logs
). - Biarkan setelan default lainnya (atau konfigurasi enkripsi dan pembuatan versi jika diperlukan).
- Klik Buat.
- Simpan Nama dan Region bucket untuk referensi di masa mendatang.
- 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, lalu simpan Kunci Akses dan Kunci Akses Rahasia untuk referensi di masa mendatang.
- Klik Selesai.
- Pilih tab Izin.
- Di Kebijakan izin, klik Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- Cari kebijakan AmazonS3FullAccess.
- Pilih kebijakan.
- Klik Berikutnya.
- Klik Tambahkan izin.
Mendapatkan Kredensial API Area 1
- Login ke dasbor Area 1 Security (Cloudflare).
- Buka Setelan > Akses API.
- Buat Kunci API (Token).
- Salin dan Simpan Token di tempat yang aman.
Konfigurasi paket Python yang diperlukan
Login ke host pengumpulan log Anda (misalnya, VM AWS) dan jalankan perintah berikut untuk mengonfigurasi kredensial AWS:
pip install boto3 requests aws configure
Buat skrip Area 1 Log Puller
Buat file berikut dengan memasukkan
sudo vi area1_to_s3.py
, lalu salin kode berikut:- Sesuaikan hal berikut:
#!/usr/bin/env python3 import os import requests import boto3 import datetime import json # Configuration AREA1_API_TOKEN = os.environ.get("AREA1_API_TOKEN") # Load securely from env AWS_PROFILE = os.environ.get("AWS_PROFILE", None) # Optional, for named profiles S3_BUCKET_NAME = "area1-security-logs" LOG_TYPE = "events" # Time range end_time = datetime.datetime.utcnow() start_time = end_time - datetime.timedelta(days=1) def fetch_area1_logs(): url = f"https://api.area1security.com/v1/{LOG_TYPE}" headers = { "Authorization": f"Bearer {AREA1_API_TOKEN}", "Accept": "application/json" } params = { "startDate": start_time.strftime("%Y-%m-%dT%H:%M:%SZ"), "endDate": end_time.strftime("%Y-%m-%dT%H:%M:%SZ") } response = requests.get(url, headers=headers, params=params) response.raise_for_status() return response.json() def upload_to_s3(data): filename = f"area1_{LOG_TYPE}_{start_time.strftime('%Y%m%d')}.json" session = boto3.Session(profile_name=AWS_PROFILE) if AWS_PROFILE else boto3.Session() s3 = session.client("s3") s3.put_object( Bucket=S3_BUCKET_NAME, Key=f"logs/{filename}", Body=json.dumps(data).encode("utf-8"), ContentType="application/json" ) print(f"[✓] Uploaded {filename} to s3://{S3_BUCKET_NAME}/logs/") if __name__ == "__main__": logs = fetch_area1_logs() upload_to_s3(logs)
Simpan dan keluar dari
vi
: klikesc
, lalu ketik:wq
.
Simpan variabel lingkungan
Buat file yang aman untuk menyimpan variabel lingkungan di
/etc/area1.env
(atau/home/user/.area1.env
)export AREA1_API_TOKEN="your_actual_area1_api_token" export AWS_PROFILE="<your_aws_programmatic_username>"
Pastikan file aman:
chmod 600 /etc/area1.env
Menjalankan dan menguji skrip
Jalankan skrip berikut:
python3 area1_to_s3.py
Anda akan melihat:
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
Mengotomatiskan dengan Cron
Buat Skrip Wrapper untuk Cron dengan menjalankan
sudo vi /usr/local/bin/run_area1.sh
lalu salin kode berikut:#!/usr/bin/env bash set -euo pipefail source /etc/area1.env /usr/bin/python3 /opt/scripts/area1_to_s3.py
Setel agar file dapat dieksekusi:
chmod +x /usr/local/bin/run_area1.sh
Ditetapkan untuk berjalan setiap hari pukul 01.00 UTC:
crontab -e 0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
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:
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Area1 Logs
). - Pilih Amazon S3 sebagai Jenis sumber.
- Pilih Area1 Security sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- Region: Region tempat bucket Amazon S3 berada.
- S3 URI: URI bucket (formatnya harus:
s3://<your-log-bucket-name>
). Ganti berikut ini:your-log-bucket-name
: nama bucket.
- URI adalah: Pilih Direktori yang menyertakan subdirektori.
- Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
- Access Key ID: Kunci akses pengguna dengan akses ke bucket s3.
- Secret Access Key: kunci rahasia Pengguna dengan akses ke bucket s3.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Menyiapkan feed dari Hub Konten
Tentukan nilai untuk kolom berikut:
Region: Region tempat bucket Amazon S3 berada.
- S3 URI: URI bucket (formatnya harus:
s3://<your-log-bucket-name>
). Ganti berikut ini:your-log-bucket-name
: nama bucket.
- URI adalah: Pilih Direktori yang menyertakan subdirektori.
- Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
- Access Key ID: Kunci akses pengguna dengan akses ke bucket s3.
- Secret Access Key: kunci rahasia Pengguna dengan akses ke bucket s3.§
- S3 URI: URI bucket (formatnya harus:
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.
Tabel pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
alert_id | security_result.rule_id | Nilai diambil dari kolom alert_id . |
alert_reasons | security_result.description | Nilai diambil dari kolom alert_reasons . |
attachments.att_size | security_result.about.file.size | Nilai diambil dari kolom attachments.att_size dan dikonversi menjadi bilangan bulat yang tidak bertanda tangan. |
attachments.disposition | security_result.about.user.attribute.labels.value | Nilai diambil dari kolom attachments.disposition . |
attachments.extension | security_result.about.file.mime_type | Nilai diambil dari kolom attachments.extension . |
attachments.md5 | security_result.about.file.md5 | Nilai diambil dari kolom attachments.md5 . |
attachments.name | security_result.about.file.full_path | Nilai diambil dari kolom attachments.name . |
attachments.sha1 | security_result.about.file.sha1 | Nilai diambil dari kolom attachments.sha1 . |
attachments.sha256 | security_result.about.file.sha256 | Nilai diambil dari kolom attachments.sha256 . |
attachments.ssdeep | security_result.about.file.ssdeep | Nilai diambil dari kolom attachments.ssdeep . |
delivery_mode | security_result.detection_fields.value | Nilai diambil dari kolom delivery_mode . |
envelope_from | principal.user.email_addresses, network.email.from | Nilai diambil dari kolom envelope_from . |
envelope_to | network.email.to, target.user.email_addresses | Nilai diambil dari kolom envelope_to . |
final_disposition | security_result.category_details | Nilai diambil dari kolom final_disposition . |
message_id | metadata.product_log_id | Nilai diambil dari kolom message_id setelah menghapus karakter '<' dan '>'. |
replyto | network.email.bounce_address | Nilai diambil dari kolom replyto . |
smtp_helo_server_ip | principal.ip | Nilai diambil dari kolom smtp_helo_server_ip . |
smtp_helo_server_ip_as_name | principal.location.name | Nilai diambil dari kolom smtp_helo_server_ip_as_name . |
smtp_helo_server_ip_as_number | principal.asset_id | Nilai diambil dari kolom smtp_helo_server_ip_as_number dan diawali dengan asset_id: . |
smtp_helo_server_ip_geo | principal.location.country_or_region, principal.location.state, principal.location.city | Nilai diekstrak dari kolom smtp_helo_server_ip_geo menggunakan pola Grok. |
smtp_helo_server_name | principal.administrative_domain | Nilai diambil dari kolom smtp_helo_server_name . |
sumber | metadata.vendor_name | Nilai diambil dari kolom source . Jika kolom kosong, nilainya ditetapkan ke area1security . |
subject | network.email.subject | Nilai diambil dari kolom subject . |
waktu | metadata.event_timestamp | Nilai diambil dari kolom time dan dikonversi menjadi stempel waktu. |
metadata.event_type | Nilai ditetapkan ke EMAIL_TRANSACTION . |
|
metadata.product_name | Nilai ditetapkan ke AREA1 . |
|
metadata.log_type | Nilai ditetapkan ke AREA1 . |
|
security_result.about.user.attribute.labels.key | Nilai ditetapkan ke disposition . |
|
security_result.category | Nilai ditetapkan ke SOFTWARE_MALICIOUS . |
|
security_result.detection_fields.key | Nilai ditetapkan ke delivery_mode . |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.