Full architecture diagram
The complete control-plane and remediation flow used in the project story.
This project evolved into a full Azure governance observability platform built at management-group scope. It starts with a custom Cloud Governance Baseline initiative in mg-platform, pushes policy states into a centralized governance resource group, visualizes non-compliance through a workbook, triggers alerts through Azure Monitor, and finishes with automated remediation that hardens Storage Accounts and returns them to compliant state.
GitHub → Bicep deployment → mg-platform initiative assignment → rg-governance-core → Log Analytics + Workbook → Scheduled query alerts → Action Group email → Policy remediation task → Storage setting hardened → Compliance restored
In many Azure estates, policy exists but operations stop at basic auditing. Non-compliance is visible only inside Policy blades, alerts are inconsistent, and remediation is manual. This project turns governance into an operational platform: policy definitions and initiative assignment are managed as code, workbook views make compliance visible, alert rules notify stakeholders when risky configurations appear, and a remediation task can automatically harden affected resources and return the estate to compliant state.
The core design centers on a custom Cloud Governance Baseline initiative at mg-platform. That baseline contains both an audit control and a remediation control for Storage Account exposure. A dedicated governance resource group in the subscription hosts the workspace, workbook, action group, and alert rules used to operationalize the signals.
rg-governance-core.The final build now supports the complete lifecycle: a non-compliant storage account is detected by Azure Policy, surfaced in the workbook, used to fire an alert, and then automatically remediated by Azure Policy modify effect using the assignment’s managed identity. The storage setting is changed, policy compliance returns to 100%, and the workbook reflects a clean state.
This platform turns Azure governance from passive policy reporting into an operational compliance workflow. It gives teams a repeatable way to define standards, detect drift, alert stakeholders, and automatically restore compliant configuration.
This platform was intentionally built in layers so that every governance function could be evidenced independently. Policy enforces the standard. Diagnostic settings stream the subscription Activity Log. Workbook queries summarize policy state. Scheduled query alerts react to non-compliance. Remediation uses the assignment identity to correct a real resource property.
allowBlobPublicAccess = false.The architecture below follows the real journey of this build: infrastructure deployed with Bicep, policy assigned at management-group scope, telemetry and workbook resources deployed into the governance resource group, alerting validated against real policy states, and remediation executed through Azure Policy modify effect and managed identity.
mg-platform, then assigns it with a system-assigned managed identity.
allowBlobPublicAccess to false, and the storage account returned to compliant state.Every screenshot below comes from the live implementation. Together they show the baseline before remediation, the alerting path, the final hardened storage setting, and the compliant state after automated correction.
The complete control-plane and remediation flow used in the project story.
Workbook, workspace, action group, and alert rules living in the subscription governance resource group.
Policy and Administrative categories sent into Log Analytics to support alerting and investigations.
Non-compliant resources visible in the workbook before the final hardening pass.
Management-group policy compliance catching multiple non-compliant Storage Accounts.
The alert rule that reacted to policy-state non-compliance inside the governance workspace.
Proof that the workbook/query layer translated into an operational alert in Azure Monitor.
The governance alert landed in email, closing the notification loop.
Terminal evidence confirming the policy remediation task executed successfully.
The key configuration property changed by the remediation policy.
Management-group initiative back to 100% resource compliance.
The dashboard reflects the remediated estate with no remaining results.
The final validation was not theoretical. It used a deliberately non-compliant Storage Account, real policy scans, real workbook output, live alerting, and actual Azure Policy remediation. These are the exact proof points used to build the project story and deep dive.
Bicep deployed custom policy definitions, initiative, and assignment to mg-platform.
rg-governance-core was created with workspace, workbook, action group, and alert rules.
A Storage Account was created in the governance resource group with settings that triggered policy non-compliance.
Policy state became non-compliant and the workbook donut/table showed the affected resources.
The non-compliance alert rule triggered repeatedly and delivered a real email notification through the action group.
A remediation task at management-group scope ran with the assignment-managed identity and corrected the storage setting.
CLI output confirmed allowBlobPublicAccess changed to false.
Policy state returned to compliant and the workbook no longer showed any non-compliant results.
The stack is deliberately Azure-focused and operations-heavy to reflect a real governance engineering workflow rather than a demo app. Every component supports either enforcement, telemetry, alerting, or remediation.
An Azure governance observability platform built with Bicep, Azure Policy, Log Analytics, Workbook dashboards, scheduled query alerts, and automated remediation.
This project gained most of its value from real troubleshooting. The final platform story is stronger because the build encountered policy table issues, workbook query failures, alert rule limitations, and remediation design changes that had to be solved one by one.
The first workbook and alert queries were written against PolicyResources, which failed inside the workspace. The fix was to switch the KQL logic to arg("").PolicyResources for workbook and alert use, and then validate the result directly inside the Log Analytics query editor.
arg("").PolicyResources and re-deploy workbook JSON.
The project explored a second alert path based on AzureActivity and Policy-related Activity Log records. That path turned out to be unreliable for the specific management-group validation story because the expected policy assignment events were not consistently landing in the workspace in a way the alert rule could use.
The original Phase 5 idea was to modify Storage firewall behavior more directly, but the live behavior showed the remediation control was not producing a reliable remediable target. The remediation policy was redesigned to target allowBlobPublicAccess, which gave a clean modify-based remediation path and a clear, verifiable configuration change.
allowBlobPublicAccess = false.Modify remediation could not be added cleanly until the management-group initiative assignment had a system-assigned managed identity. After that identity existed, it still needed subscription-scope RBAC before the remediation task could actually execute successfully.