Mengumpulkan log CyberArk EPM

Didukung di:

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

  1. Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
  2. Pilih Pengguna yang dibuat.
  3. Pilih tab Kredensial keamanan.
  4. Klik Create Access Key di bagian Access Keys.
  5. Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
  6. Klik Berikutnya.
  7. Opsional: Tambahkan tag deskripsi.
  8. Klik Create access key.
  9. Klik Download CSV file untuk menyimpan Access Key dan Secret Access Key untuk digunakan nanti.
  10. Klik Selesai.
  11. Pilih tab Izin.
  12. Klik Tambahkan izin di bagian Kebijakan izin .
  13. Pilih Tambahkan izin.
  14. Pilih Lampirkan kebijakan secara langsung.
  15. Telusuri dan pilih kebijakan AmazonS3FullAccess.
  16. Klik Berikutnya.
  17. Klik Tambahkan izin.

Mengonfigurasi CyberArk EPM untuk akses API

  1. Login ke konsol web CyberArk EPM sebagai Administrator.
  2. Buka Administrasi > Pengelolaan Akun.
  3. Klik + Tambahkan Pengguna.
  4. Berikan detail berikut:
    • Username: epm_api_user
    • Sandi: rahasia yang kuat
    • Email/Nama Lengkap: opsional
  5. Di bagian Permissions, berikan ViewOnlySetAdmin pada setiap Set log yang ditarik.
  6. Klik Simpan.
  7. Opsional: Perpanjang Waktu Tunggu Sesi:
    • Buka Administrasi > Konfigurasi Akun.
    • Setel Waktu tunggu untuk sesi tidak aktif ke 60 menit.
    • Klik Simpan.
  8. Buka Kebijakan & Kumpulan > pilih Kumpulan > Properti.
  9. Salin dan simpan Set ID (GUID). Anda akan menggunakannya dalam skrip sebagai EPM_SET_ID.

Buat Bucket AWS S3

  1. Login ke AWS Management Console.
  2. Buka AWS Console > Services > S3 > Create bucket.
  3. Berikan detail konfigurasi berikut:
    • Bucket name: my-cyberark-epm-logs
    • Wilayah: pilihan Anda > Buat

Membuat Peran IAM untuk EC2

  1. Login ke AWS Management Console.
  2. Buka Layanan.
  3. Di kotak penelusuran, ketik IAM dan pilih.
  4. Di dasbor IAM, klik Roles.
  5. Klik Buat peran.
  6. 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

  1. Login ke AWS Management Console.
  2. Buka Layanan.
  3. Di kotak penelusuran, ketik EC2, lalu pilih.
  4. Di dasbor EC2, klik Instances.
  5. Klik Luncurkan instance.
  6. 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.
  7. 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

  1. 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
    
  2. 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
    
  3. 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

  1. Buat folder project:

    mkdir ~/epm-collector && cd ~/epm-collector
    
  2. 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/"
    
  3. 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()
    
  4. Setel agar skrip dapat dieksekusi:

    chmod +x collector.py
    

Mengotomatiskan dengan Cron

  1. Buka crontab:

    crontab -e
    
  2. 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

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Cyberark EPM Logs).
  4. Pilih Amazon S3 sebagai Jenis sumber.
  5. Pilih Cyberark EPM sebagai Jenis log.
  6. Klik Berikutnya.
  7. 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.
  8. Klik Berikutnya.

  9. 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.