sentinel-solution-mock-data-generation
Skill6.2k starsChanged 16 days agoMITView on GitHub
Generate or reuse one shared mock.json payload for a Microsoft Sentinel Analytic Rule and its converted Defender XDR Custom Detection. Uses only Azure-Sentinel repository content and never writes to Azure.
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 10 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
Use this skill when a migration or optional-testing workflow needs mock data for a specific Analytic Rule and converted Custom Detection.
- Distinctive: line 15
Read source rules and toolkit contracts without modifying them.
- Very specific: line 16
Write only under the explicit --output-root, or under this toolkit repository's default mock root when no output root is supplied.
- Distinctive: line 19
Never write fixture files into a source checkout implicitly.
- Distinctive: line 20
Never invoke CAT.Tools at runtime.
- Distinctive: line 21
Check for an existing reviewed scenario before generating a new one.
- Distinctive: line 22
Never overwrite an existing scenario unless the user explicitly requests regeneration and the prior fixture has been reviewed.
- Distinctive: line 24
Never infer a multi-event attack only because a schema permits it.
- Distinctive: line 30
Never ingest, deploy, enable, or delete Azure resources.
- Very specific: line 184
Use --candidate-scenario while human review is pending and --reviewed-scenario only after a human reviewer accepts the hypothesis and …
- Very specific: line 266
Only generationStatus=qualification-ready scenarios with directLogsIngestionSupported=true may proceed to direct DCR ingestion.
- Distinctive: line 273
After generation or reuse:
- Distinctive: line 279
never treat generation as proof of ingestion, query match, alert creation, or migration parity.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Sentinel Solution Mock Data Generation
Use this skill when a migration or optional-testing workflow needs mock data for a specific Analytic Rule and converted Custom Detection.
Safety contract
- Read source rules and toolkit contracts without modifying them.
- Write only under the explicit
--output-root, or under this toolkit repository's default mock root when no output root is supplied. Cross-worktree generation must always use--output-root. - Never write fixture files into a source checkout implicitly.
- Never invoke CAT.Tools at runtime.
- Check for an existing reviewed scenario before generating a new one.
- Never overwrite an existing scenario unless the user explicitly requests regeneration and the prior fixture has been reviewed.
- Never infer a multi-event attack only because a schema permits it.
- Automatically generate only simple, decisive predicates.
- Require a reviewed scenario for joins, sequences, aggregation, thresholds, watchlists, external data, historical baselines, anomaly logic, and absence-of-data rules.
- Generate synthetic data only. Never copy customer or tenant telemetry.
- Never ingest, deploy, enable, or delete Azure resources.
Inputs
Require:
- solution folder name;
- exact Analytic Rule name, ID, filename, or path;
- the converted Custom Detection in
Solutions\<solution>\XDR Detections\, or its exact path.
The generator uses:
- source Analytic Rule YAML;
- converted Custom Detection YAML;
Sample Data\Tables\<Table>\base-event.json;Sample Data\Tables\<Table>\metadata.json;- solution
Package\mainTemplate.json; - solution parsers;
- DCR
streamDeclarations,dataFlows,transformKql, and output stream. - the reviewed standard-table capability registry at
Tools\AzureMonitorLogsIngestion\registry.yamlfor writable standard-table routes, schemas, and transforms.
For separate checkouts, pass --source-root for the repository containing the
solution and --toolkit-root for the repository containing this generator and
its registry. The toolkit's Sample Data is used by default; pass
--sample-data-root only when the neutral table samples live elsewhere.
Absolute AR/CD paths are resolved and checked to remain inside --source-root.
Output and table paths reject symlink escapes; the resolved source, toolkit,
sample-data, and output roots are printed in the result and recorded in the
scenario manifest.
Existing-scenario-first flow
Check:
<output-root>\<solution>\<rule-id>\ (defaults to toolkit Sample Data\Solutions\Mock)
mock.json
scenario.jsonRun:
python Tools\SolutionMigration\generate_mock_scenario.py `
--solution "<solution-folder>" `
--rule "<rule-id-or-exact-name>" `
--custom-detection "Solutions\<solution>\XDR Detections\<detection>.yaml" `
--source-root "<Azure-Sentinel-repository>" `
--toolkit-root "<repository-containing-this-generator>" `
--output-root "<Azure-Sentinel-repository>\Sample Data\Solutions\Mock"Without --force, a complete scenario that passed schema validation is
returned with status=existing-scenario. Reuse it after reviewing that its AR,
CD, stream, and hypothesis still match the current content.
The final output location is <output-root>\<solution>\<rule-id>\; the tool
does not silently fall back to a source-root-relative destination.
Automatic generation
For a simple rule, the tool:
- reads the AR and CD;
- extracts decisive source predicates;
- inspects the solution package and parser;
- reverse-maps fields through parser and DCR transforms when a declared
Custom-*input stream exists; - otherwise resolves the exact source table through the capability registry, checks source fields against the registered input/output schema, and starts from the checked-in Standard-table base event;
- creates records that satisfy the decisive predicate;
- creates a type-safe benign negative control for validation only;
- validates every field against the DCR or table metadata;
- writes the qualifying records to one shared
mock.jsonpayload.
The registry only supports explicit reviewed capabilities. Field extraction
matches exact identifiers already present in a known table schema; it is not a
general KQL parser. Unknown/ambiguous tables, unregistered fields, or unresolved
mapping produce a blocked/offline scenario instead of a guessed contract.
Registry schema and transform fingerprints identify the exact template used.
liveValidated=false means the contract still needs exact-workspace validation;
generation never claims that the live table/DCR accepts it.
Optional deterministic controls:
python Tools\SolutionMigration\generate_mock_scenario.py `
--solution "<solution>" `
--rule "<rule>" `
--custom-detection "<path>" `
--randomize --copies 3 --seed 42 `
--lock "requestId=campaign-1" `
--benign-set "action=read"Provisional candidate inputs
An unreviewed candidate is not a reviewed scenario. Pass it with
--candidate-scenario; this transports and type-checks the rows but does not
assert human acceptance or semantic query validation. Candidate input always
yields generationStatus=generated-offline-only, including simple rules, so it
cannot pass the direct-ingestion gate. The API result uses
status=generated-candidate (or existing-candidate on reuse). The
scenarioReview manifest object reports status=review-pending,
inputKind=candidate, the resolved input path and SHA-256, and
semanticValidation=not-run; validation.semanticReview=pending and
validation.semanticMatch=not-run. Reuse checks the candidate hash, and
--force cannot overwrite an unreviewed fixture.
python Tools\SolutionMigration\generate_mock_scenario.py `
--solution "<solution>" `
--rule "<rule>" `
--custom-detection "<path>" `
--candidate-scenario "<candidate.json>" `
--source-root "<Azure-Sentinel-repository>" `
--toolkit-root "<repository-containing-this-generator>" `
--output-root "<Azure-Sentinel-repository>\Sample Data\Solutions\Mock"Reviewed complex scenarios
For complex behavior, supply a candidate or reviewed JSON file:
{
"name": "reviewed-sequence",
"hypothesis": "Documented behavior observable in the selected telemetry.",
"lockedPaths": ["requestId"],
"maliciousRecords": [
{}
],
"benignRecords": [
{}
]
}Run with:
python Tools\SolutionMigration\generate_mock_scenario.py `
--solution "<solution>" `
--rule "<rule>" `
--custom-detection "<path>" `
--reviewed-scenario "<scenario.json>" `
--source-root "<Azure-Sentinel-repository>" `
--toolkit-root "<repository-containing-this-generator>" `
--output-root "<Azure-Sentinel-repository>\Sample Data\Solutions\Mock"Use --candidate-scenario while human review is pending and
--reviewed-scenario only after a human reviewer accepts the hypothesis and
records. The JSON contract is exactly name (non-empty string), hypothesis
(non-empty string), optional lockedPaths (string array),
maliciousRecords (non-empty array of objects), and benignRecords (non-empty
array of objects). Each record must already match the selected raw DCR input
contract or Standard-table metadata contract; malformed or unknown fields and
type mismatches block generation. This transports reviewed multi-field and
multi-record fixtures; it does not solve KQL joins, aggregates, thresholds, or
prove that records satisfy either query. Keep those cases manual-review-required
and generated-offline-only until independently validated. Do not treat
schema validation as semantic matching or approval for environment writes.
expectedMatchKeys is not a supported machine-checked field; record expected
join/grouping keys and unique marker values in the hypothesis/review notes and
verify them against the exact AR and CD queries separately.
For the Cisco ASA average-rate rule, candidate records must preserve the exact
one-hour current window and prior ago(6h)..ago(1h) five-hour interval,
including the source's prev6hCumTotal / 6 comparison and OR of all three
doubling thresholds. Keep the five join/group keys aligned across the two
windows and construct Message values that the source's parsing expressions
actually accept. For the exfiltration rule, preserve the >=1-GiB sent-byte
threshold, rounded >=95% upload ratio, time window, ASA/FTD product, allowed
action, private source IP, and public destination IP predicates. The generator
only transports and type-checks these reviewed rows; it does not synthesize
Cisco message grammar, calculate query aggregates, or prove a match. Include
separate benign controls and keep both rules blocked from automatic semantic
qualification.
Example Cisco ASA routing (candidate JSON paths are supplied by the author; this generator does not invent them):
python Tools\SolutionMigration\generate_mock_scenario.py `
--source-root "<Azure-Sentinel-1 checkout>" `
--toolkit-root "<toolkit checkout>" `
--solution CiscoASA `
--rule 795edf2d-cf3e-45b5-8452-fe6c9e6a582e `
--custom-detection "Solutions\CiscoASA\XDR Detections\CiscoASA-ThreatDetectionMessage.yaml" `
--candidate-scenario "<candidate-threat-detection-message.json>" `
--output-root "<Azure-Sentinel-1 checkout>\Sample Data\Solutions\Mock"
python Tools\SolutionMigration\generate_mock_scenario.py `
--source-root "<Azure-Sentinel-1 checkout>" `
--toolkit-root "<toolkit checkout>" `
--solution CiscoASA `
--rule 79f29feb-6a9d-4cdf-baaa-2daf480a5da1 `
--custom-detection "Solutions\CiscoASA\XDR Detections\CiscoASA-AvgAttackDetectRateIncrease.yaml" `
--candidate-scenario "<candidate-average-detection-rate.json>" `
--output-root "<Azure-Sentinel-1 checkout>\Sample Data\Solutions\Mock"
python Tools\SolutionMigration\generate_mock_scenario.py `
--source-root "<Azure-Sentinel-1 checkout>" `
--toolkit-root "<toolkit checkout>" `
--solution CiscoASA `
--rule f3a8c2d0-7b41-4e9a-9f6a-2d8a1c4e5b72 `
--custom-detection "Solutions\CiscoASA\XDR Detections\CiscoASA-PossibleDataExfiltration.yaml" `
--candidate-scenario "<candidate-data-exfiltration.json>" `
--output-root "<Azure-Sentinel-1 checkout>\Sample Data\Solutions\Mock"Output contract
<output-root>\<solution>\<rule-id>\ (defaults to toolkit Sample Data\Solutions\Mock)
mock.json
scenario.jsonscenario.json records:
- AR and CD identity;
- attack hypothesis;
- query-complexity assessment;
- source and destination tables;
- DCR, stream, output stream, and ingestion mode;
- decisive field mappings and locked paths;
- shared mock record count and benign validation-control count;
- schema validation;
- explicit candidate/reviewed/not-required semantic-review status and input hash;
- separate seeded, live, alert, and cleanup statuses.
Only generationStatus=qualification-ready scenarios with
directLogsIngestionSupported=true may proceed to direct DCR ingestion.
generated-offline-only scenarios remain valid for query harnesses but not
for direct Logs Ingestion API qualification.
Handoff
After generation or reuse:
- present the scenario path and status;
- review the AR/CD identity, DCR mapping, shared mock record count, and limitations;
- hand off to
sentinel-solution-optional-testingonly when the user requests live qualification; - never treat generation as proof of ingestion, query match, alert creation, or migration parity.
Trending
More talk lately.about the whole repository
Who's talking about Azure/Azure-Sentinel
- @github-trending.bsky.social“📦 Azure / Azure-Sentinel ⭐ 4,774 (+3) 🗒 Python Cloud-native SIEM for intelligent security analytics for …”Bluesky · Feb 12, 2025 · 2 likes
- pulumi/pulumi-cloud-requests“Logs automated export into Azure Storage Account and/or Log Analytics Workspace”GitHub · Aug 9, 2024 · 2 reactions
- octocat/Spoon-Knife“**Describe the bug**”GitHub · Jun 11, 2022 · 2 reactions
- redaliscbe/Azure-Sentinel“Feature 1”GitHub · Jul 8, 2026 · 1 reactions
- Stack Overflow“How do I search through the in Sentinel Workbooks stored queries?”Stack Overflow · Aug 12, 2024 · 1 votes
The biggest 5 of 57 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 57
Talked about on GitHub, Stack Overflow and Bluesky (57 times).
On GitHub · 43
- Aug 9, 2024Logs automated export into Azure Storage Account and/or Log Analytics Workspace — pulumi/pulumi-cloud-requests2 reactions · 1 comment
- Jun 11, 2022**Describe the bug** — octocat/Spoon-Knife2 reactions
- Jul 8, 2026Feature 1 — redaliscbe/Azure-Sentinel1 reaction
- Dec 3, 2020Updat the Entity eum to include all the new types — wortell/AZSentinel1 reaction
- Oct 29, 2026Daily catalog: Iwatobi, SCuBA, AI scanning, and GCP detections — amcamillo/Cybersecurity_Tools0 reactions
38 more on GitHub
- Oct 15, 2026Support reviewed workbook updates with clean public artifacts and local audit evidence — oferInbar/Azure-Sentinel0 reactions
- Sep 28, 2026Mxdr 5375 v1 sentinel ccf multitenant — V1ManagedServices/Azure-Sentinel0 reactions
- Sep 22, 2026Main to master — idoshabi07/Azure-Sentinel0 reactions
- Sep 22, 2026Main — idoshabi07/Azure-Sentinel0 reactions
- Sep 15, 2026Release/3.75.0 — ccx-mss/Azure-Sentinel0 reactions
- Sep 14, 2026Release/3.75.0 — ccx-mss/Azure-Sentinel0 reactions · 1 comment
- Sep 9, 2026Create connector-builder-agent configuration — fuqing04/Azure-Sentinel0 reactions
- Aug 16, 2026Add dual-signal containment gate community plugin — Azure/Security-Copilot0 reactions
- Aug 16, 2026Add dual_signal_containment_gate custom function — phantomcyber/playbooks0 reactions
- Aug 10, 2026Semperis Lightning 4.1.0: merge CCF into existing offer (Function App + CCF) — MitchellGulledge3/Azure-Sentinel0 reactions · 5 comments
- Aug 10, 2026RFPD-77178: log ingestion api (v3.0) — recordedfuture/Azure-Sentinel0 reactions
- Jun 4, 2026Change api — adutt-commvault/Azure-Sentinel0 reactions
- May 21, 2026Update README with contribution guidelines and resources — vikorium/Azure-Sentinel0 reactions
- May 18, 2026Add weekly Azure Sentinel connector report workflow — fuqing04/sentinel-agent-runner0 reactions
- Mar 17, 2026Feat sar 46819 — sonraisecurity/Azure-Sentinel0 reactions
- Feb 27, 2026Update requirements.txt — daneshelias01/Azure-Sentinel0 reactions
- Jan 20, 2026test — BC-47/Azure-Sentinel0 reactions
- Jan 16, 2026Add new entry to ExclusionListForASimTests.csv — v-sabiraj/Azure-Sentinel0 reactions
- Mar 13, 2025Create Cholitas — GravityFallsInc/GravityFalls_Sentinel0 reactions
- Sep 10, 2024Patch-1 — mpmisha/Azure-Sentinel0 reactions
- Jul 11, 2024 - added metadata tags to incident description — synack/Azure-Sentinel0 reactions
- Jan 12, 2024Added local changes for test — SmitR01/Azure-Sentinel0 reactions
- Nov 9, 2023Create dsdsadasda — aviatam/Azure-Sentinel0 reactions · 1 comment
- Aug 24, 2023Praveenthepro patch 1 1 — praveenthepro/Azure-Sentinel0 reactions
- Jul 31, 2023seraphic security connector — LihiAtzmoni1/Azure-Sentinel0 reactions · 1 comment
- Jun 1, 2023Automation test — cohesity/Azure-Sentinel0 reactions
- May 4, 2023Just a demo branch to show right structure of the installation and co… — cohesity/Azure-Sentinel0 reactions
- Dec 6, 2022Cmmc2.0 — cwling75/AzureSentinel0 reactions
- Dec 2, 2022Just initialize this new branch for Cohesity internal collaboration/r… — cohesity/Azure-Sentinel0 reactions · 4 comments
- Aug 5, 2022Create intrigus-lgtm.txt — intrigus-lgtm/Azure-Sentinel0 reactions
- Jun 7, 2022Yaronfr/log4j 1 — qusaiismail/Sentinel0 reactions
- May 30, 2022test new script — sivanguetta/Azure-Sentinel0 reactions · 1 comment
- May 30, 2022test — sivanguetta/Azure-Sentinel0 reactions · 1 comment
- May 26, 2022Run ASIM testers on 'eco-connector-test' workspace — sivanguetta/Azure-Sentinel0 reactions · 1 comment
- May 19, 2022Run ASIM testers on 'eco-connector-test' workspace — sivanguetta/Azure-Sentinel0 reactions · 1 comment
- May 2, 2022[Asim] test kqlFuncYaml2Arm on ASimProcessEvent folder — sivanguetta/Azure-Sentinel0 reactions · 1 comment
- Apr 26, 2022Test GitHub action that generates ARM templates from KQL — sivanguetta/Azure-Sentinel0 reactions
- Feb 14, 2022Google Workspace connector: Don't use pickle — r4vi/Azure-Sentinel0 reactions
On Stack Overflow · 13
- Aug 12, 2024How do I search through the in Sentinel Workbooks stored queries?1 vote
- Apr 3, 2019Azure log analytics: monitoring successful sign-ins following repeated sign-in failures1 vote
- Sep 29, 2024KQL for exfiltration of files/data ...almost there but slightly wrong0 votes · 1 answer
- Aug 8, 2024How do I search through the in Sentinel Workbooks stored queries?0 votes
- May 1, 2024Trying to set Azure Activity Log from Tenant Root(all subscriptions) getting Resource Provider Error0 votes · 1 answer
8 more on Stack Overflow
- Apr 11, 2024Azure Sentinel Incident Trigger in Logic Apps Automation Delay0 votes
- Nov 17, 2023Need Assistance with collecting O365 Audit Logs with function app and directing them to Event Hub0 votes · 1 answer
- Oct 21, 2022Azure Sentinel Sample data CSV0 votes · 1 answer
- Oct 12, 2022AZURE sentinel query to log off Azure remote session for user0 votes
- Feb 4, 2022Integration issues with Microsoft Sentinel and ServiceNow and Get Etag0 votes
- Dec 13, 2021How to detect when a security incident occurs0 votes
- Jul 1, 2021Download multiple file from GitHub public repos without git0 votes
- Feb 13, 2020Creating a Pull Request in Azure sentinel Repository0 votes · 1 answer
On Bluesky · 1
- Feb 12, 2025📦 Azure / Azure-Sentinel ⭐ 4,774 (+3) 🗒 Python Cloud-native SIEM for intelligent security analytics for your entire enterprise. — @github-trending.bsky.social2 likes and reposts
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- Tools/Microsoft-Sentinel-Classic-CLv1-Tables-Impact-Assessment/.github/copilot-instructions.mdCopilot instructions
- .cursor/rules/sentinel-xdr-migration.mdcCursor rule
- sentinel-xdr-migrationSkill
- asim-parser-create-parameter-parserSkill
- asim-parser-create-parserSkill
- asim-parser-creator-orchestratorSkill
- asim-parser-filter-validatorSkill
- asim-parser-github-pr-packagerSkill
- asim-parser-la-deployerSkill
- asim-parser-pr-reviewerSkill
- asim-parser-user-prompterSkill
- asim-parser-validatorSkill
- az-cli-command-runnerSkill
- azure-monitor-logs-ingestionSkill
- log-analytics-workspace-queryerSkill
- run-solution-analyzerSkill
- sentinel-solution-optional-testingSkill
- sentinel-xdr-alert-parity-validatorSkill
- sentinel-xdr-dependency-helperSkill
- sentinel-xdr-detection-validatorSkill
- sentinel-xdr-end-to-end-orchestratorSkill
- sentinel-xdr-migration-orchestratorSkill
- sentinel-xdr-rule-converterSkill
- sentinel-xdr-solution-deployerSkill
- sentinel-xdr-solution-packagerSkill
- solution-release-notes-updaterSkill
- update-solution-analyzerSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

