Mengumpulkan log CyberArk EPM
Dokumen ini menjelaskan cara menyerap log CyberArk EPM ke Google Security Operations menggunakan AWS S3. Parser mengubah data log CyberArk EPM menjadi model data terpadu (UDM). Proses ini melakukan iterasi melalui setiap peristiwa dalam log, memetakan kolom yang relevan ke kolom UDM yang sesuai, menangani struktur data tertentu seperti exposedUsers
, dan memperkaya output dengan informasi statis vendor dan produk.
Sebelum memulai
- Pastikan Anda memiliki instance Google Security Operations.
- Pastikan Anda memiliki akses istimewa ke AWS.
- Pastikan Anda memiliki akses istimewa ke Konsol Pengelolaan Server EPM.
Mengonfigurasi AWS IAM untuk penyerapan Google SecOps
- 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 CSV file untuk menyimpan Access Key dan Secret Access Key untuk digunakan nanti.
- Klik Selesai.
- Pilih tab Izin.
- Klik Tambahkan izin di bagian Kebijakan izin .
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- Telusuri dan pilih kebijakan AmazonS3FullAccess.
- Klik Berikutnya.
- Klik Tambahkan izin.
Mengonfigurasi CyberArk EPM untuk akses API
- Login ke konsol web CyberArk EPM sebagai Administrator.
- Buka Administrasi > Pengelolaan Akun.
- Klik + Tambahkan Pengguna.
- Berikan detail berikut:
- Username: epm_api_user
- Sandi: rahasia yang kuat
- Email/Nama Lengkap: opsional
- Di bagian Permissions, berikan ViewOnlySetAdmin pada setiap Set log yang ditarik.
- Klik Simpan.
- Opsional: Perpanjang Waktu Tunggu Sesi:
- Buka Administrasi > Konfigurasi Akun.
- Setel Waktu tunggu untuk sesi tidak aktif ke 60 menit.
- Klik Simpan.
- Buka Kebijakan & Kumpulan > pilih Kumpulan > Properti.
- Salin dan simpan Set ID (GUID). Anda akan menggunakannya dalam skrip sebagai EPM_SET_ID.
Buat Bucket AWS S3
- Login ke AWS Management Console.
- Buka AWS Console > Services > S3 > Create bucket.
- Berikan detail konfigurasi berikut:
- Bucket name: my-cyberark-epm-logs
- Wilayah: pilihan Anda > Buat
Membuat Peran IAM untuk EC2
- Login ke AWS Management Console.
- Buka Layanan.
- Di kotak penelusuran, ketik
IAM
dan pilih. - Di dasbor IAM, klik Roles.
- Klik Buat peran.
- Berikan detail konfigurasi berikut:
- Entitas tepercaya: Layanan AWS > EC2 > Berikutnya.
- Lampirkan izin: AmazonS3FullAccess (atau kebijakan yang dicakup ke bucket Anda) > Berikutnya.
- Nama peran: EC2-S3-EPM-Writer > Buat peran.
Opsional: Luncurkan & konfigurasi VM Pengumpul EC2
- Login ke AWS Management Console.
- Buka Layanan.
- Di kotak penelusuran, ketik EC2, lalu pilih.
- Di dasbor EC2, klik Instances.
- Klik Luncurkan instance.
- Berikan detail konfigurasi berikut:
- Nama: Masukkan
EPM-Log-Collector
. - AMI: Pilih
Ubuntu Server 22.04 LTS
. - Instance type: Pilih t3.micro (atau yang lebih besar), lalu klik Next
- Jaringan: Pastikan setelan Jaringan ditetapkan ke VPC default Anda.
- Peran IAM: Pilih peran IAM EC2-S3-EPM-Writer` dari menu.
- Tetapkan IP Publik secara otomatis: Setel ini ke Aktifkan. Jika Anda akan terhubung melalui VPN, Anda dapat membiarkannya dinonaktifkan.
- Tambahkan Penyimpanan: Biarkan konfigurasi penyimpanan default (8 GiB), lalu klik Berikutnya.
- Pilih Buat grup keamanan baru.
- Aturan masuk: Klik Tambahkan Aturan.
- Jenis: Pilih SSH.
- Port: 22.
- Sumber: IP Anda
- Klik Tinjau dan Luncurkan.
- Pilih atau buat pasangan kunci.
- Klik Download Key Pair.
- Simpan file PEM yang didownload. Anda akan memerlukan file ini untuk terhubung ke instance melalui SSH.
- Nama: Masukkan
Hubungkan ke Mesin Virtual (VM) Anda menggunakan SSH:
chmod 400 ~/Downloads/your-key.pem ssh -i ~/Downloads/your-key.pem ubuntu@<EC2_PUBLIC_IP>
Menginstal prasyarat Collector
Update Sistem Operasi:
# Update OS sudo apt update && sudo apt upgrade -y # Install Python, Git sudo apt install -y python3 python3-venv python3-pip git # Create & activate virtualenv python3 -m venv ~/epm-venv source ~/epm-venv/bin/activate # Install libraries pip install requests boto3
Buat direktori & file status:
sudo mkdir -p /var/lib/epm-collector sudo touch /var/lib/epm-collector/last_run.txt sudo chown ubuntu:ubuntu /var/lib/epm-collector/last_run.txt
Lakukan inisialisasi (misalnya, 1 jam yang lalu):
echo "$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)" > /var/lib/epm-collector/last_run.txt
Men-deploy Skrip Pengumpul
Buat folder project:
mkdir ~/epm-collector && cd ~/epm-collector
Tetapkan variabel lingkungan (misalnya, di ~/.bashrc):
export EPM_URL="https://epm.mycompany.com" export EPM_USER="epm_api_user" export EPM_PASS="YourPasswordHere" export EPM_SET_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" export S3_BUCKET="my-cyberark-epm-logs" export S3_PREFIX="epm/"
Buat collector.py dan tempelkan kode berikut:
#!/usr/bin/env python3 import os import sys import json import boto3 import requests from datetime import datetime, timezone, timedelta # ── LOAD CONFIG FROM ENV ─────────────────────────────────────────────────────── def must_env(var): v = os.getenv(var) if not v: print(f"ERROR: environment variable {var} is required", file=sys.stderr) sys.exit(1) return v EPM_URL = must_env("EPM_URL") # for example, https://epm.mycompany.com USERNAME = must_env("EPM_USER") # API username PASSWORD = must_env("EPM_PASS") # API password SET_ID = must_env("EPM_SET_ID") # GUID of the Set to pull S3_BUCKET = must_env("S3_BUCKET") # for example, my-cyberark-epm-logs S3_PREFIX = os.getenv("S3_PREFIX", "") # optional, for example "epm/" STATE_FILE = os.getenv("STATE_FILE", "/var/lib/epm-collector/last_run.txt") PAGE_SIZE = int(os.getenv("PAGE_SIZE", "100")) # ── END CONFIG ──────────────────────────────────────────────────────────────── def read_last_run(): try: ts = open(STATE_FILE).read().strip() return datetime.fromisoformat(ts.replace("Z","+00:00")) except: # default to 1 hour ago return datetime.now(timezone.utc) - timedelta(hours=1) def write_last_run(dt): with open(STATE_FILE, "w") as f: f.write(dt.strftime("%Y-%m-%dT%H:%M:%SZ")) def logon(): r = requests.post( f"{EPM_URL}/REST/EPMService.svc/Logon", json={"username": USERNAME, "password": PASSWORD}, headers={"Content-Type": "application/json"} ) r.raise_for_status() return r.json().get("SessionToken") def logoff(token): requests.post( f"{EPM_URL}/REST/EPMService.svc/Logoff", headers={"Authorization": f"Bearer {token}"} ) def fetch_raw_events(token, start, end): headers = {"Authorization": f"Bearer {token}"} page = 1 while True: params = { "setId": SET_ID, "startDate": start, "endDate": end, "pageSize": PAGE_SIZE, "pageNumber": page } resp = requests.get( f"{EPM_URL}/REST/EPMService.svc/GetRawEvents", headers=headers, params=params ) resp.raise_for_status() events = resp.json().get("RawEvents", []) if not events: break yield from events page += 1 def upload_to_s3(obj, key): boto3.client("s3").put_object( Bucket=S3_BUCKET, Key=key, Body=json.dumps(obj).encode("utf-8") ) def main(): # determine time window start_dt = read_last_run() end_dt = datetime.now(timezone.utc) START = start_dt.strftime("%Y-%m-%dT%H:%M:%SZ") END = end_dt.strftime("%Y-%m-%dT%H:%M:%SZ") token = logon() try: for idx, raw_evt in enumerate(fetch_raw_events(token, START, END), start=1): key = f"{S3_PREFIX}{end_dt.strftime('%Y/%m/%d')}/raw_{int(end_dt.timestamp())}_{idx}.json" upload_to_s3(raw_evt, key) print(f"Uploaded raw event to {key}") finally: logoff(token) # persist for next run write_last_run(end_dt) if __name__ == "__main__": main()
Setel agar skrip dapat dieksekusi:
chmod +x collector.py
Mengotomatiskan dengan Cron
Buka crontab:
crontab -e
Tambahkan tugas harian:
0 0 * * * cd ~/epm-collector && source ~/epm-venv/bin/activate && python collector.py >> ~/epm-collector/epm.log 2>&1
Mengonfigurasi feed di Google SecOps untuk memproses log CyberArk EPM
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Cyberark EPM Logs
). - Pilih Amazon S3 sebagai Jenis sumber.
- Pilih Cyberark EPM 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 atau 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.
- Namespace aset: namespace aset.
- Label penyerapan: label yang akan diterapkan ke peristiwa dari feed ini.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
agentId | principal.asset.asset_id | Menggabungkan "agentId:" dengan nilai kolom agentId. |
computerName | principal.hostname | Memetakan kolom computerName secara langsung. |
displayName | metadata.description | Memetakan kolom displayName secara langsung. |
eventType | metadata.product_event_type | Memetakan kolom eventType secara langsung. |
exposedUsers.[].accountName | target.user.attribute.labels | Membuat label dengan kunci "accountName_[index]" dan nilai dari exposedUsers.[index].accountName. |
exposedUsers.[].domain | target.user.attribute.labels | Membuat label dengan kunci "domain_[index]" dan nilai dari exposedUsers.[index].domain. |
exposedUsers.[].username | target.user.attribute.labels | Membuat label dengan kunci "username_[index]" dan nilai dari exposedUsers.[index].username. |
filePath | target.file.full_path | Memetakan kolom filePath secara langsung. |
hash | target.file.sha1 | Memetakan kolom hash secara langsung. |
operatingSystemType | principal.platform | Memetakan "Windows" ke "WINDOWS" jika kolom operatingSystemType adalah "Windows". |
policyName | security_result.rule_name | Memetakan kolom policyName secara langsung. |
processCommandLine | target.process.command_line | Memetakan kolom processCommandLine secara langsung. |
penerbit | additional.fields | Membuat kolom dengan kunci "Publisher" dan string_value dari kolom penerbit. |
sourceProcessCommandLine | target.process.parent_process.command_line | Memetakan kolom sourceProcessCommandLine secara langsung. |
sourceProcessHash | target.process.parent_process.file.sha1 | Memetakan kolom sourceProcessHash secara langsung. |
sourceProcessSigner | additional.fields | Membuat kolom dengan kunci "sourceProcessSigner" dan string_value dari kolom sourceProcessSigner. |
threatProtectionAction | security_result.action_details | Memetakan kolom threatProtectionAction secara langsung. |
metadata.event_timestamp | Menetapkan stempel waktu peristiwa ke create_time entri log. | |
metadata.event_type | Dikodekan secara permanen ke "STATUS_UPDATE". | |
metadata.log_type | Dikodekan secara permanen ke "CYBERARK_EPM". | |
metadata.product_name | Dikodekan secara permanen ke "EPM". | |
metadata.vendor_name | Dikodekan secara permanen ke "CYBERARK". | |
security_result.alert_state | Dikodekan secara permanen ke "ALERTING". | |
userName | principal.user.userid | Memetakan kolom userName secara langsung. |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.