Mengumpulkan log Akamai EAA (Enterprise Application Access)

Didukung di:

Dokumen ini menjelaskan cara menyerap log Akamai Enterprise Application Access (EAA) ke Google Security Operations menggunakan Unified Log Streamer (ULS) dan Bindplane Akamai. Akamai EAA menghasilkan data operasional dalam bentuk log akses, log audit admin, detail autentikasi, dan metrik kesehatan konektor. Parser mengekstrak kolom dari log JSON, melakukan transformasi data seperti konversi string dan ekstraksi alamat IP, serta memetakan kolom ini ke UDM, menangani berbagai jenis peristiwa seperti NETWORK_HTTP dan USER_UNCATEGORIZED berdasarkan ada atau tidaknya kolom tertentu. Selain itu, metadata seperti nama vendor dan produk juga ditambahkan ke peristiwa UDM.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Host Windows 2016 atau yang lebih baru atau Linux dengan systemd untuk menjalankan agen Bindplane
  • Linux, macOS, atau lingkungan dalam container (Docker/Kubernetes) untuk menjalankan Unified Log Streamer
  • Jika beroperasi dari balik proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane
  • Tenant Akamai EAA dengan akses administratif
  • Kredensial Akamai API (autentikasi EdgeGrid):
    • Token Akses
    • Token Klien
    • Rahasia Klien
    • Nama Host Dasar API (misalnya, akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net)

Mendapatkan file autentikasi penyerapan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Agen Pengumpulan.
  3. Download File Autentikasi Penyerapan. Simpan file dengan aman di sistem tempat BindPlane akan diinstal.

Mendapatkan ID pelanggan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Profil.
  3. Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.

Menginstal agen Bindplane

Instal agen Bindplane di sistem operasi Windows atau Linux Anda sesuai dengan petunjuk berikut.

Penginstalan Windows

  1. Buka Command Prompt atau PowerShell sebagai administrator.
  2. Jalankan perintah berikut:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Penginstalan Linux

  1. Buka terminal dengan hak istimewa root atau sudo.
  2. Jalankan perintah berikut:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Referensi penginstalan tambahan

Mengonfigurasi agen BindPlane untuk menyerap Syslog dan mengirimkannya ke Google SecOps

  1. Akses file konfigurasi:

    1. Cari file config.yaml. Biasanya, file ini berada di direktori /etc/bindplane-agent/ di Linux atau di direktori penginstalan di Windows.
    2. Buka file menggunakan editor teks (misalnya, nano, vi, atau Notepad).
  2. Edit file config.yaml sebagai berikut:

    receivers:
      tcplog:
        listen_address: "0.0.0.0:5140"
    
    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: <CUSTOMER_ID>
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'AKAMAI_EAA'
        raw_log_field: body
        ingestion_labels:
          source: akamai_eaa
    
    service:
      pipelines:
        logs/akamai_eaa:
          receivers:
            - tcplog
          exporters:
            - chronicle/chronicle_w_labels
    
    • Ganti kode berikut:
      • Ganti <CUSTOMER_ID> dengan ID pelanggan yang sebenarnya.
      • Ganti /path/to/ingestion-authentication-file.json dengan jalur tempat file autentikasi disimpan di bagian Mendapatkan file autentikasi penyerapan Google SecOps.
      • 0.0.0.0:5140: Alamat IP dan port yang akan diproses Bindplane. Sesuaikan sesuai kebutuhan untuk lingkungan Anda.

Mulai ulang agen Bindplane untuk menerapkan perubahan

  • Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:

    sudo systemctl restart bindplane-agent
    
  • Untuk memulai ulang agen Bindplane di Windows, Anda dapat menggunakan konsol Services atau memasukkan perintah berikut:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Menginstal Akamai Unified Log Streamer

Unified Log Streamer (ULS) menarik log dari Akamai EAA melalui Enterprise Application Access API dan menyalurkannya ke Bindplane menggunakan TCP atau UDP.

Penginstalan Linux

  1. Download rilis ULS terbaru:

    curl -LO https://github.com/akamai/uls/releases/latest/download/uls-linux-amd64
    
  2. Jadikan biner sebagai file yang dapat dieksekusi:

    chmod +x uls-linux-amd64
    
  3. Pindahkan ke lokasi standar:

    sudo mv uls-linux-amd64 /usr/local/bin/uls
    

Penginstalan macOS

  1. Download rilis ULS terbaru:

    curl -LO https://github.com/akamai/uls/releases/latest/download/uls-darwin-amd64
    
  2. Jadikan biner sebagai file yang dapat dieksekusi:

    chmod +x uls-darwin-amd64
    
  3. Pindahkan ke lokasi standar:

    sudo mv uls-darwin-amd64 /usr/local/bin/uls
    

Penginstalan Docker

  1. Tarik image Docker ULS resmi:

    docker pull akamai/uls:latest
    

Mengonfigurasi kredensial Akamai EdgeGrid

  1. Buat file kredensial EdgeGrid:

    mkdir -p ~/.edgerc
    nano ~/.edgerc
    
  2. Tambahkan kredensial Akamai API Anda dalam format berikut:

    [default]
    client_secret = your-client-secret
    host = akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net
    access_token = your-access-token
    client_token = your-client-token
    
  3. Amankan file kredensial:

    chmod 600 ~/.edgerc
    

Ganti kode berikut:

  • your-client-secret: Rahasia Klien Akamai Anda.
  • your-access-token: Token Akses Akamai Anda.
  • your-client-token: Token Klien Akamai Anda.
  • akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net: Nama host dasar Akamai API Anda.

Mengonfigurasi ULS untuk melakukan streaming log EAA ke BindPlane

Eksekusi command line (pengujian)

Jalankan ULS dengan output TCP untuk melakukan streaming log ke agen BindPlane:

  uls --input eaa \
      --feed access \
      --output tcp \
      --host <BINDPLANE_HOST> \
      --port 5140 \
      --edgerc ~/.edgerc \
      --section default
  • Ganti kode berikut:
    • <BINDPLANE_HOST>: Alamat IP atau nama host server yang menjalankan Bindplane
    • 5140: Port yang dikonfigurasi di penerima tcplog Bindplane

Untuk melakukan streaming beberapa jenis feed, jalankan instance ULS terpisah:

```bash
# Access logs
uls --input eaa --feed access --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default

# Admin audit logs
uls --input eaa --feed admin --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default

# Connector health
uls --input eaa --feed conhealth --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default
```

Layanan Systemd (produksi)

Untuk deployment produksi, konfigurasi ULS sebagai layanan systemd:

  1. Buat file konfigurasi ULS:

    sudo mkdir -p /etc/uls
    sudo nano /etc/uls/eaa-access-tcp.conf
    
  2. Tambahkan konfigurasi berikut:

    ULS_INPUT=eaa
    ULS_FEED=access
    ULS_OUTPUT=tcp
    ULS_HOST=<BINDPLANE_HOST>
    ULS_PORT=5140
    ULS_EDGERC=/root/.edgerc
    ULS_SECTION=default
    
  3. Buat file layanan systemd:

    sudo nano /etc/systemd/system/uls-eaa-access.service
    
  4. Tambahkan konten berikut:

    [Unit]
    Description=Unified Log Streamer - EAA Access Logs to BindPlane
    After=network.target
    
    [Service]
    Type=simple
    EnvironmentFile=/etc/uls/eaa-access-tcp.conf
    ExecStart=/usr/local/bin/uls --input ${ULS_INPUT} --feed ${ULS_FEED} --output ${ULS_OUTPUT} --host ${ULS_HOST} --port ${ULS_PORT} --edgerc ${ULS_EDGERC} --section ${ULS_SECTION}
    Restart=always
    RestartSec=10
    User=root
    
    [Install]
    WantedBy=multi-user.target
    
  5. Aktifkan dan mulai layanan:

    sudo systemctl daemon-reload
    sudo systemctl enable uls-eaa-access.service
    sudo systemctl start uls-eaa-access.service
    
  6. Pastikan layanan sedang berjalan:

    sudo systemctl status uls-eaa-access.service
    
  7. Melihat log:

    sudo journalctl -u uls-eaa-access.service -f
    

Ulangi langkah 1-7 untuk setiap jenis feed tambahan (admin, conhealth) dengan membuat file konfigurasi dan layanan terpisah dengan nama yang berbeda (misalnya, uls-eaa-admin.service, uls-eaa-conhealth.service).

Deployment Docker

  1. Buat file Docker Compose:

    nano docker-compose.yml
    
  2. Tambahkan konfigurasi berikut:

    version: '3.8'
    
    services:
      uls-eaa-access:
        image: akamai/uls:latest
        container_name: uls-eaa-access
        restart: unless-stopped
        environment:
          - ULS_INPUT=eaa
          - ULS_FEED=access
          - ULS_OUTPUT=tcp
          - ULS_HOST=<BINDPLANE_HOST>
          - ULS_PORT=5140
        volumes:
          - ~/.edgerc:/root/.edgerc:ro
        command: >
          --input eaa
          --feed access
          --output tcp
          --host "$${ULS_HOST}"
          --port "$${ULS_PORT}"
          --edgerc /root/.edgerc
          --section default
    
      uls-eaa-admin:
        image: akamai/uls:latest
        container_name: uls-eaa-admin
        restart: unless-stopped
        environment:
          - ULS_INPUT=eaa
          - ULS_FEED=admin
          - ULS_OUTPUT=tcp
          - ULS_HOST=<BINDPLANE_HOST>
          - ULS_PORT=5140
        volumes:
          - ~/.edgerc:/root/.edgerc:ro
        command: >
          --input eaa
          --feed admin
          --output tcp
          --host "$${ULS_HOST}"
          --port "$${ULS_PORT}"
          --edgerc /root/.edgerc
          --section default
    
      uls-eaa-conhealth:
        image: akamai/uls:latest
        container_name: uls-eaa-conhealth
        restart: unless-stopped
        environment:
          - ULS_INPUT=eaa
          - ULS_FEED=conhealth
          - ULS_OUTPUT=tcp
          - ULS_HOST=<BINDPLANE_HOST>
          - ULS_PORT=5140
        volumes:
          - ~/.edgerc:/root/.edgerc:ro
        command: >
          --input eaa
          --feed conhealth
          --output tcp
          --host "$${ULS_HOST}"
          --port "$${ULS_PORT}"
          --edgerc /root/.edgerc
          --section default
    
    • Ganti <BINDPLANE_HOST> dengan alamat IP atau nama host server Bindplane Anda.
  3. Mulai container:

    docker-compose up -d
    
  4. Melihat log:

    docker-compose logs -f
    

Tabel Pemetaan UDM

Kolom log Pemetaan UDM Logika
app target.application Nilai setelah titik dua di kolom app.
apphost target.hostname Dipetakan secara langsung.
browser network.http.user_agent Dipetakan secara langsung.
bytes_in network.received_bytes Dipetakan secara langsung.
bytes_out network.sent_bytes Dipetakan secara langsung.
cc principal.location.country_or_region Dipetakan secara langsung.
client_id additional.fields.key: "Client Id", additional.fields.value.string_value: client_id Dipetakan secara kondisional jika client_id ada.
clientip principal.ip Dipetakan secara langsung.
cloud_zone principal.cloud.availability_zone Dipetakan secara langsung.
connector_resp_time security_result.detection_fields.key: "Waktu respons konektor", security_result.detection_fields.value: connector_resp_time Dipetakan secara kondisional jika connector_resp_time tidak kosong atau "-".
content_type additional.fields.key: "Jenis konten", additional.fields.value.string_value: content_type Dipetakan secara kondisional jika content_type ada.
datetime metadata.event_timestamp Diuraikan dari kolom datetime menggunakan format RFC3339.
deny_reason security_result.summary Dipetakan secara langsung.
device_type principal.platform, principal.platform_version Dipetakan ke WINDOWS, LINUX, atau MAC berdasarkan pencocokan ekspresi reguler. Nilai mentah dipetakan ke principal.platform_version.
di metadata.ingestion_labels.key: "di", metadata.ingestion_labels.value: di Dipetakan secara langsung sebagai label penyerapan.
error_code additional.fields.key: "Error code", additional.fields.value.string_value: error_code Dipetakan secara kondisional jika error_code ada.
event metadata.description Dipetakan secara langsung.
geo_city principal.location.city Dipetakan secara langsung.
geo_country principal.location.country_or_region Dipetakan secara langsung.
geo_state principal.location.state Dipetakan secara langsung.
groups principal.user.group_identifiers Dipetakan secara langsung.
http_method network.http.method Dipetakan secara langsung.
http_ver network.application_protocol, network.application_protocol_version Diuraikan menggunakan grok untuk mengekstrak protokol dan versi.
idpinfo additional.fields.key: "Info IDP", additional.fields.value.string_value: idpinfo Dipetakan secara kondisional jika idpinfo ada.
internal_host additional.fields.key: "Internal host", additional.fields.value.string_value: internal_host Dipetakan secara kondisional jika internal_host ada.
metadata.log_type metadata.log_type Dikodekan secara permanen ke "AKAMAI_EAA".
metadata.product_name metadata.product_name Dikodekan secara permanen ke "AKAMAI_EAA".
metadata.vendor_name metadata.vendor_name Dikodekan secara permanen ke "AKAMAI_EAA".
metadata.event_type metadata.event_type Ditentukan oleh logika: USER_UNCATEGORIZED jika uid ada, NETWORK_HTTP jika principal.ip dan target ditetapkan, atau GENERIC_EVENT jika tidak.
origin_host additional.fields.key: "Origin host", additional.fields.value.string_value: origin_host Dipetakan secara kondisional jika origin_host ada.
origin_resp_time security_result.detection_fields.key: "Waktu respons asal", security_result.detection_fields.value: origin_resp_time Dipetakan secara kondisional jika origin_resp_time tidak kosong atau "-".
os principal.platform Dipetakan ke WINDOWS, MAC, atau LINUX berdasarkan pencocokan ekspresi reguler.
port target.port Nilai setelah titik dua di kolom app.
ral metadata.description Nilai yang digabungkan dari array ral, dipisahkan dengan koma.
referer network.http.referral_url Dipetakan secara langsung.
resource principal.resource.attribute.labels.key: "Resource", principal.resource.attribute.labels.value: resource Dipetakan secara kondisional jika resource ada.
resource_type principal.resource.attribute.labels.key: "Jenis Resource", principal.resource.attribute.labels.value: resource_type Dipetakan secara kondisional jika resource_type ada.
rscd metadata.ingestion_labels.key: "rscd", metadata.ingestion_labels.value: rscd Dipetakan secara langsung sebagai label penyerapan.
session_id network.session_id Dipetakan secara langsung.
session_info additional.fields.key: "Info sesi", additional.fields.value.string_value: session_info Dipetakan secara kondisional jika session_info ada.
state principal.location.state Dipetakan secara langsung.
status_code network.http.response_code Dipetakan secara langsung.
total_resp_time security_result.detection_fields.key: "Total response time", security_result.detection_fields.value: total_resp_time Dipetakan secara kondisional jika total_resp_time tidak kosong atau "-".
ts metadata.event_timestamp Diuraikan dari kolom ts sebagai milidetik atau detik UNIX jika ada, atau dari kolom datetime.
uid principal.user.userid Dipetakan secara langsung.
uip principal.ip Dipetakan secara langsung.
url_path target.url Dipetakan secara langsung.
user_agent network.http.user_agent, network.http.parsed_user_agent Dipetakan dan diuraikan secara langsung ke dalam kolom parsed_user_agent terstruktur.
username principal.user.email_addresses atau principal.user.userid Dipetakan ke email_addresses jika terlihat seperti email, atau ke userid.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.