Add DentiSystems Sentinel Solution - #14965
MD Sadman Shovik (Sadman-TheDentian) wants to merge 20 commits into
Conversation
|
@microsoft-github-policy-service agree company="DentiSystems" |
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds the initial DentiSystems Microsoft Sentinel solution package (v1.0.0) including an ARM deployment template, UI definition, solution metadata, and packaged security content for DentiGrid & GATE telemetry.
Changes:
- Added ARM
mainTemplate.json(and packaged copy) deploying the CCP REST API poller data connector, 4 scheduled analytics rules, a workbook, and saved searches for hunting/ASIM normalization. - Added solution documentation and artifacts (workbook JSON, analytic rule JSONs, hunting queries JSON, parser KQL, connector metadata).
- Added a Python helper script to generate/emit the solution template and content files.
Reviewed changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| Solutions/DentiSystems/mainTemplate.json | Primary ARM template for deploying solution resources into a Sentinel-enabled workspace. |
| Solutions/DentiSystems/generate_templates.py | Local generator script intended to emit templates/content files for the solution package. |
| Solutions/DentiSystems/createUiDefinition.json | Azure Portal wizard UI definition for collecting workspace and API parameters. |
| Solutions/DentiSystems/Workbooks/DentiSystems_ThreatOverview.json | Workbook definition used by the solution for visualization. |
| Solutions/DentiSystems/SolutionMetadata.json | Solution manifest metadata (publisher, categories, version, package counts). |
| Solutions/DentiSystems/README.md | Solution documentation (architecture, contents, deployment steps, schema). |
| Solutions/DentiSystems/Parsers/DentiSystems_ASIM_Parser.kql | ASIM normalization parser KQL content (intended function body). |
| Solutions/DentiSystems/Package/mainTemplate.json | Packaged copy of the primary ARM template (for Content Hub packaging). |
| Solutions/DentiSystems/Package/createUiDefinition.json | Packaged copy of the Azure Portal wizard UI definition. |
| Solutions/DentiSystems/Package/README.md | Packaged copy of the solution documentation. |
| Solutions/DentiSystems/HuntingQueries/DentiSystems_HuntingQueries.json | Two hunting queries shipped with the solution. |
| Solutions/DentiSystems/DataConnectors/DentiSystems_CCP.json | Data connector metadata artifact for the package. |
| Solutions/DentiSystems/AnalyticRules/DentiSystems_VolumetricRecon.json | Scheduled analytic rule for volumetric recon detection. |
| Solutions/DentiSystems/AnalyticRules/DentiSystems_SCADA_Tamper.json | Scheduled analytic rule for ICS/BMS protocol tampering detection. |
| Solutions/DentiSystems/AnalyticRules/DentiSystems_HighSeverityBreach.json | Scheduled analytic rule for high-severity honeypot breach detection. |
| Solutions/DentiSystems/AnalyticRules/DentiSystems_GATE_ThreatIntercept.json | Scheduled analytic rule for GATE injection/threat interception detection. |
Suppressed comments (1)
Solutions/DentiSystems/Package/createUiDefinition.json:1
- Same issue as the non-packaged
createUiDefinition.json:steps('basics')is invalid because"basics"isn’t a step. Update to usebasics('workspace')for workspace name/location so the packaged UI definition deploys successfully.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| "outputs": { | ||
| "workspace": "[steps('basics').workspace.name]", | ||
| "workspaceLocation": "[steps('basics').workspace.location]", | ||
| "location": "[steps('basics').workspace.location]", | ||
| "dentiSystemsApiEndpoint": "[steps('dentiSystemsConfig').apiEndpoint]", | ||
| "dentiSystemsApiKey": "[steps('dentiSystemsConfig').apiKey]", | ||
| "enableDataConnector": "[steps('dentiSystemsConfig').enableDataConnector]", | ||
| "enableAnalyticRules": "[steps('securityContent').enableAnalyticRules]", | ||
| "enableWorkbooks": "[steps('securityContent').enableWorkbooks]", | ||
| "enableHuntingQueries": "[steps('securityContent').enableHuntingQueries]" | ||
| } |
| azure_sentinel_dir = "/home/sadmanthedentian/Documents/DENTISYSTEMS/Azure-Sentinel" | ||
| package_dir = os.path.join(azure_sentinel_dir, "Package") | ||
| connectors_dir = os.path.join(azure_sentinel_dir, "DataConnectors") | ||
| rules_dir = os.path.join(azure_sentinel_dir, "AnalyticRules") | ||
| workbooks_dir = os.path.join(azure_sentinel_dir, "Workbooks") | ||
| hunting_dir = os.path.join(azure_sentinel_dir, "HuntingQueries") | ||
| parsers_dir = os.path.join(azure_sentinel_dir, "Parsers") | ||
|
|
||
| for d in [azure_sentinel_dir, package_dir, connectors_dir, rules_dir, workbooks_dir, hunting_dir, parsers_dir]: | ||
| os.makedirs(d, exist_ok=True) |
| for filepath, content in files_to_write.items(): | ||
| with open(filepath, "w", encoding="utf-8") as f: | ||
| json.dump(content, f, indent=2) | ||
| print(f"Wrote {filepath} ({os.path.getsize(filepath)} bytes)") |
| DENTIGRIDThreats_CL | ||
| | extend EventVendor = 'DentiSystems', EventProduct = 'DentiGrid', EventProductVersion = '1.0' |
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
…tputs, wrap ASIM KQL parser view, and refine generate_templates
| @@ -0,0 +1,36 @@ | |||
| import json | |||
|
Hi MD Sadman Shovik (@Sadman-TheDentian) Invalid domains: [Security - Deception & Honeypots] verticals: [Critical Infrastructure, PropTech & Smart Buildings, Enterprise Security] provided. Kindly refer to the below solution as a reference for the analytical rule and CCF connector folder structure https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/Cloudflare%20CCF Thanks! |
|
Hi MD Sadman Shovik (@Sadman-TheDentian) Kindly review above comments. Thanks! |
1 similar comment
|
Hi MD Sadman Shovik (@Sadman-TheDentian) Kindly review above comments. Thanks! |
Required items, please complete