You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .azure/plan.md
+24Lines changed: 24 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -493,6 +493,30 @@ Validation run on **2026-06-08** by the `azure-validate` skill against environme
493
493
- The `sql-connection-string` Key Vault secret is created with placeholder value `PLACEHOLDER_SET_VIA_POSTPROVISION_HOOK`. Until populated, App Configuration's KV-reference for `blkmon:ConnectionStrings:SqlDb$blkmon-dev` will resolve to that placeholder. Post-provision hook in `azure.yaml` reminds the operator.
494
494
- SQL AAD admin is set to the deployer principal (`doc@mslabs.it`) instead of a security group — adequate for dev, should be moved to a group before any prod environment.
495
495
496
+
## Section 8: Deployment Proof (real provision)
497
+
498
+
Run on **2026-06-08** via `Deploy-Azure.ps1 -EnvironmentName dev3 -SkipPreview -PublishApps`. Environment names `dev` and `dev2` were burned in earlier attempts (KV/AppConfig soft-deleted and not purgeable in the MCAPS subscription); `dev3` produced a fresh `resourceToken = nsewij464oblc`.
1.**App Configuration local-auth**: `disableLocalAuth: true` blocks ARM-driven `keyValues` seeding. Pass-through ARM auth was the documented fix but the tenant Conditional Access blocks data-plane writes with the caller's Entra token (Forbidden even with App Configuration Data Owner role assigned). Pragmatic decision: keep `disableLocalAuth: false` during the initial provision; harden post-deploy via `az appconfig update --disable-local-auth true` once seeding is complete. Runtime workloads always use MI + Entra RBAC (App Configuration Data Reader) — they never touch access keys.
516
+
2.**Key Vault purge protection**: `enablePurgeProtection: true` is **irreversible** and combined with the MCAPS policy that blocks `DeletedVaultPurge`, it traps every iteration's vault in soft-delete for 7 days. Made the property a parameter (default `true`) and passed `!startsWith(environmentName, 'dev')` from `main.bicep` so `dev*` environments can hard-delete the vault between iterations.
517
+
3.**ARM output name normalization**: ARM lower-cases the leading run of uppercase letters in output names, except the **last** one before the lowercase/underscore boundary. `AZURE_LOCATION` → `azurE_LOCATION`, `FUNCTIONS_URI` → `functionS_URI`, `WEB_URI` → `weB_URI`. `Deploy-Azure.ps1` now reconstructs this exact name before each `--query`.
518
+
4.**`az ... -o json` is `string[]`**: when assigned to a variable, only the first line is parsed by `ConvertFrom-Json`. The script now reads outputs via single-value `--query "...value" -o tsv` per output, sidestepping JSON parsing entirely.
0 commit comments