feat(ocsf): configurable schema version for SIEM backward compatibility - #2717
feat(ocsf): configurable schema version for SIEM backward compatibility#2717zanetworker wants to merge 1 commit into
Conversation
4697da3 to
34073ea
Compare
Add a gateway-configurable OCSF schema version target that downgrades JSONL output for SIEMs that only support older schema versions (v1.1 for AWS Security Lake, v1.3 for Splunk CIM). The downgrade filter runs after event serialization and before writing: - Strips profile-gated fields (ai_model, container, observation_point_id) - Removes unknown profiles from metadata.profiles - Rewrites metadata.version to the target version No field renames needed; the core event structure is identical across v1.1, v1.3, and v1.7. The differences are all profile-gated additions. The gateway setting ocsf_schema_version flows to sandboxes via the settings bundle (same path as ocsf_json_enabled). Empty or unset means no downgrade (emit at current version). Closes NVIDIA#2662 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
34073ea to
8fdaeec
Compare
E2E Verification: Splunk CIM mapping with v1.1 downgraded eventsTested the full pipeline on a live cluster with Splunk Enterprise:
Splunk CIM query: Result: 13 events mapped to CIM Network Traffic data model with This proves the "plug OpenShell into your existing SIEM and it just works" story for customers running Splunk with the OCSF-CIM Add-On on v1.1 schemas. |
|
Related: #2664 adds AI inference events via the |

Summary
Add a gateway-configurable OCSF schema version target that downgrades JSONL output for SIEMs that only support older schema versions. AWS Security Lake requires v1.1.0, Splunk CIM Add-On targets v1.1-v1.3, CrowdStrike FDR uses v1.5.0. OpenShell's internal model stays at the current version; only the JSONL serialization is transformed.
Related Issue
Closes #2662
Approach
A downgrade filter in the JSONL layer runs after event serialization and before writing. Based on a field-by-field diff across v1.1.0, v1.3.0, and v1.7.0 (analysis), the filter is small:
ai_model,container,observation_point_idmetadata.profiles:ai_operation,containermetadata.versionto the target versionNo field renames needed. The core event structure (class UIDs, activity IDs, HTTP/network fields) is identical across all versions. The differences are all profile-gated additions.
The shorthand log output is unaffected (human-readable, not consumed by SIEMs).
Gateway Configuration
The setting flows to sandboxes via the settings bundle (same mechanism as
ocsf_json_enabled). Empty or unset means no downgrade.Changes
openshell-ocsfcrate:format/downgrade.rs—downgrade_event()function that strips fields and profiles based on target versiontracing_layers/jsonl_layer.rs—with_target_version()method; applies downgrade before writingopenshell-sandboxcrate:main.rs— creates sharedocsf_schema_versionmutex, passes to JSONL layerlib.rs—apply_ocsf_schema_version_setting()reads the gateway setting and updates the shared versionSIEM Compatibility Matrix
Testing
cargo test -p openshell-ocsf— 134 passed (7 new downgrade tests)cargo clippy --all-targets -- -D warnings— cleancargo check -p openshell-sandbox— compiles with settings wiringChecklist