Introduction
Your IBM Guardium Exposure Manager instance is continuously flagging open data exposure issues workforce (endpoints) and workload (datasources, saas applications, ETL jobs, cloud workflows). Largely where data is being accessed by Agents or possibly being used in RAG pipelines which in turn feeds context to chat bots.
Your audit team needs a trail of every administrative action taken inside IBM Guardium Exposure Manager. Both of these data streams are available through IBM Guardium Exposure Manager’s REST API — but they don’t automatically land in QRadar, where your analysts live.
This is a gap many organisations encounter when they deploy IBM Guardium Exposure Manager alongside an existing QRadar SIEM. IBM Guardium Exposure Manager does not natively push events to QRadar, and building a custom integration from scratch typically means writing and maintaining a separate data pipeline. There is, however, a cleaner path: QRadar’s Universal Cloud REST API (UCC) protocol, a built-in capability that lets you define a REST-based log source entirely in XML — no middleware, no custom application server, nothing to patch.
This post walks through a set of open-source Universal Cloud Connectors that bridge IBM Guardium Exposure Manager and QRadar. They are available on GitHub at https://github.com/ncee-dp-tech-sme/gem_qradar_ucc and cover two IBM Guardium Exposure Manager data streams: security issues and the activity audit log. We’ll focus on the Combined connector — the recommended option for most deployments — but cover all three so you can choose the right fit for your environment.
Architecture Overview
Before diving into configuration steps, it helps to understand the moving parts.
IBM Guardium Exposure Manager is IBM’s SaaS-based data exposure management platform. It exposes two REST API surfaces relevant here:
GET /api/v1/issues and GET /api/v1/issues/{id}/details — the security issues API, returning open exposure issues with enriched detail records including asset, policy, sensitivity category, and scope metadata.
POST /api/v3/reports/run — the reports API, used to run the built-in Activity Log report that captures an audit trail of all user and system actions within GEM.
QRadar’s Universal Cloud REST API protocol allows a QRadar log source to be driven entirely by an XML workflow definition. The workflow specifies how to authenticate, how to paginate, which API endpoints to call, and how to post each record as a QRadar event. No external agent or middleware is required — QRadar itself executes the workflow on its managed host on a configurable schedule.
Log Source Extensions (LSX) are QRadar’s field-mapping layer. They parse the raw JSON payloads from the workflow into standard QRadar fields (such as UserName, EventName, StartTime) and into Custom Event Properties (CEPs) that capture GEM-specific fields like GEM Issue Name, GEM Asset Type, or GEM Activity ActionTaken.
The end-to-end data flow looks like this:
GEM SaaS REST API
↓
QRadar UCC Workflow (XML) ← WorkflowParameterValues.xml (credentials + config)
↓
QRadar Log Source
↓
Log Source Extension (LSX) → Standard fields + Custom Event Properties (CEPs)
↓
Log Activity / Rules / Offences
The Three Connectors
The repository provides three connectors. They share the same authentication mechanism and credential format but differ in what they collect and how they are packaged.
Connector 1 — Open Issues + Details
Runs on a configurable schedule (minimum once per day). Each run computes a 24-hour window covering the previous UTC calendar day, retrieves all open issues detected in that window via paginated calls to GET /api/v1/issues (20 issues per page), and then fetches the enriched detail record for each issue via GET /api/v1/issues/{id}/details. Each detail record is posted as an individual QRadar event.
Best suited for: Daily security issue tracking and offence creation.
Connector 2 — Activity Log
Runs on a configurable recurring schedule (default: every 10 minutes). Each run computes a rolling time window of [now − recurrence_minutes, now], queries the GEM Activity Log report via POST /api/v3/reports/run with pagination (500 records per page), and posts each activity record as an individual event.
The rolling window design guarantees contiguous, gap-free ingestion: as long as the workflow’s recurrence_minutes parameter matches the QRadar log source recurrence schedule, every activity record will be collected exactly once.
Best suited for: Near-real-time audit and compliance monitoring.
Connector 3 — Combined Issues + Activity Log (Recommended)
Combines both connectors into a single QRadar log source. One set of credentials, one recurrence schedule, one Log Source Extension. Each workflow execution runs the Issues section (Section A) followed by the Activity Log section (Section B) in sequence.
A single LSX with two <match-group> elements handles both event shapes. The two JSON structures are mutually exclusive — issue detail records always contain an issue_id field; activity log records always contain a numeric string key “1” (the CreationTimeUTC field). The groups are therefore guaranteed never to conflict.
|
Separate (2 log sources) |
Combined (this connector) |
| Log sources in QRadar |
2 |
1 |
| API credential config |
×2 |
×1 |
| Recurrence schedules |
2 to maintain |
1 |
| Log Source Extension |
2 separate |
1 with 2 match groups |
| Event differentiation |
By log source |
By LSX match group |
For most deployments, the Combined connector is the right choice. The rest of this guide focuses on it.
Prerequisites and Authentication
Before you begin, confirm the following:
| Requirement |
Detail |
| QRadar version |
7.4.x or later with Universal Cloud REST API protocol support |
| GEM instance |
Accessible over HTTPS from the QRadar console or managed host |
| GEM API credentials |
An API key and API secret with read access to Issues and the Activity Log report |
Authentication uses HTTP Basic Auth. The connector assembles the credential string api_key:api_secret at workflow runtime and base64-encodes it inline. No pre-encoded value is stored anywhere in the XML files. This means credential rotation is straightforward: update the two parameter values on the log source and redeploy — no file editing, no reloading the workflow definition.
Step-by-Step Installation
Step 1 — Download the Files
Clone or download the repository from https://github.com/ncee-dp-tech-sme/gem_qradar_ucc. The files for the Combined connector are in the GEM_QRadar_issue_activity_logs/ folder:
GEM_QRadar_issue_activity_logs/
├── GEM-Combined-Workflow.xml
├── GEM-Combined-WorkflowParameterValues.xml
└── GEM-Combined-LogSourceExtension.xml
Step 2 — Configure Parameter Values
Open GEM-Combined-WorkflowParameterValues.xml and fill in the required parameters before importing:
| Parameter |
Description |
Example |
gem_host |
GEM hostname — no scheme, no trailing slash |
eu.guardium.security.ibm.com |
api_key |
Your GEM API key |
(required) |
api_secret |
Your GEM API secret |
(required) |
report_id |
Activity Log report ID |
000000000000000000002001 |
fetch_size |
Records per page for Activity Log |
500 |
recurrence_minutes |
Must match the QRadar log source recurrence schedule |
10 |
⚠ Important: recurrence_minutes must stay in sync with the Recurrence field configured on the QRadar log source. The workflow uses this value to calculate the Activity Log time window. If they diverge, records will be missed or duplicated.
Step 3 — Import the Workflow
- In QRadar, navigate to Admin → Universal Cloud REST API Sources.
- Click Add and select Workflow.
- Upload
GEM-Combined-Workflow.xml.
Step 4 — Create the Log Source
- Navigate to Admin → Log Sources → Add.
- Set Log Source Type to
Universal Cloud REST API.
- Set Protocol to
Universal Cloud REST API.
- Select the imported workflow.
- Upload your filled-in
GEM-Combined-WorkflowParameterValues.xml as the Workflow Parameter Values.
- Set Recurrence to
10 minutes (or your chosen interval — update recurrence_minutes to match).
- Save and deploy.
Step 5 — Import the Log Source Extension
- Navigate to Admin → Log Source Extensions.
- Click Add and upload
GEM-Combined-LogSourceExtension.xml.
- Enable it and associate it with the newly created log source.
- Update the device-type-id: The LSX ships with a default
device-type-id of 4015. After creating your log source, update the LSX to use your actual log source’s device type ID.
Step 6 — Create Custom Event Properties (CEPs)
Navigate to Admin → Custom Event Properties → Add and create the following properties. Alternatively, right-click an event in Log Activity → Extract Property once events are flowing.
Issue CEPs:
| CEP Name |
Type |
| GEM Issue ID |
AlphaNumeric |
| GEM Sequential ID |
AlphaNumeric |
| GEM Issue Name |
AlphaNumeric |
| GEM Issue Type |
AlphaNumeric |
| GEM Issue Executor |
AlphaNumeric |
| GEM Issue Status |
AlphaNumeric |
| GEM Asset Name |
AlphaNumeric |
| GEM Asset ID |
AlphaNumeric |
| GEM Asset Type |
AlphaNumeric |
| GEM Affected Resources Count |
AlphaNumeric |
| GEM Policy ID |
AlphaNumeric |
| GEM Policy Name |
AlphaNumeric |
| GEM Date Detected |
AlphaNumeric |
| GEM Last Modified |
AlphaNumeric |
| GEM Scope |
AlphaNumeric |
| GEM Scope ID |
AlphaNumeric |
| GEM Rule ID |
AlphaNumeric |
| GEM Data Classifications |
AlphaNumeric |
| GEM Sensitivity Category |
AlphaNumeric |
| GEM Sensitivity Count |
AlphaNumeric |
Activity Log CEPs:
| CEP Name |
Type |
| GEM Activity CreationTimeUTC |
AlphaNumeric |
| GEM Activity PerformedBy |
AlphaNumeric |
| GEM Activity Context |
AlphaNumeric |
| GEM Activity ActionTaken |
AlphaNumeric |
| GEM Activity ContextDescription |
AlphaNumeric |
| GEM Activity Activity |
AlphaNumeric |
| GEM Activity AuditTrailID |
AlphaNumeric |
Understanding the Data — Event Shapes and Field Mapping
The Combined connector produces two structurally distinct event types, and the LSX routes each through the correct match group automatically.
Issue events are identified by the presence of the issue_id field. The LSX maps the enriched issue detail payload to standard QRadar fields and the Issue CEPs listed above. The issue_id field maps to the standard QRadar field, and fields such as asset name, policy name, sensitivity category, and scope provide the rich context needed for rule-based offence creation.
Activity log events are identified by the presence of numeric string key “1” — the GEM API’s internal representation of the CreationTimeUTC column. The mapping is:
| API Key |
Field Name |
QRadar Standard Field |
“1” |
CreationTimeUTC |
StartTime |
“2” |
PerformedBy |
UserName |
“4” |
ActionTaken |
EventName |
“3” |
Context |
CEP only |
“5” |
ContextDescription |
CEP only |
“6” |
Activity |
CEP only |
“7” |
AuditTrailID |
CEP only |
Because an issue detail object never contains a key “1”, and an activity results object never contains issue_id, the two match groups are guaranteed to be mutually exclusive.
Lessons Learned — Gotchas Worth Knowing
These issues were encountered and fixed during development. They are worth knowing upfront to save you the troubleshooting time.
1. Double-encoding of the date filter parameter (Connector 1, fixed in v1.2)
The date_filter query parameter sent to GET /api/v1/issues is a JSON string containing ISO timestamps. An early version of the workflow manually percent-encoded this string. QRadar then percent-encoded it again when constructing the HTTP request, producing a double-encoded URL that GEM rejected with an HTTP 500 error. The fix was to use plain XML-escaped JSON and let QRadar handle the URL encoding.
2. Scheme prefix in gem_host (Connector 2, fixed in v1.1)
The gem_host parameter for the Activity Log connector requires the hostname only — no https:// prefix, no trailing slash. Including the scheme caused a Client Protocol Exception in QRadar’s pre-flight connectivity test. The Combined connector documents this explicitly: gem_host is eu.guardium.security.ibm.com, not https://eu.guardium.security.ibm.com.
3. Recurrence minutes drift
After initial setup, it is easy to modify the QRadar log source’s Recurrence schedule without updating the recurrence_minutes workflow parameter — or vice versa. When these diverge, the Activity Log time window no longer aligns with the actual collection interval, leading to gaps or duplicate records. If you change one, change the other at the same time.
4. device-type-id in the LSX
The LSX XML ships with device-type-id=“4015” as a placeholder. Once the log source is created, QRadar assigns it a real device type ID. Update the LSX accordingly — otherwise event parsing may not work as expected.
Resources
The repository includes sample API responses in the examples/ folder and full XML schema references for the UCC workflow format in workflows/. Issues, feedback, and contributions are welcome via the GitHub issue tracker.
Tags: QRadar, Guardium Exposure Manager, Universal Cloud REST API, Log Source Extension, SIEM, IBM Security, Log Management, UCC
Disclaimer
- Created by Erwin Friethoff, Security Architect at IBM.
- These connectors are 100% free and open source and not in any way endorsed or supported by IBM. All done on personal title.
- If you have any questions, please reach out on LinkedIn.
- 100% free and open source. No warranty.
- GitHub Issues: Report bugs or request features