Repository navigation
ASIM: Add Proofpoint POD MailLog EmailEvent parsers - #15410
Open
adbhogeGit wants to merge 7 commits into
Open
adbhogeGit wants to merge 7 commits into
adbhogeGit wants to merge 7 commits into
Conversation
Add MailLog source and filtering parsers, unifier registrations, generated ARM, fixtures and mapping documentation. Live validation is deferred; repository KQL checks need the protected custom-table catalog updated. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 321517f1-a1c5-4242-be85-2d144a9cc295
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 321517f1-a1c5-4242-be85-2d144a9cc295
Leave ARM generation to GitHub Actions; preserve parser YAML, registrations, fixtures and changelogs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 321517f1-a1c5-4242-be85-2d144a9cc295
…roofpoint-mail-log-parser
|
ASIM parsers have been changed. ARM templates were regenerated from the updated KQL function YAML files. |
adbhogeGit
marked this pull request as ready for review
October 23, 2026 18:01
Match the connector schema in CI KQL catalog. ASIM sample ingestion excludes id; preserve actual connector IDs when present and leave optional event IDs empty when absent, without changing validation gates. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 321517f1-a1c5-4242-be85-2d144a9cc295
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Hosted filtering validation lacks EmailEvent support, and pending validation leaves the new filtering behavior insufficiently verified for automated approval.
2 open issues
What changed in this PR
Adds Proofpoint POD MailLog support to ASIM EmailEvent 1.0.0, enabling source-independent queries over SMTP receipt and delivery records.
Changes:
- Adds source and filtering parsers, with unifier registration and optional source-ID handling.
- Adds generated ARM deployment assets, sample fixtures and the offline table schema.
- Documents mappings, source limitations, deferred live validation and version history.
| File | Description |
|---|---|
| Sample Data/ASIM/ProofpointPODMailLog_CL_Schema.csv | Defines the fixture table schema. |
| Sample Data/ASIM/Proofpoint_POD MailLog_EmailEvent_IngestedLogs.csv | Adds 20 transformed sample records. |
| Parsers/ASimEmailEvent/README.md | Documents mappings, filtering and validation limitations. |
| Parsers/ASimEmailEvent/Parsers/vimEmailEventProofpointPODMailLog.yaml | Adds the parameterized source parser. |
| Parsers/ASimEmailEvent/Parsers/imEmailEvent.yaml | Registers the filtering parser and forwards parameters. |
| Parsers/ASimEmailEvent/Parsers/ASimEmailEventProofpointPODMailLog.yaml | Adds source-event normalization. |
| Parsers/ASimEmailEvent/Parsers/ASimEmailEvent.yaml | Registers the source parser. |
| Parsers/ASimEmailEvent/CHANGELOG/vimEmailEventProofpointPODMailLog.md | Records filtering-parser releases. |
| Parsers/ASimEmailEvent/CHANGELOG/imEmailEvent.md | Records filtering-unifier registration. |
| Parsers/ASimEmailEvent/CHANGELOG/ASimEmailEventProofpointPODMailLog.md | Records source-parser releases. |
| Parsers/ASimEmailEvent/CHANGELOG/ASimEmailEvent.md | Records source-unifier registration. |
| Parsers/ASimEmailEvent/ARM/vimEmailEventProofpointPODMailLog/vimEmailEventProofpointPODMailLog.json | Adds filtering-parser deployment template. |
| Parsers/ASimEmailEvent/ARM/vimEmailEventProofpointPODMailLog/README.md | Adds filtering-parser deployment links. |
| Parsers/ASimEmailEvent/ARM/imEmailEvent/imEmailEvent.json | Updates deployed filtering-unifier query. |
| Parsers/ASimEmailEvent/ARM/FullDeploymentEmailEvent.json | Includes both new parser deployments. |
| Parsers/ASimEmailEvent/ARM/ASimEmailEventProofpointPODMailLog/README.md | Adds source-parser deployment links. |
| Parsers/ASimEmailEvent/ARM/ASimEmailEventProofpointPODMailLog/ASimEmailEventProofpointPODMailLog.json | Adds source-parser deployment template. |
| Parsers/ASimEmailEvent/ARM/ASimEmailEvent/ASimEmailEvent.json | Updates deployed source-unifier query. |
| .script/tests/KqlvalidationsTests/CustomTables/ProofpointPODMailLog_CL.json | Registers the eight-column offline KQL schema. |
Review effort: Balanced
| Product: | ||
| Name: Proofpoint POD MailLog | ||
| Normalization: | ||
| Schema: EmailEvent |
Contributor
Author
There was a problem hiding this comment.
Comment on lines
+93
to
+114
| | extend | ||
| EmailMailFromAddress = iff(EmailMailFromAddress contains "@", EmailMailFromAddress, ""), | ||
| RelayHost = trim_end(@"\.", coalesce(RelayHost, Relay)), | ||
| RelayIp = iff(isnotnull(parse_ipv4(RelayIp)) or isnotempty(parse_ipv6(RelayIp)), RelayIp, ""), | ||
| EmailProtocolName = case(tostring(sm.proto) =~ "SMTP" or tostring(sm.mailer) in~ ("smtp", "esmtp"), "SMTP", ""), | ||
| EventSubType = iff(IsDelivery, "EmailSent", "EmailReceived") | ||
| | extend | ||
| SrcIpAddr = iff(IsDelivery, "", RelayIp), | ||
| DstIpAddr = iff(IsDelivery, RelayIp, ""), | ||
| Src = iff(IsDelivery, Dvc, coalesce(RelayIp, RelayHost)), | ||
| Dst = iff(IsDelivery, coalesce(RelayIp, RelayHost), Dvc), | ||
| SrcFQDN = iff(not(IsDelivery) and RelayHost contains ".", RelayHost, ""), | ||
| SrcHostname = iff(IsDelivery, tostring(split(Dvc, ".")[0]), tostring(split(RelayHost, ".")[0])), | ||
| SrcDomain = iff(IsDelivery, substring(Dvc, indexof(Dvc, ".") + 1), substring(RelayHost, indexof(RelayHost, ".") + 1)), | ||
| DvcHostname = tostring(split(Dvc, ".")[0]), | ||
| DvcDomain = iff(Dvc contains ".", substring(Dvc, indexof(Dvc, ".") + 1), ""), | ||
| DvcFQDN = iff(Dvc contains ".", Dvc, ""), | ||
| EmailMailFromDomain = iff(EmailMailFromAddress contains "@", tostring(split(EmailMailFromAddress, "@")[1]), ""), | ||
| DvcAction = iff(IsDelivery and EventResult == "Success" and DeliveryStatus startswith "Sent", "Delivered", "NA") | ||
| | where array_length(ipaddr_has_any_prefix) == 0 | ||
| or has_any_ipv4_prefix(SrcIpAddr, ipaddr_has_any_prefix) | ||
| or has_any_ipv4_prefix(DstIpAddr, ipaddr_has_any_prefix) |
| let parser = (disabled:bool=false, pack:bool=false) { | ||
| ProofpointPODMailLog_CL | ||
| | where not(disabled) | ||
| | where isnotempty(tostring(sm.qid)) and (bag_has_key(sm, "from") or array_length(sm["to"]) > 0) |
Collaborator
There was a problem hiding this comment.
This is a weird filter statement. What is it supposed to filter out?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Adds EmailEvent 1.0.0 ASIM and parameterized vim parsers for ProofpointPODMailLog_CL, unifier registrations, sample fixtures, documentation, and the current CCP table schema in the offline CI catalog. ARM generation is handled by the GitHub Action; no manually generated ARM changes are maintained.
Task: https://dev.azure.com/msdata/Sentinel%20Graph/_workitems/edit/5510370
CI fixes
Commit af9ac0a registers the exact eight-column CCP schema, resolving the offline validator's KS204 unknown-table error. Both parser variants now read the optional source id through column_ifexists because the hosted ASIM ingestion helper strips that reserved column. Missing IDs remain unset; no IDs are fabricated.
Both targeted repository KQL tests pass (2/2), alongside 16 offline compiler cases, 30 template checks, and catalog/fixture parity checks. Hosted ASIM schema/data/filter checks for the updated head are pending; previous SEM0100 failures were from the older head.
Limitations
Live validation against the user workspace remains deferred by user direction: it lacks ProofpointPODMailLog_CL. Existing hosted CI workflows may validate their own ingested fixtures. Fixtures are transformed repository samples, not workspace exports. Envelope addresses are not treated as header From/To; missing header, subject, and location fields remain unmapped. Transport handoff is not inbox placement. IPv4 prefix filtering only. Task acceptance details/vendor documentation remain unverified where access was unavailable. No user-workspace deployment or ingestion performed.
Ready for review; live-validation and mapping limitations remain explicit. Changelog PR links are included.