Goes beyond the WAF-COST pillar checklist into concrete FinOps tooling — budgets with alert thresholds, autoscale right-sizing playbooks, and cost-anomaly detection. Flags no Azure Budget resource with action-group alerting, autoscale rules with no documented right-sizing review cadence, no cost-anomaly alerts configured, and orphaned/unused resources with no automated cleanup policy. Outputs findings with pilot-azure cost-finops standard IDs.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add AgenticPawan/FullStack-Pilot --skill azure-cost-finops --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Azure Cost Finops?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/agenticpawan-azure-cost-finops)More formats (shields.io, HTML) on the badges page.
---
name: azure-cost-finops
description: Goes beyond the WAF-COST pillar checklist into concrete FinOps tooling — budgets with alert thresholds, autoscale right-sizing playbooks, and cost-anomaly detection. Flags no Azure Budget resource with action-group alerting, autoscale rules with no documented right-sizing review cadence, no cost-anomaly alerts configured, and orphaned/unused resources with no automated cleanup policy. Outputs findings with pilot-azure cost-finops standard IDs.
when_to_use: Azure Budget, cost alert, autoscale right-sizing, cost anomaly detection, FinOps, orphaned resources, unused resource cleanup, budget threshold, cost management, reserved instances, savings plan
---
## Standard IDs
| ID | Severity | What it checks |
|----|----------|-----------------|
| FIN-001 | P1 | No Azure Budget resource with action-group alerting |
| FIN-002 | P2 | Autoscale rules with no documented right-sizing review cadence |
| FIN-003 | P2 | No cost-anomaly detection/alerts configured |
| FIN-004 | P2 | Orphaned/unused resources with no automated cleanup policy |
---
## Check A — No Budget resource with alerting (FIN-001)
### Detection
Grep Bicep for `Microsoft.Consumption/budgets`. This goes beyond `azure-waf-review`'s
WAF-COST pillar (which flags missing cost tags) by checking for an actual spend ceiling
with alert thresholds — without one, a runaway resource (an autoscale misconfiguration, a
forgotten test environment) accumulates cost with nobody notified until the monthly bill
arrives.
### BAD — no budget defined anywhere
```bicep
// No Microsoft.Consumption/budgets resource in any template — spend is unmonitored
// until someone happens to check the Cost Management blade.
```
### GOOD — budget with staged alert thresholds tied to the on-call action group
```bicep
resource budget 'Microsoft.Consumption/budgets@2023-05-01' = {
name: 'budget-orders-prod-monthly'
properties: {
category: 'Cost'
amount: 5000
timeGrain: 'Monthly'
notifications: {
actual_80pct: {
enabled: true
operator: 'GreaterThan'
threshold: 80
contactGroups: [actionGroup.id] // same action group as azure-observability AOBS-003
}
forecasted_100pct: {
enabled: true
operator: 'GreaterThan'
threshold: 100
thresholdType: 'Forecasted'
contactGroups: [actionGroup.id]
}
}
}
}
```
---
## Check B — Autoscale rules with no right-sizing review cadence (FIN-002)
### Detection
Check whether autoscale rules (`Microsoft.Insights/autoscaleSettings`, Container Apps
scale rules) have a documented review cadence — min/max replica counts and scale
thresholds set once at launch and never revisited drift out of sync with actual traffic
patterns over time, typically erring toward over-provisioned minimums "just to be safe."
### BAD — autoscale config with no review process
```bicep
resource autoscale 'Microsoft.Insights/autoscaleSettings@2022-10-01' = {
properties: {
profiles: [{ capacity: { minimum: '5', maximum: '20', default: '5' } }]
}
// Set once at launch based on a guess; no note on when/how this gets revisited.
}
```
### GOOD — right-sizing review documented and scheduled
```markdown
<!-- docs/COST-REVIEW.md -->
Autoscale min/max for ca-orders-prod is reviewed quarterly against the last 90 days of
CPU/request-rate metrics (Log Analytics query: `AppMetrics | where ...`). Last reviewed:
2026-04-01, min reduced from 5 to 2 replicas based on actual off-peak traffic.
```
---
## Check C — No cost-anomaly detection (FIN-003)
### Detection
Check for Cost Management's built-in anomaly detection (enabled per subscription, alerts
via `Microsoft.CostManagement` action group wiring) or an equivalent scheduled query
comparing day-over-day spend. Budget thresholds (Check A) catch *sustained* overspend;
anomaly detection catches a sudden spike (e.g., a misconfigured loop calling an expensive
API in a tight retry cycle) days before it would cross a monthly budget threshold.
### BAD — only a monthly budget threshold, no anomaly detection
```bicep
// Budget from Check A exists, but nothing flags a spend spike that occurs mid-month
// and would resolve itself (or compound) long before the 80% monthly threshold trips.
```
### GOOD — Cost Management anomaly alerts enabled and routed to the same action group
```bicep
resource anomalyAlert 'Microsoft.CostManagement/scheduledActions@2023-11-01' = {
name: 'cost-anomaly-orders'
properties: {
notification: { to: ['oncall@example.com'] }
schedule: { frequency: 'Daily' }
viewId: costAnomalyView.id
}
}
```
---
## Check D — Orphaned resources with no cleanup policy (FIN-004)
### Detection
Check for an automated policy (Azure Policy `auditIfNotExists`/`deny`, or a scheduled
script) that identifies and flags resources with no recent activity or no owner tag —
orphaned disks from deleted VMs, unattached public IPs, and forgotten dev/test
environments left running are a common, easily-preventable source of silent waste.
### BAD — no process for finding orphaned resources
```
# Nothing scans for unattached disks, unused public IPs, or stale dev/test resource groups.
```
### GOOD — a scheduled job (or Azure Policy) flags orphaned resources for review
```bicep
resource orphanedDiskPolicy 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
name: 'flag-unattached-disks'
properties: {
policyDefinitionId: subscriptionResourceId('Microsoft.Authorization/policyDefinitions', 'unattached-disks')
parameters: { effect: { value: 'Audit' } }
}
}
```
A Hangfire recurring job (`dotnet-background-jobs`) or scheduled runbook can also query
the Azure Resource Graph weekly for resources with no `owner`/`costCenter` tag (see
`azure-caf-naming`'s required tags) and notify the tag owner for cleanup or justification.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!