Skip to content

Add OCSF normalization pipeline for Zscaler Private Access#24173

Open
jbfeldman-dd wants to merge 4 commits into
masterfrom
jonah.feldman/zpa-ocsf
Open

Add OCSF normalization pipeline for Zscaler Private Access#24173
jbfeldman-dd wants to merge 4 commits into
masterfrom
jonah.feldman/zpa-ocsf

Conversation

@jbfeldman-dd

@jbfeldman-dd jbfeldman-dd commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

What does this PR do?

Adds OCSF normalization to the Zscaler Private Access log pipeline, mapping all ZPA log types to their corresponding OCSF classes:

  • Authentication [3002]audit-logs (sign-in/sign-out events) and user-status
  • Network Activity [4001]user-activity and microsegmentation
  • HTTP Activity [4002]app-protection and browser-access
  • Device Inventory Info [5001]app-connector-status, private-service-edge-status, private-cloud-controller-status
  • API Activity [6003]audit-logs CRUD operations (Create, Update, Delete, Download)

Also includes:

  • Test expectations for all 8 log samples validated by the OCSF validator (100% required field coverage)

Motivation

Enable OCSF-normalized security telemetry for Zscaler Private Access logs, supporting standardized cross-vendor analysis in Datadog.

🤖 Generated with Claude Code, edited by humans

Map ZPA log types to OCSF classes: Authentication (3002) for audit-logs
and user-status, Network Activity (4001) for user-activity and
microsegmentation, HTTP Activity (4002) for app-protection and
browser-access, Device Inventory Info (5001) for connector/PSE/PCC
status, and API Activity (6003) for CRUD audit operations. Includes
OCSF facets, pre-transformation pipeline for shared metadata, and
validated test expectations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jbfeldman-dd and others added 3 commits June 24, 2026 15:43
- Change schema-remapper to attribute-remapper in pre-transformations
  (schema-remapper is only valid inside schema-processor)
- Add missing enabled attribute on the event_code remapper
- Fix facet definitions to match existing cross-integration conventions
  (names, types) per validate-logs conflict resolution
- Align test expected output with CI pipeline engine format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jbfeldman-dd jbfeldman-dd marked this pull request as ready for review June 25, 2026 13:32
@jbfeldman-dd jbfeldman-dd requested a review from a team as a code owner June 25, 2026 13:32
@dd-octo-sts

dd-octo-sts Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Validation Report

All 21 validations passed.

Show details
Validation Description Status
agent-reqs Verify check versions match the Agent requirements file
ci Validate CI configuration and code coverage settings
codeowners Validate every integration has a CODEOWNERS entry
config Validate default configuration files against spec.yaml
dep Verify dependency pins are consistent and Agent-compatible
http Validate integrations use the HTTP wrapper correctly
imports Validate check imports do not use deprecated modules
integration-style Validate check code style conventions
jmx-metrics Validate JMX metrics definition files and config
labeler Validate PR labeler config matches integration directories
legacy-signature Validate no integration uses the legacy Agent check signature
license-headers Validate Python files have proper license headers
licenses Validate third-party license attribution list
metadata Validate metadata.csv metric definitions
models Validate configuration data models match spec.yaml
openmetrics Validate OpenMetrics integrations disable the metric limit
package Validate Python package metadata and naming
qa-label Validate the pull request declares whether it needs QA for the next Agent release
readmes Validate README files have required sections
saved-views Validate saved view JSON file structure and fields
version Validate version consistency between package and changelog

View full run

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 58ee1f7cc9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

- type: schema-remapper
name: Map `Connector` to `ocsf.device.name`
sources:
- Connector

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Map edge/controller names into device inventory

When this shared Device Inventory pipeline handles private-service-edge-status or private-cloud-controller-status (the filter includes both services), the configured log formats populate ServiceEdge/PrivateCloudController rather than Connector (see zscaler_private_access/README.md lines 123 and 143). Because this remapper only reads Connector, those OCSF events lose ocsf.device.name; include the service-specific name fields (and the matching group fields) or split the pipeline per service.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant