Skip to content
Report library
Purpose / Other

Azure Enterprise Infra Planner Skill Security Audit

What the author says it does (original text)

Architect and provision enterprise Azure infrastructure from workload descriptions. For cloud architects and platform engineers planning networking, identity, security, compliance, and multi-resource topologies with WAF alignment. Generates Bicep or Terraform directly (no azd). WHEN: 'plan Azure infrastructure', 'architect Azure landing zone', 'design hub-spoke network', 'plan multi-region DR topo

Independent security check

Do not install or run it yet

Files checked
41
Risks found
5
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.No risks found
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
Medium risk

The default subscription may be scanned without an explicit scope choice and its topology stored in the project

Source references: 4
What we found

When no insights file exists, the workflow asks for a scan scope but defaults to the current subscription if the user does not respond. A sub-agent processes the environment through insights_get, and the result is saved as project JSON.

Why this matters

Azure resources, relationships, configuration, and resource IDs may be processed by the MCP tool and sub-agent and persist in the workspace, exposing cloud topology to anyone or any process that can read the project.

The flow asks for a scope, but defaults to the current subscription if the user does not respond. A sub-agent then calls the environment-insights tool and saves its JSON in the project. If the result includes inventory or topology, that information may become available to anyone with project access. A user can ask for no silent default, a field-level disclosure, and affirmative scope consent; they can also restrict Azure read permissions and sharing of `.azure/insights.json`.

references/phases/1-extract-insights.md:5In the instructionsOpen original file
1. Check whether insights already exist at `<project-root>/.azure/insights.json`. If they do, reuse the existing entries and skip the scan in steps 2–6. In referenced mode, still execute step 7 before completing the gate; in greenfield mode, proceed to the gate.2. If no insights file exists, check whether the `insights_get` tool is available. If it is not, initialize the file with `[]`, then continue to step 7 in referenced mode or proceed to the gate in greenfield mode.3. Ask the user which scope to use for generating insights. Present these three options:   a. "Subscription-scoped (default subscription)" — use this as the default if the user does not respond.   b. "Subscription-scoped (choose a subscription)" — if selected, ask the user to provide a subscription name or ID.   c. "Tenant-scoped (slower)"4. Ask the user whether there are specific areas they want the insights to focus on. Present these options:
Show 3 other places
references/phases/1-extract-insights.md:18In the instructionsOpen original file
   f. "Other" — this should be a custom input field.5. Run the `insights_get` tool using a general-purpose subagent. Pass a one-line summary via the `--query` option that describes the user's infrastructure and the types of insights to prioritise. Do not pass the `--nocache` flag unless the user has explicitly asked for it. Begin Phase 2 while this tool runs.6. Once the tool finishes, save the resulting JSON to `<project-root>/.azure/insights.json`. Do not include tool call metadata. If the tool errors or returns no insights, write an empty array `[]` to the file instead.7. In referenced mode, merge one insight entry for every existing resource into the current insights array. Set `existingResource.id`, `type`, `name`, `role`, `must_not_recreate: true`, and `integrationPoints` using the normalized inventory. Preserve full ARM IDs for actual-state resources and do not duplicate an entry already identified by the same resource ID. Do this even when the resource produces no broader insight.
references/schema.md:73In the instructionsOpen original file
In referenced mode:- Include exactly one entry for every inventoried existing resource, uniquely identified by `existingResource.id`.- Preserve the full ARM ID in `existingResource.id` for actual-state resources.- Use an empty `integrationPoints` array when the resource has no integration points.- A resource-only entry may omit `pattern` and `implication`; when recording a broader insight, include both.
references/phases/1-extract-insights.md:7In the instructionsOpen original file
2. If no insights file exists, check whether the `insights_get` tool is available. If it is not, initialize the file with `[]`, then continue to step 7 in referenced mode or proceed to the gate in greenfield mode.3. Ask the user which scope to use for generating insights. Present these three options:   a. "Subscription-scoped (default subscription)" — use this as the default if the user does not respond.   b. "Subscription-scoped (choose a subscription)" — if selected, ask the user to provide a subscription name or ID.   c. "Tenant-scoped (slower)"4. Ask the user whether there are specific areas they want the insights to focus on. Present these options:
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.Risks found: 1
Medium risk

Referenced mode demands complete IaC before the user's selection and plan approval, conflicting with the main gate

Source references: 4
What we found

Referenced mode says to always generate deployable IaC in the same response using recommended defaults and asks which existing resources to incorporate only after the code. The main workflow says Phase 6 requires explicit Phase 5 approval.

Why this matters

The agent may create or modify `infra/` files before the user reviews resource scope, assumptions, and permission wiring. This does not itself deploy, but it can replace same-named infrastructure drafts or cause later operators to mistake unapproved content for a reviewed plan.

Referenced mode tells the agent to generate complete IaC using recommended defaults in the same response and ask which existing resources to incorporate afterward. The main phase rules instead require explicit Phase 5 approval before Phase 6. These active instructions conflict and could cause deployable files to be written before the user approves resource selection and the plan. Deployment still has a separate gate, but file generation can itself add or replace project content. Users can require a clear precedence rule and preview-only drafts before approval.

references/referenced-workload.md:32In the instructionsOpen original file
## Answer-first (ask AND generate — never stall)Open with a **plain-language summary of the existing infrastructure** you inventoried and the additivechange you understood, then an **explicit confirmation checkpoint** ("Confirm this understanding before Iproceed to deploy"), and **then** generate the complete, deployable IaC in the SAME response using therecommended default. Order within the turn: (1) summary of what exists + what you'll add, (2) explicit"confirm before I proceed" gate, (3) the generated IaC, (4) the "which to incorporate?" choice and anyassumptions. Never end a turn with only a summary or a question, and never deploy before the userconfirms. If you lack a value (region, an existing resource's ID/name), **declare a parameter andproceed.** The confirmation gate governs deployment (Phase 7), not whether you generate the plan/IaC —you always generate; you never deploy without an explicit, risk-acknowledged go-ahead.
Show 3 other places
references/workflow.md:42In the instructionsOpen original file
- `draft` — set by Phase 4 when the plan is written.- `approved` — set by Phase 5 only after the user explicitly approves. Required before Phase 6 and Phase 7.- `deployed` — set by Phase 7 after a successful `az deployment ... create` or `terraform apply`.
references/phases/6-generate-iac.md:1In the instructionsOpen original file
# Phase 6: Generate IaC> Important: Before continuing this phase, `meta.status` must be set to `approved` as required by Phase 5.1. Ask the user whether to generate Bicep or Terraform.2. Generate IaC from the approved plan. Refer to [bicep-generation.md](../bicep-generation.md) for Bicep or [terraform-generation.md](../terraform-generation.md) for Terraform.3. **Apply secure-by-default (mandatory).** Unless the approved plan explicitly overrides a control, every generated resource must use:
references/phases/5-verify.md:14In the instructionsOpen original file
## Gate- Every item in **both** checklists pass (or have been fixed).- Present plan to user and wait for manual and explicit approval before proceeding.  - Edit `meta.status` to `approved` if approved.  - Otherwise, ask the user for improvements, and return to Phase 2, 3, or 4 based on the nature of their request.
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.Risks found: 1
High risk

An “additive-only” deployment can still create RBAC grants over existing resources

Source references: 5
What we found

Referenced mode explicitly uses role assignments as integration wiring and deploys into an existing resource group or subscription. Although existing resources are declared as existing/data, a newly created role assignment can grant access to them. Describing a create-only diff as modifying nothing can understate that permission impact.

Why this matters

An incorrect principal ID, role, or scope could grant an application identity or another principal access to existing vaults, logs, networks, data services, or subscription resources.

“Additive only” does not mean no permission impact on the existing environment. The workflow explicitly allows new RBAC role assignments and deployment into an existing resource-group or subscription scope. Such assignments can grant an identity access to existing resources even when those resources are referenced through `existing`/`data` and are not recreated. Users can require the preview to list every role, principal, permission, and scope, and reject unapproved subscription-wide or privileged grants.

references/referenced-workload.md:54In the instructionsOpen original file
## For each existing resource, assign a ROLE (the "if needed" filter)- **Reference + integrate** — the new workload depends on it → reference it AND **wire it in**:  RBAC role assignment, diagnostics → existing Log Analytics, private endpoints into the existing  VNet/subnet, secrets from the existing Key Vault, connection to the existing Event Hubs, use the  existing managed identity, etc.- **Retain** — keep, must not recreate, nothing new connects → leave it; note "retained, out of scope".
Show 4 other places
references/referenced-workload.md:76In the instructionsOpen original file
  destroy** against them — abort if the plan proposes destroying or replacing a referenced resource.- **Preview first.** Always run `az deployment ... --what-if` (Bicep) or `terraform plan` (Terraform)  and confirm the diff only *creates* new resources and *modifies nothing* on the referenced ones before  applying.- **Deploy into the existing scope when integrating.** Target the referenced resource group/subscription  so RBAC, private endpoints, and diagnostics wire into the existing resources.
references/deployment.md:25In the instructionsOpen original file
Scope selection: use resource-group scope when your template deploys into an existing resource group. Use subscription scope when your template creates resource groups or other subscription-level resources (policies, role assignments, etc.).
references/referenced-workload.md:70In the instructionsOpen original file
  "deploy" reply sent *after* the risks are shown. The original prompt never satisfies the gate.- **Additive only.** The deployment must *add* the new resources and their wiring. The referenced  resources are declared as `existing`/`data` (not `resource`), so a normal deploy never touches them.- **Incremental mode, never Complete.** For Bicep use the default **incremental** mode — never
references/referenced-workload.md:79In the instructionsOpen original file
  applying.- **Deploy into the existing scope when integrating.** Target the referenced resource group/subscription  so RBAC, private endpoints, and diagnostics wire into the existing resources.
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.Risks found: 1
Medium risk

IaC comments, resource tags, and general documents create an indirect prompt-injection path

Source references: 3
What we found

The workflow mines every input, including IaC comments, resource tags, and general documents, then prefers applicable insights for region, SKU, naming, and configuration. No visible rule limits this material to untrusted factual evidence or rejects instructions embedded in it.

Why this matters

Tampered or untrusted tags, comments, or documents could introduce unsuitable regions, costly SKUs, dependencies, or deployment preferences. Security insights have a strengthening constraint, but cost and architecture decisions remain exposed.

The active workflow requires mining documents, IaC comments, and resource tags, then permits those insights to change region, SKU, security posture, naming, and configuration. A rule blocks weaker security insights, but the visible instructions do not say to treat embedded agent commands as untrusted text, so a malicious tag or comment could influence planning decisions. Users can ask for explicit data/instruction separation and source-attributed approval before any external insight is applied.

references/referenced-workload.md:20In the instructionsOpen original file
   - **General doc** → extract any existing resources it mentions.3. **Gather insights from ALL provided context.** Mine every input the user gave — docs, IaC comments,   resource tags, requirements, naming conventions, region, resiliency tier, PADU/preferences, cost and   compliance constraints — and record them as insights (the same channel Phase 3 already applies).   These shape the new workload just like tenant insights do.4. **Surface them and ask which to incorporate.** Present the existing resources you found and ask which   ones to **incorporate** (reference + wire) into the new workload. Recommend a sensible default —   incorporate the ones the new workload clearly depends on; never recreate them.5. **Generate the complete IaC** incorporating the chosen (or recommended-default) existing resources:
Show 2 other places
references/phases/3-research-resources.md:15In the instructionsOpen original file
Read `.azure/insights.json` produced by Phase 1 and evaluate each insight against the current workload and sub-goals identified in Phase 2:* If an insight applies, prefer it over defaults — especially for region, SKU tier, security posture, naming, and tagging.* If an insight doesn't apply, document the intentional omission in `overallReasoning.tradeoffs`.* Insights can shape both resource selection and property configuration.* Track each insight you apply in `inputs.insightsApplied` so the user can trace why a decision was made.> Mandatory Security rule: only apply a security-related insight if it results in an equal or stronger security posture than the alternatives. A weaker security posture from an insight is only acceptable when the user has explicitly requested it in the initial prompt.
references/phases/3-research-resources.md:21In the instructionsOpen original file
> Mandatory Security rule: only apply a security-related insight if it results in an equal or stronger security posture than the alternatives. A weaker security posture from an insight is only acceptable when the user has explicitly requested it in the initial prompt.
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.Risks found: 1
Medium risk

After confirmation, the Skill performs real Azure deployments that can create subscription-level, billable resources

Source references: 4
What we found

The Skill does more than produce a plan: it runs resource-group or subscription deployment creation or Terraform apply. Subscription scope explicitly covers policies, RBAC, and resource-group creation. The risk gate reduces accidental activation but does not cap resource count or expense.

Why this matters

An incorrect or oversized plan could create chargeable resources, consume quota, or leave long-running infrastructure in the wrong subscription.

After the user explicitly acknowledges the displayed risks, this Skill executes a real Azure or Terraform deployment. Subscription-scope templates may create resource groups, policies, and RBAC, and provisioned resources may incur ongoing charges. The confirmation gate is strong, but the visible workflow sets no spending or resource-count ceiling. Before confirming, users can require a what-if/plan, cost estimate, quotas, exact subscription and resource group, and can restrict account permissions or prohibit subscription-scope deployment.

references/phases/7-deploy.md:3In the instructionsOpen original file
## Destructive Action GateThis phase is destructive and has irreversible effects. Explicitly confirm with the user whether to deploy, and mention the risks of altering live environments. Never accept implicit or vague intent; only continue if the user acknowledges the risks and instructs you to proceed (e.g. "I understand the risks, continue with deployment") in a reply sent *after* you have presented the risks. The original task prompt never satisfies this gate, even if it says "deploy" or "run all phases". Stop if no such reply is received. Do not accept vague statements such as "continue", "yes", "deploy now" (without risk acknowledgement), or "go ahead".
Show 3 other places
references/deployment.md:34In the instructionsOpen original file
| `targetScope` | When to use | Command ||---|---|---|| `resourceGroup` (default) | All resources in one resource group | `az deployment group create` || `subscription` | Resources span multiple resource groups, or includes subscription-level resources (policy, RBAC, resource group creation) | `az deployment sub create` |
references/deployment.md:101In the instructionsOpen original file
# Preview changesterraform plan -var-file=prod.tfvars -out=tfplan# Apply (requires confirmation)terraform apply tfplan```
references/phases/7-deploy.md:13In the instructionsOpen original file
1. Confirm subscription and resource group with user2. Select the correct deployment scope based on `targetScope` in `main.bicep` (resource group, subscription, management group, or tenant)3. Run `az bicep build` to validate, then execute the matching scope command (`az deployment group create`, `az deployment sub create`, etc.) or `terraform apply`

Inside this skill

6 instruction sections

The Skill uses seven phases to collect environment information, research, generate a plan and IaC, validate it, and deploy it. It writes Azure insights, plans, and Bicep/Terraform files into the project and requires explicit risk confirmation before deployment.

View source
SKILL.md:46In the instructionsOpen original file
Every phase advances only after its gate passes. Phase 5 requires explicit user approval; **Phase 6 is ahardened, self-verifying gate** — the generated IaC must be secure-by-default, pass local validation(`az bicep build` / `terraform validate`) with zero errors, pass a `checkov` security scan with nounresolved high/critical findings, and the skill must **show the command output** and emit a completionself-check before advancing; Phase 7 requires an explicit, risk-acknowledged deploy confirmation.
SKILL.md:83In the instructionsOpen original file
**Artifacts** (written under `<project-root>/`): `.azure/insights.json` (Phase 1),`.azure/infrastructure-plan.json` (Phase 4, status `draft`→`approved`→`deployed`), and`infra/main.bicep` + `infra/modules/*` or `infra/main.tf` + `infra/modules/**` (Phase 6).

In referenced-environment mode, the Skill inventories resources through Azure CLI or by parsing IaC and documents, including resource IDs, network relationships, identity bindings, SKUs, regions, and public-access settings, then integrates selected resources with the new workload.

View source
references/referenced-workload.md:11In the instructionsOpen original file
   a doc describing current resources)? If yes, use this flow.2. **Inventory the existing resources** from whatever was provided. Capture a COMPLETE inventory — every   resource type, plus topology/relationships (VNet/subnet, private endpoints, identity bindings) and key   configurations (SKU/tier, TLS version, public-access setting, region). Do not omit resources or invent   ones that are not present:   - **Resource group / subscription** → introspect (`az resource list` / `az graph query`) → real     resources **with resource IDs**.   - **IaC / infra plan** (Bicep/Terraform/ARM, `infrastructure-plan.json`, `terraform show -json`) →     parse `resource` / `existing` / `data` blocks → logical resources.   - **General doc** → extract any existing resources it mentions.3. **Gather insights from ALL provided context.** Mine every input the user gave — docs, IaC comments,
references/referenced-workload.md:27In the instructionsOpen original file
   incorporate the ones the new workload clearly depends on; never recreate them.5. **Generate the complete IaC** incorporating the chosen (or recommended-default) existing resources:   reference them (`existing` / `data`, real ID for live, a `param` otherwise) and **wire** the new   resources to them, honoring the gathered insights. Never emit a new `resource` for something that   already exists.

The Skill can execute resource-group or subscription-level Bicep deployments or Terraform apply. After success, it changes the plan status to deployed and lists resources in the target resource group.

View source
references/deployment.md:34In the instructionsOpen original file
| `targetScope` | When to use | Command ||---|---|---|| `resourceGroup` (default) | All resources in one resource group | `az deployment group create` || `subscription` | Resources span multiple resource groups, or includes subscription-level resources (policy, RBAC, resource group creation) | `az deployment sub create` |
references/deployment.md:101In the instructionsOpen original file
# Preview changesterraform plan -var-file=prod.tfvars -out=tfplan# Apply (requires confirmation)terraform apply tfplan```
references/deployment.md:118In the instructionsOpen original file
After successful deployment:1. Update status — set `meta.status` to `deployed` in `<project-root>/.azure/infrastructure-plan.json`2. Verify resources — list resources in the target resource group using Azure CLI: `az resource list -g <resource-group-name> -o table`3. Report to user — list deployed resources, endpoints, and any follow-up actions

Generated IaC is supposed to undergo local syntax validation and a Checkov scan with actual command results shown; if a tool is unavailable, the workflow permits a manual self-review instead.

View source
references/phases/6-generate-iac.md:12In the instructionsOpen original file
   - Minimum TLS 1.2 and encryption in transit.4. **Validate, security-scan, and fix until clean (mandatory, self-verifying).** No-deploy, purely local:   - **Bicep:** run `az bicep build --file infra/main.bicep`.   - **Terraform:** run `terraform init -backend=false` then `terraform validate` in `infra/`.   - **Security scan:** run `checkov -d infra/` and resolve every high/critical finding.   - If any command reports errors or unresolved high/critical findings, fix the files in-place and re-run. Repeat until every command exits cleanly.   - **Prove it:** paste the exact command(s) run and their final exit status / summary into your response. Do not claim the gate passed without showing the output. If a tool is genuinely unavailable, say so explicitly and self-review against the generation correctness checklist and the secure-by-default list above.5. **Emit the completion self-check.** End Phase 6 with this checklist, each line marked pass/fail with a one-line reason:
Start here · InstructionsSKILL.md
azure-enterprise-infra-planner
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.

File reference map

References: 40
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records41 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/constraints/README.mdFull text included
  • references/referenced-workload.mdFull text included
  • references/resources/README.mdFull text included
  • references/schema.mdFull text included
  • references/waf-checklist.mdFull text included
  • references/workflow.mdFull text included
  • references/bicep-generation.mdFull text included
  • references/constraints/ai-ml.mdFull text included
  • references/constraints/compute-apps.mdFull text included
  • references/constraints/compute-infra.mdFull text included
  • references/constraints/data-analytics.mdFull text included
  • references/constraints/data-relational.mdFull text included
  • references/constraints/messaging.mdFull text included
  • references/constraints/monitoring.mdFull text included
  • references/constraints/networking-connectivity.mdFull text included
  • references/constraints/networking-core.mdFull text included
  • references/constraints/networking-traffic.mdFull text included
  • references/constraints/security.mdFull text included
  • references/deployment.mdFull text included
  • references/pairing-checks.mdFull text included
  • references/phases/1-extract-insights.mdFull text included
  • references/phases/2-research-best-practices.mdFull text included
  • references/phases/3-research-resources.mdFull text included
  • references/phases/4-generate-plan.mdFull text included
  • references/phases/5-verify.mdFull text included
  • references/phases/6-generate-iac.mdFull text included
  • references/phases/7-deploy.mdFull text included
  • references/resources/ai-ml.mdFull text included
  • references/resources/compute-apps.mdFull text included
  • references/resources/compute-infra.mdFull text included
  • references/resources/data-analytics.mdFull text included
  • references/resources/data-relational.mdFull text included
  • references/resources/messaging.mdFull text included
  • references/resources/monitoring.mdFull text included
  • references/resources/networking-connectivity.mdFull text included
  • references/resources/networking-core.mdFull text included
  • references/resources/networking-traffic.mdFull text included
  • references/resources/security.mdFull text included
  • references/terraform-generation.mdFull text included
  • references/verification.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • references/bicep-generation.mdSupporting file
  • references/constraints/README.mdSupporting file
  • references/constraints/ai-ml.mdSupporting file
  • references/constraints/compute-apps.mdSupporting file
  • references/constraints/compute-infra.mdSupporting file
  • references/constraints/data-analytics.mdSupporting file
  • references/constraints/data-relational.mdSupporting file
  • references/constraints/messaging.mdSupporting file
  • references/constraints/monitoring.mdSupporting file
  • references/constraints/networking-connectivity.mdSupporting file
  • references/constraints/networking-core.mdSupporting file
  • references/constraints/networking-traffic.mdSupporting file
  • references/constraints/security.mdSupporting file
  • references/deployment.mdSupporting file
  • references/pairing-checks.mdSupporting file
  • references/phases/1-extract-insights.mdSupporting file
  • references/phases/2-research-best-practices.mdSupporting file
  • references/phases/3-research-resources.mdSupporting file
  • references/phases/4-generate-plan.mdSupporting file
  • references/phases/5-verify.mdSupporting file
  • references/phases/6-generate-iac.mdSupporting file
  • references/phases/7-deploy.mdSupporting file
  • references/referenced-workload.mdSupporting file
  • references/resources/README.mdSupporting file
  • references/resources/ai-ml.mdSupporting file
  • references/resources/compute-apps.mdSupporting file
  • references/resources/compute-infra.mdSupporting file
  • references/resources/data-analytics.mdSupporting file
  • references/resources/data-relational.mdSupporting file
  • references/resources/messaging.mdSupporting file
  • references/resources/monitoring.mdSupporting file
  • references/resources/networking-connectivity.mdSupporting file
  • references/resources/networking-core.mdSupporting file
  • references/resources/networking-traffic.mdSupporting file
  • references/resources/security.mdSupporting file
  • references/schema.mdSupporting file
  • references/terraform-generation.mdSupporting file
  • references/verification.mdSupporting file
  • references/waf-checklist.mdSupporting file
  • references/workflow.mdSupporting file

Operations mentioned in code and instructions

Read keys or account settings
references/constraints/compute-apps.md:36In the instructionsOpen original file
| **VNet** | VNet integration is configured on the **Environment**, not the individual app. Environment needs a dedicated subnet with minimum /23 prefix for Consumption-only environments or /27 for workload profiles environments. || **Container Registry** | Requires registry credentials in `configuration.registries[]` or managed identity-based pull. || **Dapr** | Enable via `configuration.dapr.enabled: true`. Dapr components are configured on the Environment. |
references/constraints/compute-apps.md:61In the instructionsOpen original file
| **AKS** | AKS needs `acrPull` role assignment on the registry. Use managed identity (attach via `az aks update --attach-acr`). || **Container App** | Reference in `configuration.registries[]`. Use managed identity or admin credentials. || **ML Workspace** | Referenced as `containerRegistry` property. Used for custom training/inference images. |
references/waf-checklist.md:8In the instructionsOpen original file
| Identity | How do services authenticate to each other? | Managed identity, RBAC role assignments || Secrets | Are there connection strings, API keys, credentials? | Key Vault with RBAC authorization, soft-delete, and purge protection enabled || Monitoring | How will operators observe the system? | Application Insights for compute, Log Analytics workspace, diagnostic settings on data resources |
Connect to websites
references/constraints/networking-connectivity.md:10In the instructionsOpen original file
| **Public IP** | Requires Standard SKU public IP with Static allocation. || **NSG** | NSG on `AzureBastionSubnet` requires mandatory inbound (HTTPS 443 from Internet, GatewayManager 443) and outbound rules (see [Bastion NSG docs](https://learn.microsoft.com/azure/bastion/bastion-nsg)). || **VMs** | Target VMs must be in the same VNet as Bastion (or peered VNets with Standard/Premium SKU). |
references/constraints/networking-core.md:34In the instructionsOpen original file
| **GatewaySubnet** | NSGs are not supported on `GatewaySubnet`. Associating an NSG may cause VPN and ExpressRoute gateways to stop functioning. || **AzureBastionSubnet** | NSG on Bastion subnet requires specific inbound/outbound rules (see [Azure Bastion NSG](https://learn.microsoft.com/azure/bastion/bastion-nsg)). || **Application Gateway** | NSG on App Gateway subnet must allow `GatewayManager` service tag on ports `65200–65535` (v2) and health probe traffic. |
references/resources/ai-ml.md:13In the instructionsOpen original file
|----------|----------------|------------------|--------------|------------|| Cognitive Services | [2025-06-01](https://learn.microsoft.com/azure/templates/microsoft.cognitiveservices/accounts?pivots=deployment-language-bicep) | [Custom subdomain names](https://learn.microsoft.com/azure/ai-services/cognitive-services-custom-subdomains) | [Naming rules](https://learn.microsoft.com/azure/azure-resource-manager/management/resource-name-rules#microsoftcognitiveservices) | [All API versions](https://learn.microsoft.com/azure/templates/microsoft.cognitiveservices/allversions) || ML Workspace | [2025-06-01](https://learn.microsoft.com/azure/templates/microsoft.machinelearningservices/workspaces?pivots=deployment-language-bicep) | [ML Services](https://learn.microsoft.com/azure/templates/microsoft.machinelearningse 
Run commands
references/deployment.md:27In the instructionsOpen original file
```bash# Validate first (applies to both scopes)
references/deployment.md:41In the instructionsOpen original file
```bash# What-if preview
references/deployment.md:57In the instructionsOpen original file
PowerShell:```powershell
Read files
references/phases/3-research-resources.md:29In the instructionsOpen original file
1. Read the relevant resource reference file to get its ARM type, API version, and CAF prefix. Use [resources/README.md](../resources/README.md) as the index to help you find the right file (e.g., `resources/compute-infra.md` for AKS, `reso 2. Read the relevant pairing constraint file using [constraints/README.md](../constraints/README.md) as the index. Each category file is <2K tokens, you must read the whole file for all resources in that category.3. **Required** — for every resource, spawn a general-purpose sub-agent to fetch its naming rules. Pass the naming rules URL from the resource file and instruct the sub-agent to call `microsoft_docs_fetch` and return only the min/max length 
Lines read
1,843
File checksum (to compare versions)
3c5ad8a8a0ebd3dc11f3d2218dd3487974b3a999797c5cff64534b43522f96e3