XdrLogRaider — new community solution (Defender XDR portal-internal /apiproxy telemetry connector)#14668
XdrLogRaider — new community solution (Defender XDR portal-internal /apiproxy telemetry connector)#14668akefallonitis wants to merge 4 commits into
Conversation
…piproxy telemetry connector) New Azure Function data connector solution that ingests Microsoft Defender XDR portal-internal /apiproxy/* audit and reporting telemetry into per-Category Defender_<Category>_CL custom Log Analytics tables. Community-supported, read-only, self-hosted in the customer's own subscription/tenant with unattended Entra service-account auth (TOTP or Passkey MFA) and transparent SSO refresh. Packaged with the V3 solution tool. NOTE: the data source is Defender's undocumented, unsupported portal-internal /apiproxy surface (disclosed in the connector description).
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 new XdrLogRaider community Microsoft Sentinel solution, packaging an Azure Function-based data connector for ingesting Defender XDR portal-internal /apiproxy/* telemetry into custom Log Analytics tables.
Changes:
- Introduces solution metadata + release notes for Content Hub packaging.
- Adds solution package artifacts (ARM mainTemplate + createUiDefinition + test parameters).
- Adds the data connector definition (GenericUI) for Defender_* custom tables.
Reviewed changes
Copilot reviewed 7 out of 12 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| Solutions/XdrLogRaider/SolutionMetadata.json | Adds Content Hub solution metadata (publisher/support/categories). |
| Solutions/XdrLogRaider/ReleaseNotes.md | Adds initial release notes entry. |
| Solutions/XdrLogRaider/Package/testParameters.json | Adds ARM-TTK-friendly parameters for validation/testing. |
| Solutions/XdrLogRaider/Package/mainTemplate.json | Adds the solution/package ARM template and embedded data connector resources. |
| Solutions/XdrLogRaider/Package/createUiDefinition.json | Adds UI definition for selecting the target workspace and install flow text. |
| Solutions/XdrLogRaider/Data/Solution_XdrLogRaider.json | Adds solution packaging manifest used by the solution tooling. |
| Solutions/XdrLogRaider/Data Connectors/XdrLogRaider_API_FunctionApp.json | Adds the GenericUI data connector definition (queries, data types, instructions). |
| { | ||
| "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", | ||
| "apiVersion": "2023-04-01-preview", | ||
| "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", | ||
| "properties": { | ||
| "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", | ||
| "contentId": "[variables('_dataConnectorContentId1')]", | ||
| "kind": "DataConnector", | ||
| "version": "[variables('dataConnectorVersion1')]", | ||
| "source": { | ||
| "kind": "Solution", | ||
| "name": "XdrLogRaider", | ||
| "sourceId": "[variables('_solutionId')]" | ||
| }, | ||
| "author": { | ||
| "name": "Alex Kefallonitis", | ||
| "email": "[variables('_email')]" | ||
| }, | ||
| "support": { | ||
| "name": "Alex Kefallonitis", | ||
| "email": "al.kefallonitis@gmail.com", | ||
| "tier": "Community", | ||
| "link": "https://github.com/akefallonitis/xdrlograider/issues" | ||
| } | ||
| } | ||
| } | ||
| ] | ||
| }, | ||
| "packageKind": "Solution", | ||
| "packageVersion": "[variables('_solutionVersion')]", | ||
| "packageName": "[variables('_solutionName')]", | ||
| "packageId": "[variables('_solutionId')]", | ||
| "contentSchemaVersion": "3.0.0", | ||
| "contentId": "[variables('_dataConnectorContentId1')]", | ||
| "contentKind": "DataConnector", | ||
| "displayName": "Microsoft Defender XDR (XdrLogRaider)", | ||
| "contentProductId": "[variables('_dataConnectorcontentProductId1')]", | ||
| "id": "[variables('_dataConnectorcontentProductId1')]", | ||
| "version": "[variables('dataConnectorVersion1')]" | ||
| } | ||
| }, | ||
| { | ||
| "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", | ||
| "apiVersion": "2023-04-01-preview", | ||
| "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", | ||
| "dependsOn": [ | ||
| "[variables('_dataConnectorId1')]" | ||
| ], | ||
| "location": "[parameters('workspace-location')]", | ||
| "properties": { | ||
| "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", | ||
| "contentId": "[variables('_dataConnectorContentId1')]", | ||
| "kind": "DataConnector", | ||
| "version": "[variables('dataConnectorVersion1')]", | ||
| "source": { | ||
| "kind": "Solution", | ||
| "name": "XdrLogRaider", | ||
| "sourceId": "[variables('_solutionId')]" | ||
| }, | ||
| "author": { | ||
| "name": "Alex Kefallonitis", | ||
| "email": "[variables('_email')]" | ||
| }, | ||
| "support": { | ||
| "name": "Alex Kefallonitis", | ||
| "email": "al.kefallonitis@gmail.com", | ||
| "tier": "Community", | ||
| "link": "https://github.com/akefallonitis/xdrlograider/issues" | ||
| } | ||
| } | ||
| }, | ||
| { | ||
| "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentId1'))]", | ||
| "apiVersion": "2021-03-01-preview", | ||
| "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", | ||
| "location": "[parameters('workspace-location')]", | ||
| "kind": "GenericUI", | ||
| "properties": { | ||
| "connectorUiConfig": { | ||
| "title": "Microsoft Defender XDR (XdrLogRaider)", |
| "availability": { | ||
| "status": 1, | ||
| "isPreview": false | ||
| }, |
| "availability": { | ||
| "status": 1, | ||
| "isPreview": true | ||
| }, |
| "Data Connectors/XdrLogRaider_API_FunctionApp.json" | ||
| ], | ||
| "Metadata": "SolutionMetadata.json", | ||
| "BasePath": "C:\\Users\\alkef\\Desktop\\Repos\\Azure-Sentinel\\Solutions\\XdrLogRaider", |
| | **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | | ||
| |-------------|--------------------------------|------------------------------------------------------| | ||
| | 3.0.1 | 13-07-2026 | Initial Solution release. Adds the XdrLogRaider Azure Function data connector for Microsoft Defender XDR portal-internal `/apiproxy/*` telemetry (per-Category `Defender_<Category>_CL` tables). | |
| "defaultValue": "", | ||
| "type": "string", | ||
| "metadata": { | ||
| "description": "Workspace name for Log Analytics where Microsoft Sentinel is setup" |
| "type": "string", | ||
| "defaultValue": "", | ||
| "metadata": { | ||
| "description": "[concat('Region to deploy solution resources -- separate from location selection',parameters('location'))]" |
| "options": { | ||
| "link": { | ||
| "label": "Learn more about connecting data sources", | ||
| "uri": "https://docs.microsoft.com/azure/sentinel/connect-data-sources" |
…stom tables, logo) - Connector card permissions now match the Azure Function connector template (workspace read/write/delete + sharedKeys + Microsoft.Web/sites permissions). - Register the 11 Defender_<Category>_CL custom tables so the KQL validator recognizes the connector's sample/graph queries. - Remove the logo's gradient id (the logo validator requires GUID-format ids; a solid-fill logo has no id, matching passing solution logos). Drop the redundant connector-folder logo copy. - Regenerate the Package (v3.0.2) and sync ReleaseNotes.
|
@microsoft-github-policy-service agree |
|
Kindly review the Copilot comments added above and resolve them, if applicable. Thanks! |
- Align availability.isPreview to true across the connector card and generated mainTemplate (accurate for the undocumented /apiproxy surface; resolves the card/template mismatch). - Update documentation links docs.microsoft.com -> learn.microsoft.com. - Fix grammar in a generated parameter description (setup -> set up) and replace a literal ARM concat() in a parameter description with plain text. - Use a generic (non-personal) BasePath value; the field is required by the createSolutionV3 packaging tool.
|
Thanks @v-maheshbh — I went through the Copilot review comments. Here's what changed, and where a comment isn't applicable: Fixed (solution-authored):
Tool-generated standard artifacts (kept as-is so the Package matches a fresh
Not applicable:
The latest commit re-runs cleanly through the V3 tool. Happy to adjust any of the tool-generated items if you'd like them changed regardless. |
|
we are putting your PR on hold because your solution uses Azure Function and not Sentinel Codeless Connector Framework (CCF). We would be happy to work with you to migrate your solution to CCF. Please contact the Microsoft Sentinel Partners at AzureSentinelPartner@microsoft.com to discuss available options. If this connector needed, please take approval from the azure app assure team on mail and share the screenshot with us to proceed with azure function app connector. Thanks! |
hello @v-maheshbh ccf is not applicable to xdrlograider solution as it uses internal api auth :/ |
XdrLogRaider — new community solution (DRAFT)
This PR adds a new Microsoft Sentinel community solution: XdrLogRaider, an Azure Function data connector that ingests Microsoft Defender XDR portal-internal
/apiproxy/*audit and reporting telemetry into per-CategoryDefender_<Category>_CLcustom Log Analytics tables.support.tier: Community).What it does
Defender_<Category>_CLtables, one typed row per event with raw JSON preserved, with dynamic per-tenant capability discovery.This connector authenticates to and reads from Microsoft Defender XDR portal-internal
/apiproxy/*endpoints, which are undocumented and unsupported and may change or break without notice. I'm raising this explicitly and up front, because the Microsoft Sentinel team is best placed to decide whether and how you'd like a community connector on this surface represented in the Content Hub. It is a community, non-Microsoft project, read-only, intended for authorized use within the customer's own tenant. I'm very happy to adjust anything — connector kind, template structure, scope, or framing — per your guidance.Packaging notes
Tools/Create-Azure-Sentinel-Solution/V3/createSolutionV3.ps1(version 3.0.1).function-app.zip) is committed underSolutions/XdrLogRaider/Data Connectors/and referenced by an in-reporaw.githubusercontent.com/Azure/Azure-Sentinel/master/...URL (as IllumioSaaS / NordPass do). Happy to switch to anaka.ms/sentinel-XdrLogRaider-functionappredirect if you'd prefer to mint one.IDs Should Be Derived From ResourceIDson the tool-generated metadata resource (the common Sentinel-solution metadata pattern). Guidance welcome.Opening as a draft to invite the review and the data-source discussion before finalizing.