·
Last changedVersion:
This version passed the hardening gate. Hardening applied 28 targeted changes and preserved all other text. Classified findings before hardening: 4. Classified findings closed: 3. Classified findings remaining: 1. Unclassified scanner findings remaining: 0. Review findings closed: 18. Review findings remaining: 0.
4
1
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
references/iac-patching-terraform.md | Tool & MCP Manipulation | MCP configuration abuse | Medium | Closed | |
SKILL.md | Tool & MCP Manipulation | MCP configuration abuse | Medium | Open | |
references/iac-patching-bicep.md | Tool & MCP Manipulation | MCP configuration abuse | Medium | Closed | |
SKILL.md | Excessive Agency & Rogue Autonomy | — | Medium | Closed |
4 findings
| Property | Details |
|---|---|
Best for | Reliability posture assessment, zone redundancy enablement, multi-region failover setup |
Primary capabilities | Reliability assessment table, Zone Redundancy Configuration, Multi-Region IaC Generation |
Supported services | Azure Functions, App Service (Container Apps planned for a future version) |
MCP tools | Azure Resource Graph queries, Azure CLI commands |
Activate this skill when user wants to:
az loginaz extension add --name resource-graph (first check whether it is already installed, and ask the user before installing it)| Tool | Purpose |
|---|---|
| Generate |
| List available subscriptions |
| List resource groups |
Primary query method: Azure Resource Graph via az graph query (requires az extension add --name resource-graph).
Show any command produced by mcp_azure_mcp_extension_cli_generate to the user, and check that it is one of the az commands described in this skill and its references, before running it.
Important: Always scope queries to the user's specified resource group or subscription. Add these filters to every Resource Graph query:
| where resourceGroup =~ '<rg-name>'--subscriptions <sub-id> flag on az graph query| where name =~ '<app-name>'Validate user-supplied names against Azure naming rules (letters, digits, hyphens, underscores, periods and parentheses) and escape single quotes before placing them in a query. Echo the resolved resource IDs to the user before any remediation.
Two-step assessment: platform-level discovery first, then per-service deep dive.
Step 1 — Platform discovery (find what's there). Use these to enumerate resources in scope and detect cross-cutting reliability gaps:
| Platform check | Reference |
|---|---|
Zone redundancy — discovery | |
Storage redundancy (cross-service) | |
Multi-region & global load balancers | |
Front Door / Traffic Manager / App Insights probes |
Step 2 — Per-service deep dive. For each compute resource discovered in Step 1, load the matching service reference. The service reference is the single source of truth for that service's plan/SKU rules, assessment queries, CLI commands, IaC patches (Bicep + Terraform + AVM), and reporting hints.
This skill version ships only the Azure Functions and App Service per-service references. Other compute services are listed below explicitly so the dispatch logic is unambiguous: if a resource matches an unsupported row, do not attempt to load a reference, fabricate CLI commands, or generate IaC patches for it.
| Service detected | Reference |
|---|---|
Azure Functions ( | |
Azure App Service (non-Functions sites: | |
Azure Container Apps ( | ⚪ Not yet shipped — planned for a future version |
Present findings as a feature-pivoted table: one row per reliability feature (Zone redundancy on compute, Zone-redundant storage, Health probes, Multi-region failover), with a single status indicator and the specific resources that are relevant to that feature. This avoids the noise of one-row-per-resource with mostly n/a cells. Do not assign numeric scores or grades.
Rules for the table:
🟢 ON — feature is fully enabled across all relevant resources in scope🟡 PARTIAL — some resources have it, some don't (or partial config like liveness-only)🔴 OFF — feature is missing on all relevant resourcesOFF with the current SKU when relevant (🔴 LRS, 🔴 GRS, 🟢 ZRS, 🟢 GZRS). When no SKU is set in IaC, label as 🔴 GRS (ARM/AVM default) and note that in the resource line.(FC1), (defaulted; no SKU set), liveness only, needs code change (FC1)).— already ON so the user sees credit for what's right.n/a, —, or empty cells. If a feature doesn't apply to any resource in scope, drop the row.When user wants to fix findings from the assessment:
After assessment, if user says "fix it" / "improve my reliability" / "enable zone redundancy":
Run fixes against live resources using az CLI commands. Quick wins first, then ask before the slow storage migration.
The exact CLI commands per service live in the per-service references — pick the one(s) matching the resources discovered in Phase 2:
| Fix | Reference |
|---|---|
Enable zone redundancy / configure health probes (Functions) | |
Enable zone redundancy / configure health probes (App Service) | |
Upgrade storage replication (cross-service) | |
Set up multi-region (cross-service) | |
Platform overview / verification | references/configure-zone-redundancy.md, references/configure-health-probes.md |
Execution order — always quick wins first:
Zone redundancy on compute (fast, in-place property update on the App's plan).
Health probes (Premium / Dedicated only — in-place; for FC1 / Consumption, follow the consent gate in configure-health-probes.md).
Verify the compute changes succeeded before doing anything else.
⛔ STOP — Ask about storage upgrade. Compute is now zone-redundant, but storage may still be LRS or GRS. Ask the user explicitly:
az storage account migration start) with the discovered account name and resource group, and report progress at checkpoints with az storage account migration show until az storage account show --query sku.name reports the target SKU.Multi-region — do NOT auto-run. Handled in Step 3 below as an explicit follow-up after re-assessment.
Update the user's Bicep or Terraform files so reliability settings are persistent.
Step 1: Detect IaC type
infra/ folder in project root*.bicep or *.tf files*.bicep files → use Bicep patching*.tf files → use Terraform patchingStep 2: Classify each fix by risk level
| Fix | Risk Level | What Happens |
|---|---|---|
Zone redundancy (App plan) | 🟢 Safe patch | In-place property update on next deploy |
Storage LRS → ZRS | 🟡 Pre-migration required | Live storage migration must complete before the IaC SKU change can deploy. Never bundle with safe patches — use the two-deploy flow in Steps 3–5. |
Health check path (Basic/Standard/Premium / Dedicated) | 🟢 Safe patch | In-place update, but causes app restart; restart required, so suggest a maintenance window for production |
Health check path (FC1 / Consumption) | ⚪ Code-only — ask first |
|
Step 3: Apply patches in two deploys (quick wins first)
The IaC patching framework (detection, AVM-module guidance, deploy-order rule, storage SKU patch) lives in:
| IaC Type | Framework reference |
|---|---|
Bicep | |
Terraform |
The actual per-service compute patches (Function App plan ZR, App Service Plan ZR, etc.) live in the per-service references — load the matching service file from Phase 2 for the exact Bicep / Terraform / AVM snippets. Only Azure Functions and App Service have per-service references in this skill version; Container Apps is out of scope.
Deploy 1 — Quick wins only. Patch the 🟢 Safe items (zone redundancy on the App Service/Function App plan, health probes on Basic/Standard/Premium / Dedicated). Do NOT include the storage SKU patch in this deploy. Health check path changes restart the app, so call that out in the confirmation.
After patching, the skill runs the deploy itself once the user approves. Detect the deployment tool, and before asking, show the user:
terraform plan -out tfplan summary for Terraform, or a plain-words list of the resources each Bicep or azd deploy will change, with any deletes or replacements flaggedazure.yaml, external Terraform modules or providers, and any custom execution blocks in the repository's IaC; ask the user to confirm they trust the repositoryThe approval covers only that exact command and preview. Stop and ask again if the preview includes changes beyond the reliability patches. The user may also choose to run the command themselves.
On yes, run the appropriate command, stream output back to the user, and continue to the next step on success:
azure.yaml): azd upaz deployment group create --resource-group <rg> --template-file infra/main.bicep --parameters @infra/main.parameters.jsonterraform plan -out tfplan → (show plan summary) → terraform apply tfplanOn no, stop and report the patched files; do not proceed to Step 4 / Re-Assess.
If deployment fails, surface the error and stop — do not continue to the storage step.
⛔ STOP — Ask about storage upgrade before Deploy 2. After Deploy 1 succeeds, ask the user explicitly:
Step 4: Storage migration (only if user said yes in Step 3)
Only after the user said yes in Step 3, run the following. Before starting, confirm with the account show query in configure-storage.md that the account kind is StorageV2 and the tier is Standard, then show the user the discovered account name, resource group, current SKU and target SKU. Replace the example names below with the discovered values. Show progress as you go:
Report progress at checkpoints and hand control back to the user ("this is still running, check back later") rather than blocking the entire conversation.
Step 5: Deploy 2 — storage SKU patch
After the migration completes, the skill patches the storage SKU in IaC and runs the same deploy command as Step 3 (e.g. azd up). This deploy is a no-op confirmation that the IaC matches the live state. Before running it, show the storage SKU diff, the exact command and the target scope, and ask the user to approve that exact command. If the preview shows any change other than the storage SKU, stop and ask again.
After changes are applied (CLI) or deployed (IaC), automatically re-run the assessment and show the same feature-pivoted table as Phase 3, with each feature row's status updated to reflect the new state. Briefly call out what changed since the previous run.
Multi-region is a significant cost/complexity step. Do NOT start it automatically. After re-assessment, only if all core single-region reliability features are 🟢 ON (zone-redundant compute, ZRS/GZRS storage, health probes), explicitly ask the user and wait for their response before doing anything:
📦 Multi-region IaC generated. Ready to deploy with \azd up`. Proceed? (yes / no)`azd up / az deployment group create / terraform apply) and streams output. Do not stop and tell the user to run it.| Priority | Criteria | Action |
|---|---|---|
Critical | No zone redundancy AND production workload | Fix immediately |
High | LRS storage on zone-redundant compute | Fix within days |
Medium | No multi-region (single region but zone-redundant) | Plan for next sprint |
Low | Missing health probes or monitoring gaps | Track and fix |
| Error | Message | Remediation |
|---|---|---|
Authentication required | "Please login" | Run |
Access denied | "Forbidden" | Confirm Reader/Contributor role assignment |
Plan doesn't support ZR | "Upgrade required" | Inform user of plan upgrade path + cost delta |
Region doesn't support AZ | "Region limitation" | Suggest supported regions |
| Action | This skill does | Hand off to |
|---|---|---|
Assess reliability posture | ✅ Yes | — |
Recommend improvements | ✅ Yes | — |
Enable zone redundancy (CLI commands) | ✅ Yes | — |
Patch Bicep/Terraform for reliability | ✅ Yes | — |
Generate multi-region IaC | ✅ Yes (additions for the secondary region + Front Door) |
|
Deploy IaC for reliability changes | ✅ Yes (runs |
|
Validate pre-deployment | Reliability checks only |
|
Get started with chainctlchainctl skill install public/microsoft/azure-reliability:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.cgr.dev/public/github.com/microsoft/skills/azure-reliability:latest
MIT
HARDENING.md
LICENSE
SKILL.md
references/configure-health-probes.md
references/configure-multi-region.md
references/configure-storage.md
references/configure-zone-redundancy.md
references/health-probe-checks.md
references/iac-patching-bicep.md
references/iac-patching-terraform.md
references/multi-region-checks.md
references/services/app-service/reliability.md
references/services/functions/reliability.md
references/storage-redundancy-checks.md
references/zone-redundancy-checks.md