Conversation
The parser plugins remove every character except letters, digits and dots from the field names they write. The Azure filter added its 10 correlation markers with underscores (for example log.correlationCandidate.key_vault_access_spikes), so they were stored without them (log.correlationCandidate.keyvaultaccessspikes) and the 10 history rules that count them never matched. Rename the markers to camelCase (for example log.correlationCandidate.keyVaultAccessSpikes) in the filter and in every rule that reads them. Rule conditions, thresholds and windows are unchanged. Tests: the Azure parse model now stores grok, rename and add targets the way the parser does, the history test counts each marker by its new name, and a new test checks that every marker the filter adds and every marker an Azure rule reads are the same name, made only of letters, digits and dots. Fixtures that forge a marker in the input now use the new name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Change pushed ( What changed
Why
Validation
Not tested: the history thresholds themselves, because counting past events needs a search index. After deployment, only new events count toward the history windows. |
This branch has not been deployed
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.
Azure Event Hub currently can label an unfinished or contradictory operation as
actionResult: success. For example, a sign-in with one zero error-code alias and another nonzero alias, or an Event Grid record whose event name ends inSuccesswhile its status isStarted, can be treated as successful. Since the normalized result and IP feed threat-intelligence correlation, these cases can create false alerts.This change derives a single final
success,failure, ordeniedresult from the relevant Azure event class. Denial and failure take precedence over success; pending, unknown, and conflicting signals leave the result unset. Sign-ins require consistent final codes, HTTP responses use explicit final status codes, Kubernetes audit events requireResponseComplete, and WAF actions distinguish requests passed to the backend from blocks and intermediate rule matches. The filter also extracts the needed scalar leaves from embedded HTTP, Kubernetes, and request-body JSON. It restores the authoritative outer event before normalization, so embedded fields cannot replace its category or outcome.The mappings follow the Microsoft sign-in error-code reference, Azure asynchronous-operation statuses, HTTP status definitions, Application Gateway WAF log action definitions, and the standard event schema. The reviewed UTMStack snapshot is
ab96ae9a685c54c974253ec517c688a7557019e9, with SDKv1.1.33and schema wiki revisionc18b54bd5ea5a34abb0e690458d73f89835edd29.Validation: 69 fabricated raw regression cases pass in the isolated parser, with seven expected alerts from shipped rule controls; the original filter passed 32 of 69 and produced 17 alerts on the same controls. Another 185 existing Azure raw cases and the full
plugins/alertstest module pass. The parser's writer can concatenate complete JSON objects without NDJSON separators; assertions strictly decoded the complete object stream and recorded the framing warnings separately. The isolated parser has a different SDK/plugin dependency set from the reviewed snapshot, so this is not proof of deployed equivalence. Ten bounded read-only production samples were from a different event class, and the sampled worker did not have the Azure filter loaded; deployment and live Azure outcome behavior remain unverified. No customer records are included in this PR.The shared TI outcome consumer has a separately tested draft correction so it alerts only on confirmed successful operations. Both changes should be reviewed together before relying on normalized outcomes for TI alerts.