Collect Guardicore Centra logs
This document explains how to configure Guardicore Centra (now Akamai Guardicore Segmentation) to push logs into Google Security Operations using the Akamai Unified Log Streamer (ULS) with HTTP output.
Guardicore Centra is a micro-segmentation platform that provides Zero Trust network security for data centers, cloud environments, and endpoints. It delivers visibility into application dependencies, breach detection through deception technology, and granular segmentation controls to prevent lateral movement and contain threats.
Before you begin
Make sure you have the following prerequisites:
- A Google SecOps instance
- A Guardicore Centra instance (cloud or on-premises)
- A Linux server to run Akamai ULS (minimum: 1 vCPU, 1 GB RAM, 500 MB disk)
- Python 3.9 or later installed on the ULS server
- Guardicore Centra administrator credentials (username and password)
- Outbound HTTPS access from the ULS server to Google SecOps ingestion endpoints
- Access to Google Cloud Console (for API key creation)
Create webhook feed in Google SecOps
Create the feed
- Go to SIEM Settings > Feeds.
- Click Add New Feed.
- On the next page, click Configure a single feed.
- In the Feed namefield, enter a name for the feed (for example,
Guardicore Centra Logs). - Select Webhookas the Source type.
- Select Guardicore Centraas the Log type.
- Click Next.
-
Specify values for the following input parameters:
- Split delimiter: Enter
\nto split multi-line events (ULS sends newline-delimited JSON) - Asset namespace: The asset namespace
- Ingestion labels: The label to be applied to the events from this feed
- Split delimiter: Enter
-
Click Next.
-
Review your new feed configuration in the Finalizescreen, and then click Submit.
Generate and save secret key
After creating the feed, you must generate a secret key for authentication:
- On the feed details page, click Generate Secret Key.
- A dialog displays the secret key.
-
Copy and savethe secret key securely.
Get the feed endpoint URL
- Go to the Detailstab of the feed.
- In the Endpoint Informationsection, copy the Feed endpoint URL.
-
The URL format is:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateor
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate -
Save this URL for the next steps.
-
Click Done.
Create Google Cloud API key
Google SecOps requires an API key for authentication. Create a restricted API key in the Google Cloud Console.
Create the API key
- Go to the Google Cloud Console Credentials page .
- Select your project (the project associated with your Google SecOps instance).
- Click Create credentials > API key.
- An API key is created and displayed in a dialog.
- Click Edit API keyto restrict the key.
Restrict the API key
- In the API keysettings page:
- Name: Enter a descriptive name (for example,
Google SecOps Guardicore Webhook API Key)
- Name: Enter a descriptive name (for example,
- Under API restrictions:
- Select Restrict key.
- In the Select APIsdropdown, search for and select Google SecOps API(or Chronicle API).
- Click Save.
- Copythe API key value from the API keyfield at the top of the page.
-
Save the API key securely.
Configure Guardicore Centra credentials
Create .edgerc file for Guardicore authentication
Akamai ULS uses a configuration file to store Guardicore credentials.
-
On the ULS server, create the
.edgercfile in the home directory:nano ~/.edgerc -
Add the following configuration:
[default] linode_hostname = your-instance.cloud.guardicore.com linode_token = your_username:your_passwordReplace the following values:
-
your-instance.cloud.guardicore.com: Your Guardicore Centra instance hostname (withouthttps://) -
your_username: Your Guardicore administrator username -
your_password: Your Guardicore administrator password
Example for US region:
[default] linode_hostname = cus-1234.cloud.guardicore.com linode_token = admin@company.com:MySecurePassword123 -
-
Save and close the file.
-
Set appropriate permissions:
chmod 600 ~/.edgerc
Install Akamai Unified Log Streamer
Install ULS from GitHub
-
On the ULS server, clone the ULS repository:
git clone https://github.com/akamai/uls.git cd uls -
Install Python dependencies:
pip3 install -r requirements.txt -
Install the Guardicore log fetcher module:
git clone -q --depth 1 -b main https://github.com/guardicore/log-fetcher.git ext/cli-gc pip3 install -r ext/cli-gc/requirements.txt -
Verify the installation:
python3 bin/uls.py --help
Configure ULS to send logs to Google SecOps
Construct the Google SecOps webhook URL
-
Combine the Google SecOps endpoint URL and API key:
<ENDPOINT_URL>?key=<API_KEY>Example:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
Run ULS for Guardicore NETLOG feed
The NETLOG feed contains network flow logs from Guardicore agents.
-
Run ULS with the following command:
python3 bin/uls.py \ --input gc \ --feed NETLOG \ --output http \ --httpurl "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ --httpauthheader '{"x-chronicle-auth": "YOUR_SECRET_KEY"}' \ --httpformat '%s'Replace the following values:
-
YOUR_API_KEY: The Google Cloud API key created earlier -
YOUR_SECRET_KEY: The Google SecOps secret key generated earlier
-
-
ULS will start streaming NETLOG events to Google SecOps.
Run ULS for Guardicore INCIDENT feed
The INCIDENT feed contains security incidents detected by Guardicore.
-
Run ULS with the following command:
python3 bin/uls.py \ --input gc \ --feed INCIDENT \ --output http \ --httpurl "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ --httpauthheader '{"x-chronicle-auth": "YOUR_SECRET_KEY"}' \ --httpformat '%s'Replace the following values:
-
YOUR_API_KEY: The Google Cloud API key created earlier -
YOUR_SECRET_KEY: The Google SecOps secret key generated earlier
-
-
ULS will start streaming INCIDENT events to Google SecOps.
Run ULS for Guardicore AGENT feed
The AGENT feed contains agent status and health information.
-
Run ULS with the following command:
python3 bin/uls.py \ --input gc \ --feed AGENT \ --output http \ --httpurl "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ --httpauthheader '{"x-chronicle-auth": "YOUR_SECRET_KEY"}' \ --httpformat '%s'Replace the following values:
-
YOUR_API_KEY: The Google Cloud API key created earlier -
YOUR_SECRET_KEY: The Google SecOps secret key generated earlier
-
-
ULS will start streaming AGENT events to Google SecOps.
Run ULS for Guardicore SYSTEM feed
The SYSTEM feed contains system alerts and events.
-
Run ULS with the following command:
python3 bin/uls.py \ --input gc \ --feed SYSTEM \ --output http \ --httpurl "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ --httpauthheader '{"x-chronicle-auth": "YOUR_SECRET_KEY"}' \ --httpformat '%s'Replace the following values:
-
YOUR_API_KEY: The Google Cloud API key created earlier -
YOUR_SECRET_KEY: The Google SecOps secret key generated earlier
-
-
ULS will start streaming SYSTEM events to Google SecOps.
Run ULS for Guardicore AUDIT feed
The AUDIT feed contains audit logs of administrative actions.
-
Run ULS with the following command:
python3 bin/uls.py \ --input gc \ --feed AUDIT \ --output http \ --httpurl "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ --httpauthheader '{"x-chronicle-auth": "YOUR_SECRET_KEY"}' \ --httpformat '%s'Replace the following values:
-
YOUR_API_KEY: The Google Cloud API key created earlier -
YOUR_SECRET_KEY: The Google SecOps secret key generated earlier
-
-
ULS will start streaming AUDIT events to Google SecOps.
Run ULS as a background service
To ensure ULS runs continuously, configure it as a systemd service.
Create systemd service file for NETLOG feed
-
Create a service file:
sudo nano /etc/systemd/system/uls-guardicore-netlog.service -
Add the following content:
[Unit] Description = Akamai ULS - Guardicore NETLOG After = network.target [Service] Type = simple User = root WorkingDirectory = /root/uls ExecStart=/usr/bin/python3 /root/uls/bin/uls.py --input gc --feed NETLOG --output http --httpurl "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" --httpauthheader '{"x-chronicle-auth" : "YOUR_SECRET_KEY" }' --httpformat '%%s' Restart = always RestartSec = 10 [Install] WantedBy = multi-user.targetReplace the following values:
-
/root/uls: The path where you cloned the ULS repository -
YOUR_API_KEY: The Google Cloud API key -
YOUR_SECRET_KEY: The Google SecOps secret key
-
-
Save and close the file.
-
Enable and start the service:
sudo systemctl daemon-reload sudo systemctl enable uls-guardicore-netlog.service sudo systemctl start uls-guardicore-netlog.service -
Check the service status:
sudo systemctl status uls-guardicore-netlog.service
Create additional services for other feeds
Repeat the above steps for each feed you want to collect (INCIDENT, AGENT, SYSTEM, AUDIT), creating separate service files:
-
/etc/systemd/system/uls-guardicore-incident.service -
/etc/systemd/system/uls-guardicore-agent.service -
/etc/systemd/system/uls-guardicore-system.service -
/etc/systemd/system/uls-guardicore-audit.service
Change the --feed
parameter and service name accordingly in each file.
Verify log ingestion
- Wait for 5-10 minutes for logs to be ingested and processed.
- In the Google SecOps console, go to Search.
-
Run the following UDM search query:
metadata.vendor_name = "Guardicore" -
If logs are ingested successfully, you should see Guardicore events in the search results.
-
You can also search for specific feed types:
metadata.vendor_name = "Guardicore" AND metadata.product_name = "Centra"
Troubleshooting
ULS connection errors
If ULS fails to connect to Guardicore:
- Verify the
.edgercfile contains the correct hostname and credentials. -
Test connectivity to your Guardicore instance:
curl -u "username:password" https://your-instance.cloud.guardicore.com/api/v3.0/visibility -
Check that the Guardicore instance is accessible from the ULS server.
ULS HTTP output errors
If ULS fails to send logs to Google SecOps:
- Verify the API key and secret key are correct.
- Check that the Google SecOps endpoint URL is correct for your region.
-
Verify outbound HTTPS connectivity from the ULS server:
curl -I https://malachiteingestion-pa.googleapis.com -
Review ULS logs for error messages:
sudo journalctl -u uls-guardicore-netlog.service -f
No logs appearing in Google SecOps
If logs are not appearing in Google SecOps:
- Verify the webhook feed is in Activestatus in SIEM Settings > Feeds.
- Check the feed's Healthtab for ingestion errors.
- Verify the split delimiter is set to
\nin the feed configuration. - Ensure the log type is set to Guardicore Centra.
Self-signed certificate errors
If your Guardicore instance uses a self-signed certificate, ULS may fail with SSL verification errors. To bypass SSL verification (not recommended for production):
-
Add the
--httpinsecureflag to the ULS command:python3 bin/uls.py \ --input gc \ --feed NETLOG \ --output http \ --httpurl "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ --httpauthheader '{"x-chronicle-auth": "YOUR_SECRET_KEY"}' \ --httpformat '%s' \ --httpinsecure
Available Guardicore feeds
Akamai ULS supports the following Guardicore feeds:
| Feed Name | Description | ULS Feed Parameter |
|---|---|---|
|
Network Logs
|
Network flow logs from Guardicore agents | NETLOG
|
|
Incidents
|
Security incidents detected by Guardicore | INCIDENT
|
|
Agent Logs
|
Agent status and health information | AGENT
|
|
System Alerts
|
System-level alerts and events | SYSTEM
|
|
Audit Logs
|
Administrative actions and configuration changes | AUDIT
|
Authentication methods reference
Google SecOps webhook feeds support multiple authentication methods. Akamai ULS uses the hybrid method with API key in the URL and secret key in header.
Method used by ULS: Hybrid (URL + Header)
-
Request format:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json x-chronicle-auth: <SECRET_KEY> {"event": "data", "timestamp": "2025-01-15T10:30:00Z"} -
ULS command format:
--httpurl "<ENDPOINT_URL>?key=<API_KEY>" --httpauthheader '{"x-chronicle-auth": "<SECRET_KEY>"}'
Authentication header names
Google SecOps accepts the following header names for authentication:
-
For API key:
-
x-goog-chronicle-auth(recommended) -
X-Goog-Chronicle-Auth(case-insensitive)
-
-
For secret key:
-
x-chronicle-auth(recommended) -
X-Chronicle-Auth(case-insensitive)
-
Webhook limits and best practices
Request limits
| Limit | Value |
|---|---|
| Max request size | 4 MB |
| Max QPS (queries per second) | 15,000 |
| Request timeout | 30 seconds |
| Retry behavior | Automatic with exponential backoff |
Best practices
- Run separate ULS instances for each feed type to improve reliability and troubleshooting.
- Monitor ULS service status using systemd and set up alerts for service failures.
- Rotate Guardicore credentials periodically and update the
.edgercfile. - Use a dedicated service account in Guardicore with read-only API access.
- Configure log rotation for ULS logs to prevent disk space issues.
- Test failover scenarios by running ULS on multiple servers with load balancing.
UDM mapping table
The following table lists the log fields of the Guardicore Centra log and their corresponding UDM fields.
| Log Field | UDM Field | Description |
|---|---|---|
timestamp
|
metadata.event_timestamp
|
Event timestamp |
source_ip
|
principal.ip
|
Source IP address |
destination_ip
|
target.ip
|
Destination IP address |
source_port
|
principal.port
|
Source port number |
destination_port
|
target.port
|
Destination port number |
protocol
|
network.ip_protocol
|
Network protocol |
action
|
security_result.action
|
Security action taken |
severity
|
security_result.severity
|
Event severity |
user
|
principal.user.userid
|
Username |
hostname
|
principal.hostname
|
Source hostname |
process_name
|
principal.process.file.full_path
|
Process name |
incident_id
|
security_result.detection_fields.key
|
Incident identifier |
description
|
security_result.description
|
Event description |
Need more help? Get answers from Community members and Google SecOps professionals.

