CtrlK
BlogDocsLog inGet started
Tessl Logo

azure-defaults

**UTILITY SKILL** — Azure infrastructure defaults: regions, tags, naming (CAF), AVM-first policy, security baseline, unique suffix patterns. WHEN: "Azure naming convention", "CAF naming", "resource tags", "AVM module", "security baseline", "region default". USE FOR: any agent generating or planning Azure resources. DO NOT USE FOR: artifact template structures (use azure-artifacts), pricing lookups (read references/pricing-guidance.md on demand).

70

Quality

85%

Does it follow best practices?

Impact

No eval scenarios have been run

SecuritybySnyk

Passed

No known issues

SKILL.md
Quality
Evals
Security

Azure Defaults Skill

IaC-flavoured mirror of the canonical Azure defaults declared in .github/copilot-instructions.md. Deep-dive content lives in references/ — load on demand.

Canonical source rule: if the tables below disagree with copilot-instructions.md, the canonical declaration wins. This skill restates them for IaC-output convenience only.


Quick Reference (Load First)

Default Regions

ServiceDefault RegionReason
All resourcesswedencentralEU GDPR-compliant
Static Web AppswesteuropeNot available in swedencentral
FailovergermanywestcentralEU paired alternative

Required Tags (Azure Policy Enforced)

These 4 tags are the MINIMUM baseline (PascalCase, case-sensitive — mixing owner + Owner triggers AmbiguousPolicyEvaluationPaths). Always defer to 04-governance-constraints.md for the project's actual required list.

TagRequiredExample Values
EnvironmentYesdev, staging, prod
ManagedByYesBicep or Terraform
ProjectYesProject identifier
OwnerYesTeam or individual name

Unique Suffix Pattern

Generate ONCE, pass to ALL modules:

var uniqueSuffix = uniqueString(resourceGroup().id)

Security Baseline (5-Line Summary)

SettingValueApplies To
HTTPS-onlytrueStorage, all
TLS minimum'TLS1_2'All services
Public blob accessfalseStorage
Public network (prod)'Disabled'Data services
AuthenticationManaged IdentityPrefer over keys

For AVM pitfalls and deprecation patterns, read references/security-baseline-full.md.

Cost Monitoring Baseline

Non-negotiable for prod. Governance (04-governance-constraints.json cost_monitoring.*) always wins. Budget thresholds: 5 notifications (actual 80/100/125 + forecast 100/125). Required: budget + Action Group (AVM, create-or-reuse via preflight) + subscription-scoped anomaly alert. Opt-out via cost_monitoring_mode ∈ {enforced, minimal, deferred} (minimal/deferred non-prod only).

For the full contract, AVM lookup, governance precedence, and exception schema, read references/cost-alerts-baseline.md. For stack-specific snippets, read references/cost-alerts-bicep.md or references/cost-alerts-terraform.md.

VNet Planning Baseline

Interactive. Architect Phase 6b (between 6a SKU confirmation and Step 7 pricing) runs the gate whenever either trigger holds: (a) any services[].requires[] row contains vnet-integration or private-endpoints, OR (b) any services[].service_name is in the vnet-attached whitelist (App Gateway, AKS, VM/VMSS, APIM internal, Bastion, Azure Firewall, VPN/ER Gateway, NAT Gateway, App Gateway for Containers). Default address space 10.0.0.0/16 (greenfield; at least /22). Recommendation style: a single subnet table followed by per-row Apply edit / Skip / Done askMe loop. Opt-out via vnet_planning_mode ∈ {guided, fast, deferred} (deferred blocked for prod). Governance network_constraints always wins.

For the full contract — trigger contract, askQuestions templates, subnet sizing matrix per workload with Microsoft Learn citations, CIDR math, existing-VNet validation, AVM modules — read references/vnet-planning.md.

Deprecated Services (Do NOT Recommend for Greenfield)

Never recommend deprecated services (Azure AD B2C, Redis Enterprise E50, CDN WAF classic, App Gateway v1, CDN Standard Microsoft) for greenfield. Full retirement table + replacement guidance: references/deprecated-services.md.


CAF Naming Conventions

ResourceAbbrPatternMax
Resource Grouprgrg-{project}-{env}90
Virtual Networkvnetvnet-{project}-{env}64
Subnetsnetsnet-{purpose}-{env}80
NSGnsgnsg-{purpose}-{env}80
Key Vaultkvkv-{short}-{env}-{suffix}24
Storage Accountstst{short}{env}{suffix}24
App Service Planaspasp-{project}-{env}40
App Serviceappapp-{project}-{env}60
SQL Serversqlsql-{project}-{env}63
SQL Databasesqldbsqldb-{project}-{env}128
Static Web Appstappstapp-{project}-{env}40
Log Analyticsloglog-{project}-{env}63
App Insightsappiappi-{project}-{env}255

For extended abbreviations and length-constraint examples, read references/naming-full-examples.md.


Azure Verified Modules (AVM)

  1. ALWAYS check AVM availability first
  2. ALWAYS pin to the latest published stable version — resolve live at plan time; never reuse a pin from a prior project or training data
  3. Use AVM defaults for SKUs when available
  4. NEVER write raw Bicep/TF for a resource that has an AVM module

For module paths, the live-lookup procedure (MCR for Bicep, registry.terraform.io for Terraform, MCP equivalents), the validator (npm run validate:avm-versions:freeze — MUST run before apex-recall complete-step 4), and the structured pin_policy schema for stale-pin exceptions, read references/avm-modules.md.


Rules

All baseline rules (region, tags, security, cost monitoring, deprecated services) are stated in Quick Reference above — that is the canonical form. The invariants below are gate-level / non-negotiable:

  • AVM-first — never write raw Bicep/TF for a resource that has an AVM module
  • Pin AVM live at plan time — stale pins require pin_policy.mode = "exception" in 04-iac-contract.json; enforced by npm run validate:avm-versions:freeze
  • Tag casing is case-sensitive — never emit both owner and Owner (AmbiguousPolicyEvaluationPaths error)
  • Unique suffix — generate uniqueString(resourceGroup().id) ONCE per deployment
  • Governance wins04-governance-constraints.md overrides any default in this skill (tags, regions, SKUs, cost monitoring)
  • VNet planning is interactive — never auto-pick CIDRs without confirmation. Trigger: any services[].requires[] ∈ {vnet-integration, private-endpoints} OR services[].service_name in vnet-attached whitelist. Governance network_constraints overrides defaults. Contract: references/vnet-planning.md.

Steps

  1. Read Quick Reference — region, tags, suffix, security baseline
  2. Cross-check governance04-governance-constraints.md overrides defaults
  3. Pick AVM modules — resolve the latest stable version live (see references/avm-modules.md)
  4. Apply naming + tags — CAF table above; load references/naming-full-examples.md for length-constrained resources
  5. Apply security baseline — see Quick Reference; load references/security-baseline-full.md when AVM parameters surface deprecation
  6. Run the VNet planning gate — when the trigger contract holds (see VNet Planning Baseline above). Skip when decisions.vnet_planning_mode = deferred (sandbox only). Contract: references/vnet-planning.md
  7. Apply cost monitoring — see Quick Reference; load references/cost-alerts-baseline.md for the full cost contract
  8. Validatenpm run validate:iac-security-baseline + lint:bicep / terraform fmt && validate

Output Rules & Checklist

RuleRequirement
Exact textUse template H2 text verbatim
Exact orderRequired H2s in template-defined order
Anchor ruleExtra sections only AFTER last required H2
No omissionsAll template H2s must appear in output
Attribution> Generated by {agent} agent | {YYYY-MM-DD}

Before saving: confirm output path is agent-output/{project}/, all 4 required tags are present, uniqueSuffix is wired into globally-unique names, and region defaults match the table above.


Reference Index

Load these on demand — do NOT read all at once:

ReferenceWhen to Load
references/naming-full-examples.mdGenerating names for length-constrained resources
references/avm-modules.mdLooking up AVM module paths or versions
references/security-baseline-full.mdDebugging AVM parameter issues or checking deprecations
references/pricing-guidance.mdRunning cost estimates with Azure Pricing MCP
references/cost-estimate-parent-contract.mdParent-side delegation contract for cost-estimate-subagent (loaded by 03 + 08)
references/service-matrices.mdMapping user requirements to Azure service tiers
references/waf-criteria.mdScoring WAF pillar assessments
references/governance-discovery.mdDiscovering Azure Policy constraints
references/policy-effect-decision-tree.mdTranslating policy effects into plan/code actions
references/adversarial-review-protocol.mdRunning challenger-review-subagent passes
references/azure-cli-auth-validation.mdValidating Azure CLI auth before deployments
references/terraform-conventions.mdGenerating Terraform (HCL) code
references/research-workflow.mdFollowing the standard 4-step research pattern
references/tag-strategy.mdChoosing the greenfield CAF tag fallback (no policy)
references/workflow-gates.mdLooking up cross-agent gate protocols (SKU/budget/etc.)
references/cost-alerts-baseline.mdFull cost-monitoring contract (scope matrix, modes, governance)
references/cost-alerts-bicep.mdBicep snippets for budget + Action Group + scheduledActions
references/cost-alerts-terraform.mdTerraform snippets for budget + Action Group + anomaly
references/vnet-planning.mdVNet planning gate — trigger contract, askQuestions templates, subnet sizing matrix
Repository
jonathan-vella/azure-agentic-infraops
Last updated
Created

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.