agentleFS
Microsoft AzureKnown publisherAzure/Azure-Sentinel/.github/skills/sentinel-xdr-solution-deployer/SKILL.md

sentinel-xdr-solution-deployer

Skill6.2k starsChanged 16 days agoMITView on GitHub

Deploy and verify Sentinel Analytic Rules and Defender XDR Custom Detections disabled in an approved non-production environment.

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 10 are distinctive, and 2 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.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use this skill only after full validation and packaging have passed, or after the canonical workflow has accepted a fresh, applied partial …

    line 8
  2. Distinctive:

    After the Qualification target is locked and before Discovery, review the current local scope plan and ask once for consent to the bounded …

    line 21
  3. Distinctive:

    Use ARM validation or preview only when supported for the selected resource types and deployment features.

    line 93
  4. Very specific:

    Before the write step, review the latest local Qualification deploymentPlanning scope and explicitly persisted component-specific planning …

    line 105
  5. Distinctive:

    Do not require a separate pre-deployment check for whether every Sentinel Analytic Rule or Custom Detection already exists.

    line 118
  6. Distinctive:

    Stop on unresolved conversion review, invalid KQL, missing entity mappings, duplicate IDs, or count mismatches within the exact selected …

    line 174
  7. Distinctive:

    Never infer permission from Entra Global Administrator.

    line 177
  8. Distinctive:

    Ask before launching interactive authentication.

    line 179
  9. Distinctive:

    every requested ARM or Graph operation succeeds.

    line 185
  10. Distinctive:

    every deployed rule is disabled.

    line 187
  11. Distinctive:

    If Graph read permission is unavailable, report verification as blocked even when the write deployment reports success.

    line 192
  12. Very specific:

    Do not enable a rule in this skill.

    line 196

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Deploy Sentinel and XDR detections safely

Use this skill only after full validation and packaging have passed, or after the canonical workflow has accepted a fresh, applied partial package meeting the strict over-50% threshold. For a partial package, deploy only the exact selected AR/CD content bound by its current package-selection plan; excluded items remain visible but are not deployment failures for that selected scope. Deployment is a write operation and always requires explicit user approval for the exact subscription, resource group, workspace, solution, and deployment mode.

Modes

One early scope-consent request

After the Qualification target is locked and before Discovery, review the current local scope plan and ask once for consent to the bounded potential action groups. Show the exact target, solution/version, inventory counts, eligible IDs and caps, current package identity, resource types, and which conditional prerequisites are proven, absent, or unknown. Include:

  1. disabled Sentinel alert-rule and Graph Custom Detection creation or reviewed updates;
  2. conditional fallback DCR/DCE creation;
  3. conditional creation of a proven-absent custom-log table;
  4. reviewed mock telemetry ingestion, including payload, records/batches, stream, estimated bytes/cost, and retention impact;
  5. controlled alert parity, with exact pairs, proposed time window, bounded enable/restore operations, and abort restoration;
  6. full-package installation and selected XDR Content Hub registration; and
  7. explicitly owned cleanup/deletion, listing exact resources and ownership evidence while excluding pre-existing or unowned resources.

Show a structured consent form with Approve the broadest currently bounded and available scope preselected as the suggested default, plus Select components, Revise the plan, and Decline advance consent. This default is only a proposal. Display each proposed component, cap, exact target, resource family, and package flag/value before asking the user to submit. Require affirmative submission/confirmation of the displayed scope before recording consent; a preselected choice alone, cancellation/closure, decline, or missing response records no approval. Permit narrowing, revision, or decline.

The suggested broad scope includes only components supported by the current consent CLI and fully bound to current evidence. If available, it can include the disabled Sentinel-AR/Graph-CD pair and separate later fullPackageAcceptance. For package acceptance, show every exact current package-selection flag and its boolean value. If the plan exposes five valid flags and the broad proposal selects all five, list each flag by name with true; never hide selections behind an “all” label or invent flags. Do not silently include unknown/provisional ingestion, DCR/DCE, custom-table, parity, or cleanup scopes. If the broadest scope cannot be fully bound, suggest only the largest valid bounded subset and explicitly list unavailable or excluded groups with reasons.

Persist only the exact, affirmatively submitted component and flag selection after verifying it against the current plan. Ask again only if the target, plan identity, action/resource families, payload, caps, package flags, or cleanup ownership changes. Missing or unknown scope is provisional, not unlimited; denial does not block independent read-only validation.

The current CLI can persist consent for the direct disabled AR/CD pair, fullPackageAcceptance, mockTelemetryIngestion, fallbackDcr, fallbackDce, and customTableCreate. controlledAlertParity is planning metadata only until a finite test window and complete batch fixture plan are bound; ownedResourceCleanup is unsupported because there is no exact run-owned deletion inventory or deletion executor. Do not invent CLI component names or represent either as consented. Previous narrow DCR/DCE consent does not imply ingestion, parity enablement, package acceptance, or cleanup consent.

Authentication, Entra admin consent, role assignments, and permission readiness are separate from both advance planning consent and final resource write approval. None implies another.

Package acceptance

Validate and optionally deploy Package\mainTemplate.json as a complete solution package. For a partial package, V3.1 has already restricted that template to the validated selected content; never repopulate it by scanning excluded YAML.

  • DeployAnalyticsRule=true selects Sentinel Analytic Rule content.
  • DeployCustomDetection=true selects both Defender XDR Custom Detection installation and Content Hub registration, independently of Sentinel content. Both selections may be true. Use only parameters declared by the package.

Use ARM validation or preview only when supported for the selected resource types and deployment features. Bicep extensibility imports do not support what-if (Microsoft Learn: unsupported deployment features); do not pass or wait for a what-if result for that route. An ordinary ARM preview cannot prove extension acceptance, and ARM validation does not validate extension behavior. Registration support remains unverified; emitted templates are not proof of live acceptance. The obsolete RegisterE5Content and E5Flavor controls are not declared. Exact-scope approval must explicitly include registration when selecting CDs. Existing instances are not disabled or removed by these switches.

Before the write step, review the latest local Qualification deploymentPlanning scope and explicitly persisted component-specific planning consent. If the bound plan is unchanged, do not repeat the broad planning question. Planning consent is not write authority. Immediately before each bounded write operation or batch, show its exact scope and obtain fresh explicit approval. A single approval may cover the enumerated resource/API operations in that batch; it need not be repeated for every HTTP request. Require a new approval if any operation expands beyond the batch. Missing or stale planning consent, permissions, or successful preflight does not substitute for the immediate gate.

Repeatable rule deployment in a lab

Do not require a separate pre-deployment check for whether every Sentinel Analytic Rule or Custom Detection already exists. For the same reviewed identities and locked, approved non-production target, the Sentinel command uses PUT on the deterministic alert-rule resource ID to create or update the rule idempotently for the same ID and payload; rules remain disabled. The alert-rule-template API is a catalog read surface, not a resource created by this deployment command.

The current Graph deployer derives xdr-<source-rule-GUID> and internally GETs that exact ID, POSTs only when it is absent, or PATCHes when present, then performs required read-back verification. This is repeatable at the supported CLI workflow level for the reviewed ID; it is not a guarantee that arbitrary Graph POST calls are idempotent. The separate preflight-deployment exact-rule read is an optional diagnostic, not proof of ownership or deployment readiness. The Graph deployment command still requires its own GET; the current preflight also performs exact-ID reads and can block on a denied read. These backend checks cannot be skipped by changing instructions. Do not bypass them with direct API calls or blindly retry an ambiguous write. If an existing ID has uncertain ownership or content, stop for maintainer review rather than overwriting it.

This repeatability applies only to the exact reviewed solution content in the locked approved lab, under the existing exact-scope approval, permission, disabled-state, and verification gates. It does not authorize production writes, changes to unrelated resources, or overwriting enabled or unowned content.

Alert-parity preparation

Deploy each selected reviewed pair disabled. For an applied partial package, the deterministic deployment commands consume the selection-bound source and Custom Detection lists, not every file in their folders:

sentinel-xdr-migration deploy-analytic-rules `
  --solution "<solution-path>" `
  --workspace-resource-id "<workspace-arm-id>"

sentinel-xdr-migration deploy --solution "<solution-path>"

The first command writes Solutions\<solution>\Logs\sentinel-xdr-migration\<run-id>\deployment.sentinel.json. The second writes Solutions\<solution>\Logs\sentinel-xdr-migration\<run-id>\deployment.graph.json.

Safety gates

Before any write:

  1. Confirm the target is a non-production lab.
  2. Show the subscription, resource group, workspace, tenant, solution, package version, mode, exact resource IDs, operation types, and count.
  3. Immediately before the bounded operation/batch, require explicit approval for those exact values and the listed writes.
  4. Confirm every Custom Detection YAML has properties.status: disabled.
  5. Stop on unresolved conversion review, invalid KQL, missing entity mappings, duplicate IDs, or count mismatches within the exact selected scope. Excluded item failures remain separately reported and do not expand the deploy set.
  6. Never infer permission from Entra Global Administrator. Verify Azure RBAC and Microsoft Graph Custom Detection scopes separately.
  7. Ask before launching interactive authentication.

Verification

Deployment passes only when:

  • every requested ARM or Graph operation succeeds;
  • deployed AR and CD IDs match the reviewed source manifest;
  • every deployed rule is disabled;
  • display names, queries, schedules, severities, tactics, and entity mappings match the generated artifacts; and
  • the deployment reports contain no failed or silently skipped item.

If Graph read permission is unavailable, report verification as blocked even when the write deployment reports success. Do not claim live status solely from the source template.

Do not enable a rule in this skill. Rule enablement belongs exclusively to sentinel-xdr-alert-parity-validator, which must disable every test rule on completion or abort.

Download now (ZIP)

Trending

More talk lately.about the whole repository

Dec 2025: 0 mentionsJan 2026: 2 mentionsFeb 2026: 1 mentionMar 2026: 1 mentionApr 2026: 0 mentionsMay 2026: 2 mentionsJun 2026: 1 mentionJul 2026: 1 mentionAug 2026: 4 mentionsSep 2026: 6 mentionsOct 2026: 2 mentionsNov 2026: 0 mentions
Dec 2025Jun 2026Nov 2026
Mentions a month of the Azure/Azure-Sentinel repository that our weekly crawl found. There is no adoption data for this file yet.

Who's talking about Azure/Azure-Sentinel

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

38 more on GitHub

On Stack Overflow · 13

8 more on Stack Overflow

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.