Skip to content

Add private Splunk MCP deployment templates - #349

Merged
Dalibor Kovacevic (RobiladK) merged 10 commits into
microsoft:mainfrom
cristhianu:feature/private-splunk-mcp-labs
Sep 24, 2026
Merged

Dalibor Kovacevic (RobiladK) merged 10 commits into
microsoft:mainfrom
cristhianu:feature/private-splunk-mcp-labs

Conversation

@cristhianu

@cristhianu Cristhian (cristhianu) commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • This adds a Bicep and Terraform templates for private Splunk MCP connectivity in cross-region and same-region topologies. It uses Splunk connector with Splunk's MCP which uses the VNet for traffic.
  • It deploys Splunk without a public IP using delegated SRE Agent subnets, private DNS, NSGs, NAT, and Global VNet Peering only where required
  • It adds Bash and PowerShell workflows for deployment, Splunk configuration, SRE Agent attachment, token minting, validation, and cleanup
  • It scrubs and verifies deletion of token-bearing Managed Run Commands before displaying minted tokens
  • It documents independent testing, trusted HTTPS versus the optional HTTP test mode, and cleanup procedures

Architecture

Cross-region

flowchart LR
    subgraph AgentRegion[Agent region]
        Agent[SRE Agent]
        AgentSubnet[Delegated agent subnet<br/>Microsoft.App/environments]
        AgentVNet[Agent VNet]
        Agent --> AgentSubnet
        AgentSubnet --- AgentVNet
    end

    subgraph SplunkRegion[Splunk region]
        SplunkVNet[Splunk VNet]
        SplunkSubnet[Private Splunk subnet]
        SplunkVM[Splunk VM<br/>No public IP]
        NAT[NAT Gateway<br/>Outbound bootstrap only]
        SplunkVNet --- SplunkSubnet
        SplunkSubnet --> SplunkVM
        SplunkSubnet -->|Outbound package and image access| NAT
    end

    AgentVNet <-->|Global VNet Peering<br/>Private MCP traffic| SplunkVNet
    DNS[Private DNS zone<br/>Splunk hostname to private IP]
    DNS -. VNet link .-> AgentVNet
    DNS -. VNet link .-> SplunkVNet
Loading

The SRE Agent reaches the private Splunk MCP endpoint across Global VNet Peering; private DNS is linked to both VNets.

Same-region

flowchart LR
    subgraph Region[Shared Azure region]
        subgraph SharedVNet[Shared VNet]
            Agent[SRE Agent]
            AgentSubnet[Delegated agent subnet<br/>Microsoft.App/environments]
            SplunkSubnet[Private Splunk subnet]
            SplunkVM[Splunk VM<br/>No public IP]
            Agent --> AgentSubnet
            AgentSubnet -->|Private MCP traffic| SplunkSubnet
            SplunkSubnet --> SplunkVM
        end
        NAT[NAT Gateway<br/>Outbound bootstrap only]
        SplunkSubnet -->|Outbound package and image access| NAT
    end

    DNS[Private DNS zone<br/>Splunk hostname to private IP]
    DNS -. VNet link .-> SharedVNet
Loading

The SRE Agent and Splunk use isolated subnets in one VNet, so no VNet peering is required.

Validation

  • cross-region and same-region targeted dry-run tests passed
  • Bicep compilation passed for both topologies
  • Terraform init, fmt, and validate passed for both topologies
  • Bash syntax and PowerShell parser/runtime checks passed
  • Bicep and Terraform deployments completed for both topology variants
  • connector discovery and read-only Splunk tool calls completed over private routing
  • Bash and PowerShell token minting verified Run Command output scrubbing and resource deletion
  • git diff --check passed

The aggregate repository test runner was also attempted; unrelated existing tests require jq and have Windows runner failures outside these examples. The two new targeted suites pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Integrate review fixes, harden package transfer, and add runtime regression coverage for the PowerShell deployment paths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 85074578-9d57-4bab-934c-5ec8888ceeac
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 85074578-9d57-4bab-934c-5ec8888ceeac
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 85074578-9d57-4bab-934c-5ec8888ceeac
Scrub and verify deletion of token-bearing Managed Run Commands, preserve primary failures, add cleanup regression coverage, and clarify trusted HTTPS versus lab-only HTTP guidance.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 85074578-9d57-4bab-934c-5ec8888ceeac
Keep the public examples focused on reproducible deployment and testing guidance without dated environment-specific results or capacity rationale.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 85074578-9d57-4bab-934c-5ec8888ceeac
@cristhianu Cristhian (cristhianu) changed the title Add private Splunk MCP deployment labs Add private Splunk MCP deployment templates Sep 23, 2026
Replace the ASCII topology sketches with the Mermaid diagrams used in the pull request description.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 85074578-9d57-4bab-934c-5ec8888ceeac
@cristhianu

Copy link
Copy Markdown
Collaborator Author

The failing check is repository-level, not caused by the Splunk templates. The default-branch workflow passes about 216 KB of changed-file JSON as one jq argument, which exceeds Linux's per-argument limit; the configured webhook also targets a direct SRE Agent endpoint instead of the required Logic App callback. I opened #350 with the tested file-backed payload fix and a fail-fast webhook diagnostic. Because this workflow uses pull_request_target, #350 must land on main and the repository secret must be updated to the Logic App callback before #349 can pass; then synchronizing this branch will rerun the corrected check.

@RobiladK
Dalibor Kovacevic (RobiladK) merged commit 25a4230 into microsoft:main Sep 24, 2026
2 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants