Collect Akamai WAF logs
Parser Version: 32.0
This document explains how to ingest Akamai WAF logs to Google Security Operations using the Akamai CEF Connector and Bindplane. Akamai WAF is a cloud-based web application firewall that protects web applications and APIs against threats including SQL injection, cross-site scripting (XSS), and DDoS attacks. The Akamai CEF Connector pulls security events from the Akamai SIEM API in near real time and converts them from JSON to Common Event Format (CEF), which is then forwarded to Bindplane via syslog.
Before you begin
Make sure you have the following prerequisites:
- A Google SecOps instance.
- A Windows 2016 or later or Linux host with systemd for Bindplane agent installation.
- A Linux server (CentOS, RHEL, or Ubuntu recommended) with at least 2 CPU cores, 6 GB RAM, and 2 GB free disk space for the Akamai CEF Connector.
- Java 8 (JRE 1.8) or later installed on the CEF Connector host.
- If running behind a proxy, ensure firewall ports are open per the Bindplane agent requirements, and that the proxy allowlists
*.cloudsecurity.akamaiapis.netand*.luna.akamaiapis.net. - Privileged access to Akamai Control Center.
- An Akamai security configuration with App & API Protector, Kona Site Defender, Web Application Protector, Bot Manager, or Account Protector enabled.
Get Google SecOps ingestion authentication file
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Collection Agents.
- Download the Ingestion Authentication File.
- Save the file securely on the system where Bindplane will be installed.
Get Google SecOps customer ID
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Profile.
- Copy and save the Customer ID from the Organization Details section.
Enable SIEM integration in Akamai Control Center
- Sign in to Akamai Control Center.
- Go to WEB & DATA CENTER SECURITY > Security Configuration.
- Open the security configuration and the appropriate version for which you want to collect SIEM data.
- Click Advanced Settings and expand Data collection for SIEM Integrations.
- Click On to enable SIEM.
- Choose the security policies for which you want to export data:
- All Security policies: Sends SIEM data for events that violate any security policy within the security configuration.
- Specific security policies: Sends data for one or more specific security policies. Select the appropriate policies from the dropdown list.
- Copy the value in the Web Security Configuration ID field. Save this ID for later use.
Click Activate to push your security configuration changes to the production network. Under Network, click Production, and then click Activate.
Set up a user to manage SIEM in Akamai Control Center
- In Akamai Control Center, go to ACCOUNT ADMIN > Identity & access.
- On the Users and API Clients tab, find the user you want to assign the role to or click Create user.
- To assign the SIEM role to an existing user:
- Open the user's account and click the Edit roles tab.
- Find the appropriate group, click the Roles dropdown, and select the Manage SIEM role.
- Click Submit.
To assign the SIEM role to a new user:
- Click Create user.
- Enter basic information for the user and scroll down to the Assign Roles section.
- Find the appropriate group, click the Roles dropdown, and select the Manage SIEM role.
- Click Save.
Provision SIEM API credentials in Akamai Control Center
- Visit the Create authentication credentials page in Akamai documentation.
- Follow the steps to provision the SIEM API for the user you assigned to manage SIEM.
Copy and save the following credentials securely:
- Access Token
- Client Token
- Client Secret
- Base URL (host)
Install the Akamai CEF Connector
- On your Linux server, download the latest CEF Connector distribution package from the Akamai SIEM Integration Connector Packages GitHub repository.
- Transfer the package to your server if needed.
- Verify the SHA256 hash of the downloaded file to ensure integrity.
Unzip the distribution package:
unzip CEFConnector-<version>.zipNavigate to the extracted directory:
cd CEFConnector-<version>Create a symbolic link to the startup script to install the service:
sudo ln -s /path/to/CEFConnector-<version>/bin/AkamaiCEFConnector.sh /etc/init.d/AkamaiCEFConnector
Configure the Akamai CEF Connector
Navigate to the
configdirectory within the CEF Connector installation:cd /path/to/CEFConnector-<version>/configOpen the
CEFConnector.propertiesfile using a text editor:sudo nano CEFConnector.propertiesConfigure the following required parameters:
# Pull rate from Akamai source (in seconds, positive integer) connector.pull.interval=60 # Security Configuration IDs (semicolon-separated for multiple) akamai.data.configs=<YOUR_SECURITY_CONFIG_ID> # API Credentials akamai.data.accesstoken=<YOUR_ACCESS_TOKEN> akamai.data.clienttoken=<YOUR_CLIENT_TOKEN> akamai.data.clientsecret=<YOUR_CLIENT_SECRET> akamai.data.baseurl=<YOUR_BASE_URL> # Offset-based mode (recommended for continuous collection) akamai.data.timebased=false # Maximum number of events per API call akamai.data.limit=200000 # Proxy Configuration (leave blank if no proxy) # connector.proxy.host= # connector.proxy.port=Replace the following placeholders with your actual values:
<YOUR_SECURITY_CONFIG_ID>: The Web Security Configuration ID you copied in the Enable SIEM section. For multiple configurations, separate IDs with semicolons (for example,12345;67890).<YOUR_ACCESS_TOKEN>: The access token from Akamai API credentials.<YOUR_CLIENT_TOKEN>: The client token from Akamai API credentials.<YOUR_CLIENT_SECRET>: The client secret from Akamai API credentials.<YOUR_BASE_URL>: The base URL (host) from Akamai API credentials (for example,akab-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx.luna.akamaiapis.net).
Save and close the file.
Configure CEF Connector logging to forward syslog to Bindplane
- Navigate to the
configdirectory within the CEF Connector installation. Open the
log4j2.xmlfile using a text editor:sudo nano /path/to/CEFConnector-<version>/config/log4j2.xmlIn the Properties section near the top of the file, set the remote syslog server parameters to point to the Bindplane agent:
<!-- Syslog Appender Configuration --> <Syslog name="SyslogAppender" host="<BINDPLANE_IP_ADDRESS>" port="<BINDPLANE_PORT>" protocol="<PROTOCOL>" facility="LOCAL0" format="RFC 5424"> <PatternLayout pattern="%m%n"/> </Syslog>Replace the following placeholders:
<BINDPLANE_IP_ADDRESS>: The IP address of the server where the Bindplane agent is installed (for example,192.168.1.100).<BINDPLANE_PORT>: The port number where the Bindplane agent listens (for example,514for UDP or601for TCP).- Set
CEFProtocoltoUDPorTCPto match your Bindplane receiver configuration.
Save and close the file.
Start the Akamai CEF Connector
Start the CEF Connector service:
sudo /etc/init.d/AkamaiCEFConnector startVerify the service is running:
sudo /etc/init.d/AkamaiCEFConnector statusMonitor the logs to ensure the connector is pulling events from Akamai and forwarding them:
tail -f /path/to/CEFConnector-<version>/bin/logs/cefconnector.log
Install the Bindplane agent
Install the Bindplane agent on your Windows or Linux operating system according to the following instructions.
Windows installation
- Open the Command Prompt or PowerShell as an administrator.
Run the following command:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux installation
- Open a terminal with root or sudo privileges.
Run the following command:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Additional installation resources
For additional installation options, consult this installation guide.
Configure the Bindplane agent to ingest Syslog and send to Google SecOps
Access the Configuration File:
- Locate the
config.yamlfile. Typically, it's in the/status observiq-otel-collector/directory on Linux or in the installation directory on Windows. - Open the file using a text editor (for example,
nano,vi, or Notepad).
- Locate the
Edit the
config.yamlfile as follows:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in the Get ingestion authentication file section creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from the Get customer ID section customer_id: <PLACEHOLDER_CUSTOMER_ID> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'AKAMAI_WAF' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- Replace the port and IP address as required in your infrastructure.
- Replace
<PLACEHOLDER_CUSTOMER_ID>with the actual Customer ID. - Update
/path/to/ingestion-authentication-file.jsonto the file path where the authentication file was saved in the Get Google SecOps ingestion authentication file section.
Restart the Bindplane agent to apply the changes
To restart the Bindplane agent in Linux:
Run the following command:
sudo systemctl restart observiq-otel-collectorVerify the service is running:
sudo systemctl status observiq-otel-collectorCheck logs for errors:
sudo journalctl -u observiq-otel-collector -f
To restart the Bindplane agent in Windows:
Choose one of the following options:
- Command Prompt or PowerShell as administrator:
net stop observiq-otel-collector && net start observiq-otel-collector- Services console:
- Press
Win+R, typeservices.msc, and press Enter. - Locate observIQ OpenTelemetry Collector.
- Right-click and select Restart.
- Press
Verify the service is running:
sc query observiq-otel-collectorCheck logs for errors:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
UDM mapping table
| Log Field | UDM Mapping | Logic |
|---|---|---|
src (attackData.clientIP) |
principal.ip |
Source IP address of the client making the request |
c6a2 (ipv6src) |
principal.ip |
Source IPv6 address if attackData.clientIP is in IPv6 format |
dhost (httpMessage.host) |
target.hostname |
Hostname from the HTTP HOST header |
dpt (httpMessage.port) |
target.port |
Port number used by the incoming request |
requestMethod (httpMessage.method) |
network.http.method |
HTTP method of the incoming request (GET, POST, etc.) |
request (requestURL) |
target.url |
Calculated full URL from httpMessage fields |
cs1 (attackData.rules) |
security_result.rule_id |
Rule IDs of rules that triggered for this request |
cs2 (attackData.ruleMessages) |
security_result.rule_name |
Messages of rules that triggered |
act (appliedAction) |
security_result.action |
Action taken (alert, deny, abort, etc.) |
severity |
security_result.severity |
Calculated severity (5 for detect, 10 for mitigate) |
cs5 (attackData.clientReputation) |
security_result.threat_name |
Client IP scores for Client Reputation |
cs6 (attackData.apiId) |
security_result.detection_fields |
API ID for API Protection |
start (httpMessage.start) |
metadata.event_timestamp |
Time when the Edge Server initiated the connection (epoch format) |
devicePayloadId (httpMessage.requestId) |
metadata.product_log_id |
Globally unique ID of the message |
flexString1 (attackData.configId) |
security_result.detection_fields |
ID of the Security Configuration applied to this request |
flexString2 (attackData.policyId) |
security_result.detection_fields |
ID of the Firewall Policy applied to this request |
AkamaiSiemJA4 (identity.ja4) |
network.tls.client.ja3 |
JA4 client TLS fingerprint |
Change Log
View the Change Log for this parser
Need more help? Get answers from Community members and Google SecOps professionals.