Akamai EAA-Logs (Enterprise Application Access) erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Akamai Enterprise Application Access-Logs (EAA) mit dem Unified Log Streamer (ULS) von Akamai und Bindplane in Google Security Operations aufnehmen. Akamai EAA generiert Betriebsdaten in Form von Zugriffslogs, Administrator-Audit-Logs, Authentifizierungsdetails und Connector-Integritätsmesswerten. Der Parser extrahiert Felder aus den JSON-Logs, führt Datentransformationen wie Stringkonvertierungen und IP-Adressenextraktion durch und ordnet diese Felder dem UDM zu. Dabei werden verschiedene Ereignistypen wie NETWORK_HTTP und USER_UNCATEGORIZED anhand des Vorhandenseins bestimmter Felder verarbeitet. Außerdem werden dem UDM-Ereignis Metadaten wie Anbieter- und Produktnamen hinzugefügt.

Hinweise

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz
  • Ein Windows 2016- oder höher- oder Linux-Host mit systemd zum Ausführen des BindPlane-Agents
  • Linux, macOS oder eine containerisierte Umgebung (Docker/Kubernetes) zum Ausführen von Unified Log Streamer
  • Wenn Sie den Agent hinter einem Proxy ausführen, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.
  • Akamai EAA-Mandant mit Administratorzugriff
  • Akamai API-Anmeldedaten (EdgeGrid-Authentifizierung):
    • Access Token (Zugriffstoken)
    • Client-Token
    • Clientschlüssel
    • API-Basishostname (z. B. akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net)

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
  3. Laden Sie die Authentifizierungsdatei für die Aufnahme herunter. Speichern Sie die Datei sicher auf dem System, auf dem BindPlane installiert wird.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Profile auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

Installieren Sie den Bindplane-Agent auf Ihrem Windows- oder Linux-Betriebssystem gemäß der folgenden Anleitung.

Fenstereinbau

  1. Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
  2. Führen Sie dazu diesen Befehl aus:

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

Linux-Installation

  1. Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
  2. Führen Sie dazu diesen Befehl aus:

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

Zusätzliche Installationsressourcen

BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren

  1. Konfigurationsdatei aufrufen:

    1. Suchen Sie die Datei config.yaml. Normalerweise befindet sie sich unter Linux im Verzeichnis /etc/bindplane-agent/ oder unter Windows im Installationsverzeichnis.
    2. Öffnen Sie die Datei mit einem Texteditor (z. B. nano, vi oder Notepad).
  2. Bearbeiten Sie die Datei config.yamlso:

    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
    
    • Dabei gilt:
      • Ersetzen Sie <CUSTOMER_ID> durch die tatsächliche Kunden-ID.
      • Aktualisieren Sie /path/to/ingestion-authentication-file.json auf den Pfad, in dem die Authentifizierungsdatei im Abschnitt Get Google SecOps ingestion authentication file (Authentifizierungsdatei für die Google SecOps-Aufnahme abrufen) gespeichert wurde.
      • 0.0.0.0:5140: Die IP-Adresse und der Port, an dem Bindplane auf Anfragen wartet. Passen Sie die Einstellungen nach Bedarf an Ihre Umgebung an.

Bindplane-Agent neu starten, um die Änderungen zu übernehmen

  • Führen Sie den folgenden Befehl aus, um den Bindplane-Agent unter Linux neu zu starten:

    sudo systemctl restart bindplane-agent
    
  • Um den Bindplane-Agent unter Windows neu zu starten, können Sie entweder die Konsole Dienste verwenden oder den folgenden Befehl eingeben:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Akamai Unified Log Streamer installieren

Unified Log Streamer (ULS) ruft Logs über die Enterprise Application Access API von Akamai EAA ab und streamt sie über TCP oder UDP an Bindplane.

Linux-Installation

  1. Laden Sie den aktuellen ULS-Release herunter:

    curl -LO https://github.com/akamai/uls/releases/latest/download/uls-linux-amd64
    
  2. So machen Sie die Binärdatei ausführbar:

    chmod +x uls-linux-amd64
    
  3. Verschieben Sie sie an einen Standardspeicherort:

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

Installation unter macOS

  1. Laden Sie den aktuellen ULS-Release herunter:

    curl -LO https://github.com/akamai/uls/releases/latest/download/uls-darwin-amd64
    
  2. So machen Sie die Binärdatei ausführbar:

    chmod +x uls-darwin-amd64
    
  3. Verschieben Sie sie an einen Standardspeicherort:

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

Docker-Installation

  1. Rufen Sie das offizielle ULS-Docker-Image ab:

    docker pull akamai/uls:latest
    

Akamai EdgeGrid-Anmeldedaten konfigurieren

  1. Erstellen Sie die EdgeGrid-Datei mit Anmeldedaten:

    mkdir -p ~/.edgerc
    nano ~/.edgerc
    
  2. Fügen Sie Ihre Akamai API-Anmeldedaten im folgenden Format hinzu:

    [default]
    client_secret = your-client-secret
    host = akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net
    access_token = your-access-token
    client_token = your-client-token
    
  3. Datei mit Anmeldedaten sichern:

    chmod 600 ~/.edgerc
    

Ersetzen Sie Folgendes:

  • your-client-secret: Ihr Akamai-Clientschlüssel.
  • your-access-token: Ihr Akamai-Zugriffstoken.
  • your-client-token: Ihr Akamai-Client-Token.
  • akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net: Der Akamai-API-Basishostname.

ULS für das Streamen von EAA-Logs an BindPlane konfigurieren

Ausführung über die Befehlszeile (Tests)

Führen Sie ULS mit TCP-Ausgabe aus, um Logs an den BindPlane-Agent zu streamen:

  uls --input eaa \
      --feed access \
      --output tcp \
      --host <BINDPLANE_HOST> \
      --port 5140 \
      --edgerc ~/.edgerc \
      --section default
  • Dabei gilt:
    • <BINDPLANE_HOST>: Die IP-Adresse oder der Hostname des Servers, auf dem Bindplane ausgeführt wird
    • 5140: Der im tcplog-Empfänger von BindPlane konfigurierte Port

Wenn Sie mehrere Feedtypen streamen möchten, führen Sie separate ULS-Instanzen aus:

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

Systemd-Dienst (Produktion)

Konfigurieren Sie für Produktionsbereitstellungen ULS als systemd-Dienst:

  1. Erstellen Sie eine ULS-Konfigurationsdatei:

    sudo mkdir -p /etc/uls
    sudo nano /etc/uls/eaa-access-tcp.conf
    
  2. Fügen Sie die folgende Konfiguration hinzu:

    ULS_INPUT=eaa
    ULS_FEED=access
    ULS_OUTPUT=tcp
    ULS_HOST=<BINDPLANE_HOST>
    ULS_PORT=5140
    ULS_EDGERC=/root/.edgerc
    ULS_SECTION=default
    
  3. Erstellen Sie eine systemd-Dienstdatei:

    sudo nano /etc/systemd/system/uls-eaa-access.service
    
  4. Fügen Sie den folgenden Inhalt hinzu:

    [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. Aktivieren und starten Sie den Dienst:

    sudo systemctl daemon-reload
    sudo systemctl enable uls-eaa-access.service
    sudo systemctl start uls-eaa-access.service
    
  6. Prüfen Sie, ob der Dienst ausgeführt wird:

    sudo systemctl status uls-eaa-access.service
    
  7. Logs ansehen:

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

Wiederholen Sie die Schritte 1 bis 7 für jeden zusätzlichen Feedtyp (admin, conhealth), indem Sie separate Konfigurations- und Dienstdateien mit unterschiedlichen Namen erstellen (z. B. uls-eaa-admin.service, uls-eaa-conhealth.service).

Docker-Bereitstellung

  1. Docker Compose-Datei erstellen:

    nano docker-compose.yml
    
  2. Fügen Sie die folgende Konfiguration hinzu:

    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
    
    • Ersetzen Sie <BINDPLANE_HOST> durch die IP-Adresse oder den Hostnamen Ihres Bindplane-Servers.
  3. Starten Sie die Container:

    docker-compose up -d
    
  4. Logs ansehen:

    docker-compose logs -f
    

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
app target.application Der Wert nach dem Doppelpunkt im Feld app.
apphost target.hostname Direkt zugeordnet.
browser network.http.user_agent Direkt zugeordnet.
bytes_in network.received_bytes Direkt zugeordnet.
bytes_out network.sent_bytes Direkt zugeordnet.
cc principal.location.country_or_region Direkt zugeordnet.
client_id additional.fields.key: „Client Id“, additional.fields.value.string_value: client_id Wird bedingt zugeordnet, wenn client_id vorhanden ist.
clientip principal.ip Direkt zugeordnet.
cloud_zone principal.cloud.availability_zone Direkt zugeordnet.
connector_resp_time security_result.detection_fields.key: „Connector response time“ (Antwortzeit des Connectors), security_result.detection_fields.value: connector_resp_time Wird nur zugeordnet, wenn connector_resp_time nicht leer oder „-“ ist.
content_type additional.fields.key: „Content-Typ“, additional.fields.value.string_value: content_type Wird bedingt zugeordnet, wenn content_type vorhanden ist.
datetime metadata.event_timestamp Wird aus dem Feld datetime im RFC3339-Format geparst.
deny_reason security_result.summary Direkt zugeordnet.
device_type principal.platform, principal.platform_version Wird basierend auf dem Abgleich mit regulären Ausdrücken WINDOWS, LINUX oder MAC zugeordnet. Der Rohwert wird principal.platform_version zugeordnet.
di metadata.ingestion_labels.key: „di“, metadata.ingestion_labels.value: di Direkt als Ingestionslabel zugeordnet.
error_code additional.fields.key: „Fehlercode“, additional.fields.value.string_value: error_code Wird bedingt zugeordnet, wenn error_code vorhanden ist.
event metadata.description Direkt zugeordnet.
geo_city principal.location.city Direkt zugeordnet.
geo_country principal.location.country_or_region Direkt zugeordnet.
geo_state principal.location.state Direkt zugeordnet.
groups principal.user.group_identifiers Direkt zugeordnet.
http_method network.http.method Direkt zugeordnet.
http_ver network.application_protocol, network.application_protocol_version Mit grok geparst, um Protokoll und Version zu extrahieren.
idpinfo additional.fields.key: „IDP Info“, additional.fields.value.string_value: idpinfo Wird bedingt zugeordnet, wenn idpinfo vorhanden ist.
internal_host additional.fields.key: „Interner Host“, additional.fields.value.string_value: internal_host Wird bedingt zugeordnet, wenn internal_host vorhanden ist.
metadata.log_type metadata.log_type Fest codiert auf „AKAMAI_EAA“.
metadata.product_name metadata.product_name Fest codiert auf „AKAMAI_EAA“.
metadata.vendor_name metadata.vendor_name Fest codiert auf „AKAMAI_EAA“.
metadata.event_type metadata.event_type Wird durch die Logik bestimmt: USER_UNCATEGORIZED, wenn uid vorhanden ist, NETWORK_HTTP, wenn sowohl principal.ip als auch target festgelegt sind, oder GENERIC_EVENT andernfalls.
origin_host additional.fields.key: „Origin host“, additional.fields.value.string_value: origin_host Wird bedingt zugeordnet, wenn origin_host vorhanden ist.
origin_resp_time security_result.detection_fields.key: „Origin response time“ (Antwortzeit des Ursprungs), security_result.detection_fields.value: origin_resp_time Wird nur zugeordnet, wenn origin_resp_time nicht leer oder „-“ ist.
os principal.platform Wird basierend auf dem Abgleich mit regulären Ausdrücken WINDOWS, MAC oder LINUX zugeordnet.
port target.port Der Wert nach dem Doppelpunkt im Feld app.
ral metadata.description Verkettete Werte des ral-Arrays, durch Kommas getrennt.
referer network.http.referral_url Direkt zugeordnet.
resource principal.resource.attribute.labels.key: „Resource“, principal.resource.attribute.labels.value: resource Wird bedingt zugeordnet, wenn resource vorhanden ist.
resource_type principal.resource.attribute.labels.key: „Resource Type“ (Ressourcentyp), principal.resource.attribute.labels.value: resource_type Wird bedingt zugeordnet, wenn resource_type vorhanden ist.
rscd metadata.ingestion_labels.key: „rscd“, metadata.ingestion_labels.value: rscd Direkt als Ingestionslabel zugeordnet.
session_id network.session_id Direkt zugeordnet.
session_info additional.fields.key: „Sitzungsinformationen“, additional.fields.value.string_value: session_info Wird bedingt zugeordnet, wenn session_info vorhanden ist.
state principal.location.state Direkt zugeordnet.
status_code network.http.response_code Direkt zugeordnet.
total_resp_time security_result.detection_fields.key: „Gesamte Reaktionszeit“, security_result.detection_fields.value: total_resp_time Wird nur zugeordnet, wenn total_resp_time nicht leer oder „-“ ist.
ts metadata.event_timestamp Wird aus dem Feld ts als UNIX-Millisekunden oder -Sekunden geparst, falls vorhanden, andernfalls aus dem Feld datetime.
uid principal.user.userid Direkt zugeordnet.
uip principal.ip Direkt zugeordnet.
url_path target.url Direkt zugeordnet.
user_agent network.http.user_agent, network.http.parsed_user_agent Direkt zugeordnet und in ein strukturiertes parsed_user_agent-Feld geparst.
username principal.user.email_addresses oder principal.user.userid Wird email_addresses zugeordnet, wenn es wie eine E-Mail-Adresse aussieht, andernfalls userid.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten