Mengumpulkan log Akamai Enterprise Application Access

Versi Parser: 3.0

Didukung di:

Dokumen ini menjelaskan cara menyerap log Akamai Enterprise Application Access (EAA) ke Google Security Operations menggunakan Akamai Unified Log Streamer (ULS) dan Bindplane. Akamai EAA adalah solusi akses jaringan zero-trust yang menyediakan akses aman dan berbasis identitas ke aplikasi perusahaan tanpa VPN tradisional. EAA menghasilkan data operasional dalam bentuk log akses, log audit admin, metrik kondisi konektor, inventaris perangkat, dan informasi kondisi direktori. 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 termasuk NETWORK_HTTP dan USER_UNCATEGORIZED berdasarkan keberadaan kolom tertentu.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps.
  • Host Windows Server 2016 atau yang lebih baru, atau Linux dengan systemd untuk menjalankan agen Bindplane.
  • Host Linux dengan Python 3.9 atau yang lebih baru, atau lingkungan yang di-container (Docker atau 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 API Akamai:

    • Untuk feed audit akses dan admin: Kunci API dan Rahasia Lama EAA (dibuat di Enterprise Center).
    • Untuk feed kondisi konektor, inventaris perangkat, dan kondisi direktori: Kredensial Akamai OPEN API (autentikasi EdgeGrid) dengan akses BACA-TULIS ke Enterprise Application Access API.

Mendapatkan kredensial Google SecOps untuk agen Bindplane

Untuk mengautentikasi agen Bindplane ke Google SecOps, pilih salah satu metode berikut:

  • Deployment baru: Gunakan Chronicle API (Opsi 1).
  • Deployment lama: Terus gunakan file autentikasi penyerapan (Opsi 2) hingga Ingestion API dihentikan pada 20 Juli 2027.
  1. Login ke konsolGoogle Cloud dan pilih project Google Cloud yang ditautkan ke instance Google SecOps Anda.
  2. Buka IAM & Admin > Service Accounts.
  3. Klik Create service account.
  4. Berikan detail konfigurasi berikut:
    • Service account name: Masukkan nama akun (misalnya, bindplane-ingest).
    • Deskripsi akun layanan: Masukkan deskripsi (misalnya, Bindplane agent log ingestion).
  5. Klik Create and continue.
  6. Di bagian Grant this service account access to project, klik Select a role, lalu pilih Chronicle Editor.
  7. Klik Continue lalu klik Done.
  8. Klik akun layanan yang Anda buat, lalu buka tab Keys.
  9. Klik Add key > Create new key.
  10. Pilih JSON, lalu klik Create. File kunci didownload ke komputer Anda.
  11. Simpan file kunci sebagai ingestion-auth.json di direktori pengumpul Bindplane (/opt/observiq-otel-collector/ingestion-auth.json di Linux atau C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json di Windows), atau perbarui creds_file_path di config.yaml agar cocok dengan jalur tempat Anda menyimpannya.
  12. Buka IAM & Admin > Settings dan salin Project number. Anda akan memerlukannya untuk konfigurasi pengekspor.

Opsi 2: Mendownload file autentikasi penyerapan (lama)

  1. Login ke konsol Google SecOps.
  2. Buka SIEM Settings > Collection Agents.
  3. Download file autentikasi penyerapan.
  4. Simpan file dengan aman di sistem tempat agen 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

Untuk opsi penginstalan tambahan, lihat Panduan penginstalan agen BindPlane.

Mengonfigurasi agen Bindplane untuk menyerap log dan mengirimkannya ke Google SecOps

  1. Buka file konfigurasi agen Bindplane di editor teks:

    Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    

    Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    
  2. Edit file config.yaml sebagai berikut:

    receivers:
      tcplog:
        listen_address: "0.0.0.0:5140"
    
    exporters:
      chronicle/akamai_eaa:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.googleapis.com
        log_type: 'AKAMAI_EAA'
        raw_log_field: body
        ingestion_labels:
          source: akamai_eaa
    
    service:
      pipelines:
        logs/akamai_eaa:
          receivers:
            - tcplog
          exporters:
            - chronicle/akamai_eaa
    

Ganti kode berikut:

  • /path/to/ingestion-authentication-file.json: Jalur lengkap ke file kunci JSON akun layanan (Opsi 1).
    • Linux: /opt/observiq-otel-collector/ingestion-auth.json
    • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
  • Ganti <LOCATION> dengan region instance Google SecOps Anda (misalnya, us, europe, atau asia-southeast1). Pengekspor akan mengawali chronicle.googleapis.com dengan nilai ini.
  • Ganti <PROJECT_NUMBER> dengan nomor project dari IAM & Admin > Settings.
  • <CUSTOMER_ID>: ID pelanggan Google SecOps.
  • 0.0.0.0:5140: Alamat IP dan port yang akan diproses oleh Bindplane. Sesuaikan sesuai kebutuhan untuk lingkungan Anda.

Pengekspor API penyerapan lama

  • Jika Anda menggunakan file autentikasi penyerapan dari Opsi 2, ganti blok exporters dengan kode berikut. Tetapkan creds_file_path ke jalur ke file autentikasi penyerapan, dan jika instance Anda berada di luar AS, ganti malachiteingestion-pa.googleapis.com dengan endpoint regional Anda (misalnya, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/akamai_eaa:
        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
    

Mulai ulang agen Bindplane untuk menerapkan perubahan

Untuk memulai ulang agen Bindplane di Linux:

  1. Jalankan perintah berikut:

    sudo systemctl restart observiq-otel-collector
    
  2. Pastikan layanan sedang berjalan:

    sudo systemctl status observiq-otel-collector
    
  3. Periksa log untuk mengetahui error:

    sudo journalctl -u observiq-otel-collector -f
    

Untuk memulai ulang agen Bindplane di Windows:

  1. Pilih salah satu opsi berikut:

    • Command Prompt atau PowerShell sebagai administrator:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Konsol layanan:
      1. Tekan Win+R, ketik services.msc, lalu tekan Enter.
      2. Cari observIQ OpenTelemetry Collector.
      3. Klik kanan, lalu pilih Mulai ulang.
  2. Pastikan layanan sedang berjalan:

    sc query observiq-otel-collector
    
  3. Periksa log untuk mengetahui error:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

Membuat kredensial Akamai API

Akamai EAA menggunakan dua jenis kredensial API, bergantung pada jenis feed. Buat kredensial yang sesuai dengan feed yang ingin Anda kumpulkan.

Membuat kredensial EAA Legacy API (untuk feed akses dan admin)

  1. Login ke Akamai Control Center.
  2. Pilih Enterprise Center dari menu navigasi utama di sebelah kiri.
  3. Buka Setelan Umum > Setelan.
  4. Pilih tab Kunci API.
  5. Klik Generate new API Key di pojok kanan atas.
  6. Masukkan nama dan deskripsi untuk kunci API.
  7. Di layar konfirmasi, salin Key dan Secret.

Membuat kredensial Akamai OPEN API (untuk feed kondisi konektor, inventaris perangkat, dan kondisi direktori)

  1. Login ke Akamai Control Center.
  2. Buka Admin Akun > Identitas dan akses.
  3. Pilih tab Pengguna API.
  4. Klik Create API Client.
  5. Di bagian Select APIs, telusuri Enterprise Application Access dan tetapkan tingkat akses ke READ-WRITE.
  6. Lengkapi setelan lainnya, lalu klik Create API client.
  7. Klik Download untuk mendownload kredensial dalam format .edgerc, atau klik Salin untuk menyalinnya ke file .edgerc yang ada.

Mengonfigurasi file kredensial .edgerc

  1. Buat file kredensial .edgerc di sistem tempat ULS akan berjalan:

    touch ~/.edgerc
    
  2. Buka file di editor teks:

    nano ~/.edgerc
    
  3. Tambahkan kredensial Akamai API Anda dalam format berikut:

    [default]
    ; EAA Legacy API credentials (for access and admin feeds)
    eaa_api_host = manage.akamai-access.com
    eaa_api_key = <EAA_API_KEY>
    eaa_api_secret = <EAA_API_SECRET>
    
    ; Akamai OPEN API credentials (for conhealth, devinv, dirhealth feeds)
    host = <OPEN_API_HOST>
    client_token = <CLIENT_TOKEN>
    client_secret = <CLIENT_SECRET>
    access_token = <ACCESS_TOKEN>
    
  4. Amankan file kredensial:

    chmod 600 ~/.edgerc
    

Ganti kode berikut:

  • <EAA_API_KEY>: Kunci API Lama EAA (misalnya, XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).
  • <EAA_API_SECRET>: Rahasia API EAA Legacy.
  • <OPEN_API_HOST>: Nama host Akamai OPEN API Anda (misalnya, akaa-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net).
  • <CLIENT_TOKEN>: Token klien Akamai OPEN API Anda (misalnya, akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx).
  • <CLIENT_SECRET>: Rahasia klien Akamai OPEN API Anda.
  • <ACCESS_TOKEN>: Token akses Akamai OPEN API Anda (misalnya, akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx).

Menginstal Akamai Unified Log Streamer

Unified Log Streamer (ULS) menarik log dari Akamai EAA melalui Akamai API dan mengalirkan log tersebut ke agen Bindplane menggunakan TCP. ULS adalah aplikasi Python yang memerlukan Python 3.9 atau yang lebih baru.

Penginstalan Linux (Python)

  1. Buat clone repositori ULS:

    git clone https://github.com/akamai/uls.git
    cd uls
    
  2. Instal persyaratan Python ULS:

    pip3 install -r bin/requirements.txt
    
  3. Instal dependensi CLI EAA:

    git clone --depth 1 --single-branch https://github.com/akamai/cli-eaa.git ext/cli-eaa
    pip3 install -r ext/cli-eaa/requirements.txt
    
  4. Verifikasi penginstalannya:

    python3 bin/uls.py --help
    

Penginstalan Docker

  1. Tarik image Docker ULS resmi:

    docker pull akamai/uls:latest
    

Mengonfigurasi ULS untuk melakukan streaming log EAA ke BindPlane

Eksekusi command line (pengujian)

  • Jalankan ULS dengan output TCP untuk mengalirkan log ke agen Bindplane:

    python3 bin/uls.py --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 agen Bindplane.
  • 5140: Port yang dikonfigurasi di penerima tcplog Bindplane.

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

    # Access logs
    python3 bin/uls.py --input eaa --feed access --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default
    
    # Admin audit logs
    python3 bin/uls.py --input eaa --feed admin --output tcp --host <BINDPLANE_HOST> --port 5140 --edgerc ~/.edgerc --section default
    
    # Connector health
    python3 bin/uls.py --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/bin/python3 /opt/uls/bin/uls.py --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 Compose

  1. Buat file docker-compose.yml:

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

Ganti <BINDPLANE_HOST> dengan alamat IP atau nama host server agen Bindplane.

  1. Mulai container:

    docker compose up -d
    
  2. 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.recieved_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 bersyarat 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 Diurai dari kolom datetime menggunakan format RFC 3339.
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 langsung sebagai label penyerapan.
error_code additional.fields.key: "Kode error", 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 Diurai menggunakan grok untuk mengekstrak protokol dan versi.
idpinfo additional.fields.key: "Info IDP", additional.fields.value.string_value: idpinfo Dipetakan secara bersyarat jika idpinfo ada.
internal_host additional.fields.key: "Host internal", 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 Diprogram secara permanen ke "AKAMAI_EAA".
metadata.vendor_name metadata.vendor_name Diprogram 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 disetel, 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 bersyarat 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, yang 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 bersyarat jika resource ada.
resource_type principal.resource.attribute.labels.key: "Jenis Resource", principal.resource.attribute.labels.value: resource_type Dipetakan secara bersyarat jika resource_type ada.
rscd metadata.ingestion_labels.key: "rscd", metadata.ingestion_labels.value: rscd Dipetakan 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 bersyarat 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 bersyarat jika total_resp_time tidak kosong atau "-".
ts metadata.event_timestamp Diurai dari kolom ts sebagai milidetik atau detik UNIX jika ada, jika tidak, 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 langsung ke kolom parsed_user_agent terstruktur.
username principal.user.email_addresses atau principal.user.userid Dipetakan ke email_addresses jika terlihat seperti email, jika tidak, dipetakan ke userid.

Log Perubahan

Melihat Log Perubahan untuk parser ini

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