Skip to content

Use DCR-based ingestion in Virus Total playbooks - #14848

Open
v-sabiraj wants to merge 10 commits into
masterfrom
v-sabiraj-updatingvirustotalplaybooks
Open

Use DCR-based ingestion in Virus Total playbooks#14848
v-sabiraj wants to merge 10 commits into
masterfrom
v-sabiraj-updatingvirustotalplaybooks

Conversation

@v-sabiraj

Copy link
Copy Markdown
Contributor

Reworks the VirusTotal Domain Report incident playbook to ingest logs via Azure Monitor Logs Ingestion API using managed identity instead of the Azure Log Analytics Data Collector connector. Adds workspace/table, Data Collection Endpoint, Data Collection Rule, and scoped role assignment resources, wires their runtime parameters into the workflow, and updates report/comment text and metadata to match VTDomainReport_CL usage and new deployment prerequisites.

Required items, please complete

Change(s):

  • See guidance below

Reason for Change(s):

  • See guidance below

Version Updated:

  • Required only for Detections/Analytic Rule templates
  • See guidance below

Testing Completed:

  • See guidance below

Checked that the validations are passing and have addressed any issues that are present:

  • See guidance below

Guidance <- remove section before submitting


Before submitting this PR please ensure that you have read the following sections and filled out the changes, reason for change and testing complete sections:

Thank you for your contribution to the Microsoft Sentinel Github repo.

Details of the code changes in your submitted PR. Providing descriptions for pull requests ensures there is context to changes being made and greatly enhances the code review process. Providing associated Issues that this resolves also easily connects the reason.

Change(s):

  • Updated syntax for XYZ.yaml

Reason for Change(s):

Version updated:

  • Yes
  • Detections/Analytic Rule templates are required to have the version updated

The code should have been tested in a Microsoft Sentinel environment that does not have any custom parsers, functions or tables, so that you validate no incorrect syntax and execution functions properly. If your submission requires a custom parser or function, it must be submitted with the PR.

Testing Completed:

  • Yes/No/Need Help

Note: If updating a detection, you must update the version field.

Before the submission has been made, please look at running the KQL and Yaml Validation Checks locally.
https://github.com/Azure/Azure-Sentinel#run-kql-validation-locally

Checked that the validations are passing and have addressed any issues that are present:

  • Yes/No/Need Help

Note: Let us know if you have tried fixing the validation error and need help.

References:


Reworks the VirusTotal Domain Report incident playbook to ingest logs via Azure Monitor Logs Ingestion API using managed identity instead of the Azure Log Analytics Data Collector connector. Adds workspace/table, Data Collection Endpoint, Data Collection Rule, and scoped role assignment resources, wires their runtime parameters into the workflow, and updates report/comment text and metadata to match VTDomainReport_CL usage and new deployment prerequisites.
@v-sabiraj
v-sabiraj requested review from a team as code owners August 6, 2026 11:20
@v-sabiraj
v-sabiraj marked this pull request as draft August 6, 2026 11:21
@v-amolpatil v-amolpatil self-assigned this Aug 6, 2026
Introduce new alert-triggered and incident-triggered VirusTotal Domain Report playbook templates that use Logs Ingestion via Data Collection Endpoints and Rules, create the custom Log Analytics table, and grant the workflow identity the required DCR role. The existing incident-trigger template is updated to use the Azure Log Analytics Data Collector connection instead of DCR-based ingestion, along with related metadata and query text adjustments.
Update the VirusTotal domain report ARM templates to clearly identify the Log Ingestion API variants. This adjusts the playbook metadata titles and default playbook names for both alert-triggered and incident-triggered deployments so they are easier to distinguish from the non-Log-Ingestion versions.
Adds alert-triggered and incident-triggered Logic App templates that enrich file hashes with VirusTotal data and ingest results into Log Analytics through the Azure Monitor Logs Ingestion API.
Update VirusTotal playbook deployment instructions to assign the Log Analytics Reader role before configuring Sentinel responder permissions and automation rules.
Add alert- and incident-triggered Logic App deployment templates that enrich IP entities with VirusTotal reports and ingest results into Log Analytics through a Data Collection Endpoint and Rule.
@v-sabiraj v-sabiraj changed the title Use DCR-based ingestion in VT domain playbook Use DCR-based ingestion in Virus Total playbooks Aug 12, 2026
Add alert-triggered and incident-triggered Logic App deployment templates that enrich URL entities with VirusTotal results and ingest reports into Log Analytics through the Azure Monitor Logs Ingestion API.
@v-sabiraj
v-sabiraj requested a lite review from Copilot August 18, 2026 13:18

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds DCR-based (Azure Monitor Logs Ingestion API) ingestion to VirusTotal enrichment playbooks, replacing reliance on the Log Analytics Data Collector connector and wiring DCE/DCR runtime parameters into each workflow.

Changes:

  • Adds ARM templates that provision custom Log Analytics tables plus Data Collection Endpoints/Rules for VirusTotal URL/IP/File/Domain enrichment outputs.
  • Updates Logic App workflows to ingest records via HTTP + managed identity to the Logs Ingestion API.
  • Adds scoped role assignment on the DCR for the playbook’s system-assigned identity.

Reviewed changes

Copilot reviewed 8 out of 9 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
Solutions/VirusTotal/Playbooks/Get-VirusTotalURLReport/incident-trigger-logingestionapi/azuredeploy.json New incident-trigger URL enrichment template with table+DCE+DCR and MSI-based ingestion.
Solutions/VirusTotal/Playbooks/Get-VirusTotalURLReport/alert-trigger-logingestionapi/azuredeploy.json New alert-trigger URL enrichment template with table+DCE+DCR and MSI-based ingestion.
Solutions/VirusTotal/Playbooks/Get-VirusTotalIPReport/incident-trigger-logingestionapi/azuredeploy.json New incident-trigger IP enrichment template with table+DCE+DCR and MSI-based ingestion.
Solutions/VirusTotal/Playbooks/Get-VirusTotalIPReport/alert-trigger-logingestionapi/azuredeploy.json New alert-trigger IP enrichment template with table+DCE+DCR and MSI-based ingestion.
Solutions/VirusTotal/Playbooks/Get-VirusTotalFileInfo/incident-trigger-logingestionapi/azuredeploy.json New incident-trigger file-hash enrichment template with table+DCE+DCR and MSI-based ingestion.
Solutions/VirusTotal/Playbooks/Get-VirusTotalFileInfo/alert-trigger-logingestionapi/azuredeploy.json New alert-trigger file-hash enrichment template with table+DCE+DCR and MSI-based ingestion.
Solutions/VirusTotal/Playbooks/Get-VirusTotalDomainReport/incident-trigger-logingestionapi/azuredeploy.json New incident-trigger domain-report template with table+DCE+DCR and MSI-based ingestion.
Solutions/VirusTotal/Playbooks/Get-VirusTotalDomainReport/alert-trigger-logingestionapi/azuredeploy.json New alert-trigger domain-report template with table+DCE+DCR and MSI-based ingestion.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

"location": "[resourceGroup().location]",
"tags": {
"LogicAppsCategory": "security",
"hidden-SentinelTemplateName": "Get-VirusTotalDomainReport",
Comment on lines +45 to +52
"metadata": {
"description": "Full resource ID of the Log Analytics workspace where VirusTotal URL report records will be ingested."
}
},
"WorkspaceLocation": {
"type": "string",
"metadata": {
"description": "Azure region of the Log Analytics workspace. Used for the Data Collection Endpoint and Data Collection Rule."
{
"type": "Microsoft.OperationalInsights/workspaces/tables",
"apiVersion": "2022-10-01",
"name": "[concat(parameters('WorkspaceName'), '/', variables('tableName'))]",
Comment on lines +146 to +147
"workspaceResourceId": "[parameters('WorkspaceResourceId')]",
"name": "LogAnalyticsDestination"
"4. After deployment, attach this playbook to an **automation rule** and map FileHash entity so it runs when alert is triggered.",
"[click here for detail instructions](https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/VirusTotal/Playbooks/Get-VirusTotalFileInfo/readme.md)"
],
"lastUpdateTime": "2023-02-03T00:00:00.000Z",
"2. Assign Microsoft Sentinel Responder Role to playbook.",
"3. Assign Log Analytics Reader Role to playbook on Log Analytics Workspace.",
"4. After deployment, attach this playbook to an **automation rule** and map URL entity so it runs when the incident is created.",
"[click here for detail instructions](https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/VirusTotal/Playbooks/Get-VirusTotalIPReport/readme.md)"
"inputs": {
"body": {
"incidentArmId": "@triggerBody()?['object']?['id']",
"message": "<p>Virus Total URL Report found for @{items('For_each')?['Url']}<br>\nSuspicious: @{outputs('Compose_URL_Report_Record')?['Suspicious']}<br>\nMalicious: @{outputs('Compose_URL_Report_Record')?['Malicious']}<br>\nQuery: VirusTotalURLReport_CL | where VirusTotalId == \"@{outputs('Compose_URL_Report_Record')?['VirusTotalId']}\"</p>"
"inputs": {
"body": {
"incidentArmId": "@triggerBody()?['object']?['id']",
"message": "<p>Virus Total URL Report found for @{items('For_each')?['Url']}<br>\nSuspicious: @{outputs('Compose_URL_Report_Record')?['Suspicious']}<br>\nMalicious: @{outputs('Compose_URL_Report_Record')?['Malicious']}<br>\nQuery: VirusTotalURLReport_CL | where VirusTotalId == \"@{outputs('Compose_URL_Report_Record')?['VirusTotalId']}\"</p>"
Refresh lastUpdateTime timestamps for VirusTotal Logs Ingestion API playbooks (Domain, File, IP, URL) and expand their readme.md files with dedicated sections for Logs Ingestion API vs connector-based deployment variants, including prerequisites, deployment buttons, and required parameters (workspace name/resource ID/location, DCE/DCR names). Also clarifies post-deployment connection authorization and Log Analytics Reader role assignment steps.
Update deployment instructions in all VirusTotal URL report playbooks to reference the correct URL report README instead of the IP report documentation.
@v-sabiraj
v-sabiraj marked this pull request as ready for review August 26, 2026 05:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants