<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Azure Governance and Management Blog articles</title>
    <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/bg-p/AzureGovernanceandManagementBlog</link>
    <description>Azure Governance and Management Blog articles</description>
    <pubDate>Fri, 09 Oct 2026 00:29:52 GMT</pubDate>
    <dc:creator>AzureGovernanceandManagementBlog</dc:creator>
    <dc:date>2026-10-09T00:29:52Z</dc:date>
    <item>
      <title>A closer look at noise reduction in Stacks What-If</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/a-closer-look-at-noise-reduction-in-stacks-what-if/ba-p/4548210</link>
      <description>&lt;P&gt;Following the &lt;A href="https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/now-generally-available-what-if-for-azure-deployment-stacks/4547614" target="_blank" rel="noopener"&gt;general availability of what-if for Azure Deployment Stacks&lt;/A&gt;, this article deep dives into the co-released feature of "noise reduction", which was a top community feature ask from Deployment Stacks customers. In this article, we will cover what noise reduction solves, how it works, and how to get started with noise reduction. For the full reference, see &lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks-what-if-noise-reduction" target="_blank" rel="noopener"&gt;Noise reduction in deployment stack what-if results&lt;/A&gt; on Microsoft Learn.&lt;/P&gt;
&lt;H2&gt;The problem with Deployments What-if results&lt;/H2&gt;
&lt;P&gt;What-if for deployments compares a Bicep file or ARM template against the current state of the deployed resources and reports every difference between the two. Historically, a large share of those differences are changes that won't actually happen, and they're considered noise.&lt;/P&gt;
&lt;P&gt;Noise is a difference that what-if reports but that deploying the template wouldn't actually change. It shows up when the property values declared in your template differ from the resource as it exists in Azure for reasons that have nothing to do with your edit. A resource provider fills in default values for properties you left out. It also returns read only properties that no template can declare, which surface as false deletions because nothing in your file matches them. Write only properties can add noise too, but only when what-if doesn't know that a property is write only, because the value you deploy is never returned to compare against.&lt;/P&gt;
&lt;P&gt;This has been one of the most common pieces of feedback we receive about what-if. Noise makes a result harder to trust, and a result that is not trusted is slower to act on. Review turns into a manual exercise, because someone has to read every line and dismiss the ones that nobody authored. As a stack grows to manage more resources, the problem compounds.&lt;/P&gt;
&lt;H2&gt;What noise reduction looks like&lt;/H2&gt;
&lt;P&gt;Here is what a regular deployment what-if response looks like:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;In this example, the property values of properties.sqlEndpoint and properties.minimalTlsVersion on the Cosmos DB account, sku.tier and properties.kafkaEnabled on the Event Hubs namespace, and the five properties.siteConfig values on the web app show up as changes but are actually noise (given they were not a part of the original template).&lt;/P&gt;
&lt;P&gt;Now, with Deployment Stacks What-if, the response is more accurate and the noise is removed, as shown in the following example.&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;Where the noise comes from&lt;/H2&gt;
&lt;P&gt;Noise most commonly comes from default properties for resource types, but it can also come from read only properties, and from write only properties that what-if doesn't recognize as write only. Below are common examples of such noise:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;Resource type&lt;/STRONG&gt;&lt;/th&gt;&lt;th&gt;&lt;STRONG&gt;Property reported as changed&lt;/STRONG&gt;&lt;/th&gt;&lt;th&gt;&lt;STRONG&gt;Why it appears&lt;/STRONG&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cosmos DB account&lt;/td&gt;&lt;td&gt;&lt;CODE&gt;properties.sqlEndpoint&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Server generated, read only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cosmos DB account&lt;/td&gt;&lt;td&gt;&lt;CODE&gt;properties.minimalTlsVersion&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Provider default applied after deployment&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Event Hubs namespace&lt;/td&gt;&lt;td&gt;&lt;CODE&gt;sku.tier&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Derived from sku.name by the provider&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Container app&lt;/td&gt;&lt;td&gt;&lt;CODE&gt;properties.runningStatus&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Runtime state rather than configuration&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Role assignment&lt;/td&gt;&lt;td&gt;&lt;CODE&gt;properties.principalType&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Resolved by the provider at creation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stream Analytics job&lt;/td&gt;&lt;td&gt;&lt;CODE&gt;properties.runtimeMode&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Provider default applied after deployment&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The same pattern holds as the resource types vary. On a separate stack managing 13 resources spanning storage, networking, Event Hubs, Container Registry, App Service, Log Analytics, and Application Insights, what-if for deployments returned 30 property level differences on an unedited template.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Stacks What-if against the same stack returned none.&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;How Deployment Stacks filter noise&lt;/H2&gt;
&lt;P&gt;A Deployment Stack keeps a record that a standalone deployment does not. It captures the noise that was already present after the last successful deployment of that stack.&lt;/P&gt;
&lt;P&gt;After each successful stack deployment or update, Azure runs what-if and saves the result as a baseline. That baseline captures the differences that come from Azure itself, such as provider defaults, rather than from any later edit you make to the template.&lt;/P&gt;
&lt;P&gt;The next time you run Stacks What-if, Azure compares the new result against that baseline. If a property looks the same in both, Azure drops it from the output, because the edit you are previewing is not what introduced that difference.&lt;/P&gt;
&lt;P&gt;Noise reduction is enabled in all regions and there is no flag to set. It depends on a baseline, so it applies to stacks that were deployed or updated on or after August 13, 2026. If a stack hasn't been deployed since then, deploy or update it once to record a baseline. The next Stacks What-if run uses that baseline. If a result looks noisier than you expect, check when the stack was last deployed, because a missing baseline is the most common cause.&lt;/P&gt;
&lt;H2&gt;What noise reduction does not hide&lt;/H2&gt;
&lt;P&gt;Filtering against a baseline removes differences that were already present when the baseline was recorded, not differences that appear afterwards. In a test stack, an Azure Policy assignment added a myTag tag to every managed resource at deployment time. What-if for deployments reported tags.myTag as a deletion on all four resources, because nothing in the template declared it. Stacks What-if reported those same four resources as NoChange, because the tag was already in the baseline. Adding a different tag directly to one of those resources after the stack had deployed produced the opposite outcome. That tag was not in the baseline, so Stacks What-if reported it. Drift introduced after a deployment still surfaces.&lt;/P&gt;
&lt;H2&gt;Getting started&lt;/H2&gt;
&lt;P&gt;The quickest way to evaluate this is against a stack you already have. Run Stacks What-if with the unchanged template and compare the result to what what-if for deployments reports for the same file. Unlike a deployment what-if, &lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks-what-if#how-what-if-works-with-deployment-stacks" target="_blank" rel="noopener"&gt;a Stacks What-If Result is itself an Azure resource&lt;/A&gt;, so the name you give it, noise-check in the examples below, becomes the resource name you use to retrieve that result later:&lt;/P&gt;
&lt;P&gt;Azure PowerShell:&lt;/P&gt;
&lt;PRE class="lia-code-sample language-powershell" tabindex="0" contenteditable="false" data-lia-code-value="New-AzResourceGroupDeploymentStackWhatIfResult `
  -Name &amp;quot;noise-check&amp;quot; `
  -ResourceGroupName &amp;quot;my-rg&amp;quot; `
  -StackResourceId &amp;quot;&amp;lt;stack-resource-id&amp;gt;&amp;quot; `
  -TemplateFile &amp;quot;main.bicep&amp;quot; `
  -ActionOnUnmanage DetachAll `
  -DenySettingsMode None `
  -RetentionInterval &amp;quot;PT3H&amp;quot;"&gt;&lt;CODE&gt;New-AzResourceGroupDeploymentStackWhatIfResult `
  -Name "noise-check" `
  -ResourceGroupName "my-rg" `
  -StackResourceId "&amp;lt;stack-resource-id&amp;gt;" `
  -TemplateFile "main.bicep" `
  -ActionOnUnmanage DetachAll `
  -DenySettingsMode None `
  -RetentionInterval "PT3H"&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Azure CLI:&lt;/P&gt;
&lt;PRE class="lia-code-sample language-bash" tabindex="0" contenteditable="false" data-lia-code-value="az stack-whatif group create \
  --name &amp;quot;noise-check&amp;quot; \
  --resource-group &amp;quot;my-rg&amp;quot; \
  --stack-id &amp;quot;&amp;lt;stack-resource-id&amp;gt;&amp;quot; \
  --template-file &amp;quot;main.bicep&amp;quot; \
  --action-on-unmanage &amp;quot;detachAll&amp;quot; \
  --deny-settings-mode &amp;quot;none&amp;quot; \
  --retention-interval &amp;quot;PT3H&amp;quot;"&gt;&lt;CODE&gt;az stack-whatif group create \
  --name "noise-check" \
  --resource-group "my-rg" \
  --stack-id "&amp;lt;stack-resource-id&amp;gt;" \
  --template-file "main.bicep" \
  --action-on-unmanage "detachAll" \
  --deny-settings-mode "none" \
  --retention-interval "PT3H"&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Keep in mind that --action-on-unmanage and --deny-settings-mode affect the Stacks What-if result, because they change how the stack would manage your resources. The clearest way to see this is to remove a resource from your template and run the same evaluation twice. With detachAll, that resource is reported as v Detach and its management status moves from managed to notManaged, but it stays in Azure. With deleteResources, the same resource is reported as - Delete and is listed again under Resources Marked for Deletion. The template change is identical in both runs, so the difference in the result comes entirely from actionOnUnmanage. Running Stacks What-if does not change any deployed resource. It does create one resource, the Stacks What-If Result itself, which is how the output is stored so you can retrieve it later. Stacks What-if is available at resource group, subscription, and management group scope, in Azure CLI, Azure PowerShell, and the Azure SDKs.&lt;/P&gt;
&lt;P&gt;Azure PowerShell takes PascalCase enum values such as DetachAll and None, written without quotes. Azure CLI documents the camelCase spellings detachAll and none. Use the spelling each tool documents, and if a value is not recognized the error lists the allowed values.&lt;/P&gt;
&lt;P&gt;The retention interval sets how long Azure keeps the result before cleaning it up. It currently accepts ISO 8601 durations between PT1H and PT3H, so the PT3H used in these examples is the longest window available today. If you intend to hand a result to a reviewer as an approval artifact, plan around that window, because the result is removed once it expires.&lt;/P&gt;
&lt;P&gt;The result is printed in up to three sections. Changes to Stack covers the stack resource itself, such as deny settings, and appears when those change or when the stack does not exist yet. Changes to Managed Resources lists every managed resource with its change type and property level detail. Resources Marked for Deletion repeats, as an explicit list with a count, the resources the run predicts will be deleted, which is the section to read first when you are reviewing a risky update.&lt;/P&gt;
&lt;P&gt;You need permission to read the deployment stack and the resources it manages, and permission to create the result. The operations involved are Microsoft.Resources/deploymentStacks/read, Microsoft.Resources/deploymentStacksWhatIfResults/write to create a result, Microsoft.Resources/deploymentStacksWhatIfResults/read to retrieve one, and Microsoft.Resources/deploymentStacksWhatIfResults/delete to remove one. Because the evaluation compares your template against live resource state, the identity running it also needs read access to the managed resources themselves.&lt;/P&gt;
&lt;H2&gt;Tell us what you think&lt;/H2&gt;
&lt;P&gt;If Stacks What-if reports a property you did not change, open an issue in Azure/deployment-stacks and include the resource type, the full property path as it appears in the output, and the correlation ID. Because the result is a stored resource rather than terminal output, the correlation ID is saved on it and can be read back at any time with &lt;CODE&gt;az stack-whatif group show --name &amp;lt;result-name&amp;gt; --resource-group &amp;lt;resource-group&amp;gt; --query properties.correlationId&lt;/CODE&gt;, or from the CorrelationId property returned by &lt;CODE&gt;Get-AzResourceGroupDeploymentStackWhatIfResult&lt;/CODE&gt;.&lt;/P&gt;
&lt;H2&gt;Resources&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks-what-if-noise-reduction" target="_blank" rel="noopener"&gt;Noise reduction in deployment stack what-if results&lt;/A&gt;. The Microsoft Learn article on noise reduction, covering where noise comes from, how the baseline works, and what it doesn't filter.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks-what-if" target="_blank" rel="noopener"&gt;Preview deployment stack changes with what-if&lt;/A&gt;. Change types, running Stacks What-if at each scope, retrieving and deleting Stacks What-If Resources, and noise reduction.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks" target="_blank" rel="noopener"&gt;Create and deploy Azure deployment stacks in Bicep&lt;/A&gt;. The main Deployment Stacks article, including actionOnUnmanage.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deploy-what-if" target="_blank" rel="noopener"&gt;Preview Bicep deployment changes by using what-if&lt;/A&gt;. What-if for deployments, included for comparison.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/cli/azure/stack-whatif" target="_blank" rel="noopener"&gt;az stack-whatif command reference&lt;/A&gt;. The Azure CLI command group for Stacks What-if at resource group, subscription, and management group scope.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/powershell/module/az.resources/new-azresourcegroupdeploymentstackwhatifresult" target="_blank" rel="noopener"&gt;New-AzResourceGroupDeploymentStackWhatIfResult&lt;/A&gt;. The Azure PowerShell cmdlet reference, including the subscription and management group equivalents.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/rest/api/resources/deployment-stacks-what-if-results-at-resource-group/create-or-update" target="_blank" rel="noopener"&gt;Deployment stacks what-if results REST API&lt;/A&gt;. The Microsoft.Resources/deploymentStacksWhatIfResults reference, which is the contract the SDKs are generated from.&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Thu, 08 Oct 2026 16:12:33 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/a-closer-look-at-noise-reduction-in-stacks-what-if/ba-p/4548210</guid>
      <dc:creator>torreyt</dc:creator>
      <dc:date>2026-10-08T16:12:33Z</dc:date>
    </item>
    <item>
      <title>Open Sourcing the Azure Policy Linter!</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/open-sourcing-the-azure-policy-linter/ba-p/4547577</link>
      <description>&lt;P&gt;Today we’re excited to share that the&amp;nbsp;&lt;STRONG&gt;Azure Policy Linter&lt;/STRONG&gt; is now open source on GitHub: &lt;A href="https://github.com/Azure/azure-policy-linter" target="_blank" rel="noopener"&gt;github.com/Azure/azure-policy-linter&lt;/A&gt;. It’s a command-line linter for &lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/concepts/definition-structure-basics" target="_blank" rel="noopener"&gt;Azure Policy definitions&lt;/A&gt; that surfaces known issues, gotchas, and best practices that you can run when authoring your policy definition and &lt;EM&gt;before&lt;/EM&gt; you assign a policy to your environment.&lt;/P&gt;
&lt;H2&gt;Why we built it&lt;/H2&gt;
&lt;P&gt;Writing a &lt;EM&gt;good&lt;/EM&gt; policy is hard. It requires deep knowledge of the policy language, how each effect behaves, and the API surface of every resource type you’re targeting.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The linter codifies that expertise into a set of automated rules. Instead of learning every gotcha the hard way, you get &lt;STRONG&gt;actionable error, warning, and informational findings&lt;/STRONG&gt; on your specific policy definition immediately.&lt;/P&gt;
&lt;P&gt;The linter fits naturally into the way policy authors already work:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Shift governance mistakes left.&lt;/STRONG&gt; Catch problems on your laptop or in CI, long before a bad policy reaches a subscription and blocks legitimate deployments or produces misleading compliance results.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Lint one file or a whole library.&lt;/STRONG&gt; Point it at a single definition, or run it across up to 1,000 files in one parallelized pass with file-specific results.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Get machine-readable output.&lt;/STRONG&gt; Emit findings to the console for humans, or to JSON (--output results.json) so you can gate pull requests and pipelines.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Tune it to your scenario.&lt;/STRONG&gt; Rules are grouped into &lt;STRONG&gt;rule sets&lt;/STRONG&gt;. The default rule set covers general-purpose checks; you can list available sets (--list-rule-sets), apply a specific one, or combine several (--rule-set &amp;lt;name&amp;gt; --rule-set default).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Understand every finding.&lt;/STRONG&gt; Each rule ships with its own documentation page under &lt;A href="https://github.com/Azure/azure-policy-linter/tree/main/docs/Rules" target="_blank" rel="noopener"&gt;docs/Rules/&lt;/A&gt;, explaining the &lt;EM&gt;why&lt;/EM&gt;, plus violation and corrected examples.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;Installing NuGet&lt;/H4&gt;
&lt;P&gt;The linter is now published on NuGet. Install the Microsoft.Azure.Policy.PolicyLinter.Cli CLI as a global .NET tool by running&lt;/P&gt;
&lt;PRE&gt;dotnet tool install --global Microsoft.Azure.Policy.PolicyLinter.Cli&lt;/PRE&gt;
&lt;P&gt;Then invoke it as&lt;/P&gt;
&lt;PRE&gt;policylinter&lt;/PRE&gt;
&lt;P&gt;To consume the linter as a library instead, reference the Microsoft.Azure.Policy.PolicyLinter.Core package.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;Installing from source&lt;/H4&gt;
&lt;P&gt;You can also run directly from source. Clone the repo, build the solution, and invoke the CLI with dotnet run:&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;git clone https://github.com/Azure/azure-policy-linter.git
cd azure-policy-linter
dotnet build src/dirs.proj --configuration Release
dotnet run --project src/PolicyLinter.Cli -- &amp;lt;path-to-policy-json&amp;gt;&lt;/LI-CODE&gt;
&lt;H3&gt;Running the linter&lt;/H3&gt;
&lt;P&gt;Once installed, point policylinter at one or many definitions:&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;# Single file
policylinter c:\path\to\policyDefinition.json

# Multiple files (up to 1,000 in a single, parallelized run)
policylinter policy1.json policy2.json --output results.json

# See which rule sets are available, then pick one
policylinter --list-rule-sets
policylinter policy.json --rule-set &amp;lt;RuleSetName&amp;gt; --rule-set default&lt;/LI-CODE&gt;
&lt;P&gt;Run policylinter --help at any time for the full list of options.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;One great use case is to ask GitHub Copilot to run the policy linter against the policy definition you are authoring, and it can read the output and help you fix your definition to meet all the rules suggestions!&lt;/P&gt;
&lt;H2&gt;Policy linter rules&lt;/H2&gt;
&lt;P&gt;The linter’s real value is in its &lt;A href="https://github.com/Azure/azure-policy-linter/tree/main/docs/Rules" target="_blank" rel="noopener"&gt;rule catalog&lt;/A&gt;. Every rule has its own documentation page with the rationale plus violation and corrected examples. Here are few of the more common rules:&lt;/P&gt;
&lt;H3&gt;1. &lt;A href="https://github.com/Azure/azure-policy-linter/blob/main/docs/Rules/all-parameter-references-must-resolve.md" target="_blank" rel="noopener"&gt;All parameter references must resolve&lt;/A&gt; &lt;EM&gt;(Error)&lt;/EM&gt;&lt;/H3&gt;
&lt;P&gt;Every parameters('...') reference must point to a parameter actually declared in the policy. A single typo — referencing efect when you declared effect — means the policy &lt;STRONG&gt;fails to deploy or evaluate&lt;/STRONG&gt;. This rule catches that class of showstopper bug instantly, before you ever push the definition to Azure.&lt;/P&gt;
&lt;H3&gt;2. &lt;A href="https://github.com/Azure/azure-policy-linter/blob/main/docs/Rules/risky-effect-parameter-default-value.md" target="_blank" rel="noopener"&gt;Risky effect parameter default value&lt;/A&gt; &lt;EM&gt;(Warning)&lt;/EM&gt;&lt;/H3&gt;
&lt;P&gt;Parameterizing the effect is a best practice — but if the effect parameter &lt;EM&gt;defaults&lt;/EM&gt; to an enforcement effect like deny, modify, or deployIfNotExists, then any assignment that doesn’t explicitly override it will &lt;STRONG&gt;enforce by default&lt;/STRONG&gt;. That’s rarely what the person assigning the policy expects. The rule flags risky defaults and steers you toward a safe default like audit (or no default at all).&lt;/P&gt;
&lt;H3&gt;3. &lt;A href="https://github.com/Azure/azure-policy-linter/blob/main/docs/Rules/read-only-field-alias.md" target="_blank" rel="noopener"&gt;Read-only field alias&lt;/A&gt; &lt;EM&gt;(Warning)&lt;/EM&gt;&lt;/H3&gt;
&lt;P&gt;This is exactly the kind of hidden gotcha that’s almost impossible to learn from docs. If your policy keys off a &lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/concepts/definition-structure-alias" target="_blank" rel="noopener"&gt;field alias&lt;/A&gt; that maps to a &lt;STRONG&gt;read-only&lt;/STRONG&gt; property, that property can’t be relied on during enforcement — callers aren’t required to send it, and providers often ignore it if they do. A deny policy built on a read-only alias may simply not work. The linter draws on the public &lt;A href="https://github.com/Azure/azure-rest-api-specs" target="_blank" rel="noopener"&gt;Azure REST API specs&lt;/A&gt; to know which properties are read-only.&lt;/P&gt;
&lt;H3&gt;4. &lt;A href="https://github.com/Azure/azure-policy-linter/blob/main/docs/Rules/broad-type-matching-operator.md" target="_blank" rel="noopener"&gt;Broad type matching operator&lt;/A&gt; &lt;EM&gt;(Warning)&lt;/EM&gt;&lt;/H3&gt;
&lt;P&gt;Comparing the type field with a broad operator like like, contains, or match can silently match resource types you never intended to govern. For example, "contains": "virtualMachines" matches both Microsoft.Compute/virtualMachines &lt;STRONG&gt;and&lt;/STRONG&gt; .../virtualMachines/extensions. The rule pushes you toward equals (single type) or in (an explicit list) so your scope is exactly what you meant.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;These are just a few highlights, the linter ships with many more, covering effect parameters, API-version mismatches, and readability simplifications. Browse the complete, per-rule documentation in &lt;A href="https://github.com/Azure/azure-policy-linter/tree/main/docs/Rules" target="_blank" rel="noopener"&gt;docs/Rules/&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Don’t see a rule you need? Add your own&lt;/H2&gt;
&lt;P&gt;The rule catalog captures the gotchas we’ve hit, but you know your environment best. If there’s a check that would help your team and it isn’t there yet, the linter is designed to be extended. The repo’s &lt;A href="https://github.com/Azure/azure-policy-linter#adding-a-linter-rule" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Adding a linter rule&lt;/STRONG&gt;&lt;/A&gt; section walks you through it, backed by two guides,&amp;nbsp;&lt;A href="https://github.com/Azure/azure-policy-linter/blob/main/docs/linter-rule-design.md" target="_blank" rel="noopener"&gt;what a good rule looks like &lt;/A&gt;and &lt;A href="https://github.com/Azure/azure-policy-linter/blob/main/docs/linter-architecture.md" target="_blank" rel="noopener"&gt;how rules are wired up in code. &lt;/A&gt;Plus there is a &lt;A class="lia-external-url" href="https://github.com/Azure/azure-policy-linter/tree/main/.github/skills/implement-linter-rule" target="_blank" rel="noopener"&gt;SKILL.md file&lt;/A&gt; you can have your GitHub Copilot agent use to help you author a rule!&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Try it and tell us what you think&lt;/H2&gt;
&lt;P&gt;The Azure Policy Linter is open source under the MIT License. Clone it, build it, and run it against your own definitions:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Repo:&lt;/STRONG&gt; &lt;A href="https://github.com/Azure/azure-policy-linter" target="_blank" rel="noopener"&gt;github.com/Azure/azure-policy-linter&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rule catalog:&lt;/STRONG&gt; &lt;A href="https://github.com/Azure/azure-policy-linter/tree/main/docs/Rules" target="_blank" rel="noopener"&gt;docs/Rules/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;How rules are designed:&lt;/STRONG&gt; &lt;A href="https://github.com/Azure/azure-policy-linter/blob/main/docs/linter-rule-design.md" target="_blank" rel="noopener"&gt;docs/linter-rule-design.md&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;We’re not accepting pull requests just yet, but we would love your feedback, bug reports, gotchas we haven’t codified, and rule ideas. Please &lt;A href="https://github.com/Azure/azure-policy-linter/issues" target="_blank" rel="noopener"&gt;open an issue&lt;/A&gt; and help us make Azure Policy authoring safer and simpler for everyone.&lt;/P&gt;</description>
      <pubDate>Mon, 28 Sep 2026 15:02:05 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/open-sourcing-the-azure-policy-linter/ba-p/4547577</guid>
      <dc:creator>stevenbucher</dc:creator>
      <dc:date>2026-09-28T15:02:05Z</dc:date>
    </item>
    <item>
      <title>Public Preview Annoucement: Azure Policy Custom Policy Versioning!</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/public-preview-annoucement-azure-policy-custom-policy-versioning/ba-p/4556461</link>
      <description>&lt;P&gt;In 2024 we introduced&amp;nbsp;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/public-preview-announcement-azure-policy-built-in-versioning/4186105" target="_blank" rel="noopener" data-lia-auto-title="versioning for built-in definitions and initiatives" data-lia-auto-title-active="0"&gt;versioning for built-in definitions and initiatives&lt;/A&gt;. Today we are extending that capability to your own policies!&lt;STRONG&gt; Custom policy versioning is now in public preview. &lt;/STRONG&gt;Custom definitions and custom initiatives can store and reference multiple versions under a single definition ID, using the same model built-ins use.&lt;/P&gt;
&lt;H2&gt;What's new?&lt;/H2&gt;
&lt;P&gt;Every custom policy definition and initiative now has a top-level &lt;EM&gt;version&lt;/EM&gt; property in {major}.{minor}.{patch} format. This gives you:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Predictable updates. &lt;/STRONG&gt;-&amp;nbsp; Pin an assignment to a version so an edit never silently changes what is enforced.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Safer rollouts&lt;/STRONG&gt;. - Pilot a new version at one scope while production stays on the version it was tested against.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rollback&lt;/STRONG&gt;. - Point the assignment back at the previous version. Nothing to redeploy.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Visible history - &lt;/STRONG&gt;Every version is preserved and viewable in the portal.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Version-aware compliance &lt;/STRONG&gt;-&amp;nbsp; Compliance records show which version produced them.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Getting started&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Your existing definitions are already on 1.0.0.&lt;/STRONG&gt; Every custom definition and initiative that existed before this rollout has been backfilled to version 1.0.0. Evaluation has not changed. You now have a starting point to iterate from.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Create a new version&lt;/STRONG&gt; by setting &lt;EM&gt;properties.version&lt;/EM&gt; to a higher number and saving. The previous version is preserved. For example, a custom "Allowed locations" policy that started at 1.0.0 with only &lt;EM&gt;westus2&lt;/EM&gt;, and was widened to add two more regions. The example below treats that as a major bump to 2.0.0, but any higher version number works, see "Suggestion for version bumps." for guidance:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "properties": {
    "displayName": "Allowed locations (custom)",
    "mode": "Indexed",
    "version": "2.0.0",
    "parameters": {
      "allowedLocations": {
        "type": "Array",
        "defaultValue": [ "westus2", "eastus2", "centralus" ]
      }
    },
    "policyRule": {
      "if": { "not": { "field": "location", "in": "[parameters('allowedLocations')]" } },
      "then": { "effect": "deny" }
    }
  },
  "type": "Microsoft.Authorization/policyDefinitions",
  "name": "allowedLocationsCustom"
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Assign a version&lt;/STRONG&gt; with &lt;EM&gt;definitionVersion&lt;/EM&gt;. Use &lt;EM&gt;1.*.*&lt;/EM&gt; to stay on major version 1 and pick up minor and patch changes automatically (recommended), or&amp;nbsp;&lt;EM&gt;1.1.*&lt;/EM&gt;&amp;nbsp;to pin to a minor version.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-SPOILER label="Note"&gt;
&lt;P&gt;The patch position must always be *. Setting &lt;EM&gt;definitionVersion&lt;/EM&gt; to a specific patch version such as &lt;EM&gt;1.1.1&lt;/EM&gt; is not supported and the assignment will fail. Use &lt;EM&gt;1.*.*&lt;/EM&gt; or &lt;EM&gt;1.1.*&lt;/EM&gt; instead.&lt;/P&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "properties": {
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/allowedLocationsCustom",
    "definitionVersion": "1.*.*"
  },
  "type": "Microsoft.Authorization/policyAssignments",
  "name": "allowedLocationsProd"
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To promote production to 2.0.0, change&amp;nbsp;&lt;EM&gt;definitionVersion&lt;/EM&gt; to &lt;EM&gt;2.*.*&lt;/EM&gt;. To roll back, change it again.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Check which version is in effect&lt;/STRONG&gt; by adding &lt;EM&gt;$expand=latestDefinitionVersion,effectiveDefinitionVersion&lt;/EM&gt; to a GET on the definition or assignment. See &lt;A class="lia-external-url" href="https://learn.microsoft.com/rest/api/policy-authorization/policy-definition-versions/create-or-update" target="_blank" rel="noopener"&gt;Policy Definition Versions REST API&lt;/A&gt;.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Portal&lt;/H3&gt;
&lt;P&gt;Custom definitions now behave like built-ins. The definition and assignment views show the version in Essentials with a &lt;EM&gt;&lt;STRONG&gt;Select version&lt;/STRONG&gt;&lt;/EM&gt; dropdown. Editing a definition shows a &lt;STRONG&gt;New version&lt;/STRONG&gt; field next to the current one. The Create Assignment blade lets you choose which version to reference, and the compliance detail view includes a Version column.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;CLI &amp;amp; PowerShell&lt;/H3&gt;
&lt;P&gt;Versioning is also supported in Azure CLI and Azure PowerShell. Create a new latest version with &lt;EM&gt;az policy definition create --version&lt;/EM&gt; and manage older versions with the &lt;EM&gt;az policy definition version&lt;/EM&gt; command group. See the &lt;A href="https://learn.microsoft.com/cli/azure/policy/definition/version" target="_blank" rel="noopener"&gt;Azure CLI reference&lt;/A&gt; and &lt;A class="lia-external-url" href="https://learn.microsoft.com/powershell/module/az.resources" target="_blank" rel="noopener"&gt;Azure Powershell reference&lt;/A&gt; for full examples.&lt;/P&gt;
&lt;H2&gt;Suggestions on Version Bumps&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; height: 332px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 25%" /&gt;&lt;col style="width: 25%" /&gt;&lt;col style="width: 25%" /&gt;&lt;col style="width: 25%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;Bump&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;What Qualifies&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;Assignments pinned to 1.*.*&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 131px;"&gt;&lt;td style="height: 131px;"&gt;Major&lt;/td&gt;&lt;td style="height: 131px;"&gt;1.2.0 → 2.0.0&lt;/td&gt;&lt;td style="height: 131px;"&gt;Breaking changes: significant rule logic changes, removing a parameter, adding an enforcement effect by default, adding an enforcing definition to an initiative&lt;/td&gt;&lt;td style="height: 131px;"&gt;Not picked up until you move them&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 107px;"&gt;&lt;td style="height: 107px;"&gt;Minor&lt;/td&gt;&lt;td style="height: 107px;"&gt;1.1.0 → 1.2.0&lt;/td&gt;&lt;td style="height: 107px;"&gt;Non-breaking changes: small rule logic refinements, new allowed values, new parameters with defaults,&amp;nbsp;&lt;EM&gt;roleDefinitionIds&lt;/EM&gt;&amp;nbsp;changes&lt;/td&gt;&lt;td style="height: 107px;"&gt;Picked up automatically&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 59px;"&gt;&lt;td style="height: 59px;"&gt;Patch&lt;/td&gt;&lt;td style="height: 59px;"&gt;1.2.0 → 1.2.1&lt;/td&gt;&lt;td style="height: 59px;"&gt;Text and metadata only: display name, description, category&lt;/td&gt;&lt;td style="height: 59px;"&gt;Always picked up, cannot be pinned&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-SPOILER label="Note"&gt;
&lt;P&gt;These are guidelines, not rules. Azure Policy doesn't check what changed between versions, so bump whichever number fits your process. Just remember that assignments on 1.*.* pick up minor and patch bumps automatically, but not major ones.&lt;/P&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you already track a version string in &lt;EM&gt;metadata.version&lt;/EM&gt;, you can keep it, but Azure Policy does not act on it. Use &lt;EM&gt;properties.version&lt;/EM&gt; going forward.&lt;/P&gt;
&lt;H2&gt;Important items to note&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Version Limit&lt;/STRONG&gt; - Each custom definition or initiative can hold up to 4 versions during public preview. Delete unassigned versions to make room. A version cannot be deleted while an assignment references it.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;New versions must be higher&lt;/STRONG&gt; - than the version you are editing from and cannot collide with an existing version.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Supported modes -&amp;nbsp;&lt;/STRONG&gt; Custom versioning is supported for&amp;nbsp;&lt;EM&gt;mode,&lt;/EM&gt; &lt;EM&gt;All&lt;/EM&gt;&amp;nbsp;and&amp;nbsp;&lt;EM&gt;Indexed&lt;/EM&gt;. Resource Provider modes are not supported yet.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Version overrides&lt;/STRONG&gt; - on assignments (&lt;EM&gt;policyVersion&lt;/EM&gt; override kind) are available for built-ins only. They are not supported for custom definitions or initiatives.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Patch pinning&lt;/STRONG&gt; -&amp;nbsp; is not supported. Patch changes are always ingested, the same as built-ins.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;What's next&lt;/H2&gt;
&lt;P&gt;We are working on Resource Provider mode support and a side-by-side version comparison in the portal.&lt;/P&gt;
&lt;H3&gt;Resources&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/governance/policy/concepts/definition-structure-basics" target="_blank" rel="noopener"&gt;Azure Policy definition structure: Version&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/governance/policy/concepts/assignment-structure" target="_blank" rel="noopener"&gt;Azure Policy assignment structure: Definition version&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/governance/policy/how-to/policy-safe-deployment-practices" target="_blank" rel="noopener"&gt;Azure Policy safe deployment practices&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 15 Sep 2026 18:02:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/public-preview-annoucement-azure-policy-custom-policy-versioning/ba-p/4556461</guid>
      <dc:creator>stevenbucher</dc:creator>
      <dc:date>2026-09-15T18:02:19Z</dc:date>
    </item>
    <item>
      <title>Automating Compliance Scope Enforcement with Azure Policy</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/automating-compliance-scope-enforcement-with-azure-policy/ba-p/4551921</link>
      <description>&lt;P&gt;Cloud compliance certifications like &lt;STRONG&gt;C5, ISO 27001, HIPAA, or PCI DSS&lt;/STRONG&gt; never cover the whole platform. They only cover a defined set of services, listed in an official document published by Microsoft. A common and costly mistake is to assume that “Azure is certified for X” automatically means every Azure service is covered. In reality, the list of covered services changes with every new document version, and it is often different for Azure Public compared to Azure Government.&lt;/P&gt;
&lt;P&gt;Let's walk through this technically, step by step, using Microsoft's &lt;STRONG&gt;C5 (Germany) compliance offering&lt;/STRONG&gt; as a concrete example. The same approach works for any other compliance standard that publishes a similar service-scope table — only the source document and the resulting parameter values change.&lt;/P&gt;
&lt;P&gt;Within that C5 example, an even more common mistake goes one step further: "Azure is C5-certified, so my workloads are automatically C5-compliant." That is not true. C5 works on a shared-responsibility model. The customer still has to set up things like:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;🔐&amp;nbsp;&lt;STRONG&gt;RBAC and Privileged Identity Management (PIM)&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;🌐&amp;nbsp;&lt;STRONG&gt;Network Segmentation&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;📊&amp;nbsp;&lt;STRONG&gt;Logging &amp;amp; Monitoring&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;🔑&amp;nbsp;&lt;STRONG&gt;Key Management&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;💾&amp;nbsp;&lt;STRONG&gt;Backup &amp;amp; Recovery Concepts&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;One thing almost always gets missed on top of that: whether the &lt;STRONG&gt;Azure service itself is actually C5-certified&lt;/STRONG&gt; in the first place. Across numerous Landing Zone assessments🔍, this is consistently the point that gets overlooked. If a service isn't certified, it should be &lt;STRONG&gt;blocked as a resource type&lt;/STRONG&gt; before anyone can even deploy it - which is exactly the process we walk through next.&lt;/P&gt;
&lt;H1&gt;🛠️A Five-Step Approach&lt;/H1&gt;
&lt;H2&gt;📄Step 1 - Identify the Authoritative Source&amp;nbsp;&lt;/H2&gt;
&lt;P&gt;For C5, Microsoft publishes an "Azure Compliance Offerings" document (&lt;A href="https://servicetrust.microsoft.com/DocumentPage/7adf2d9e-d7b5-4e71-bad8-713e6a183cf3" target="_blank" rel="noopener"&gt;Service Trust Portal&lt;/A&gt;). It has two appendices listing exactly which services are covered for &lt;STRONG&gt;Azure Public&lt;/STRONG&gt; and for &lt;STRONG&gt;Azure Government&lt;/STRONG&gt; - and the two lists are not the same.&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;📑Step 2 - Extract the Scope Data in a Structured Form&amp;nbsp;&lt;/H2&gt;
&lt;P&gt;This document is published as a PDF, with the actual data laid out as tables: services listed against certification columns. Instead of typing rows into a spreadsheet by hand, there are a few practical ways to turn that into structured data. A small one-time script (for example, using a PDF text-extraction library) is the most repeatable option, but a tool like &lt;STRONG&gt;Microsoft 365 Copilot&lt;/STRONG&gt; can also read the table directly out of the PDF and export it as &lt;STRONG&gt;CSV or JSON&lt;/STRONG&gt;, which is a fast alternative if nobody on the team wants to write or maintain a script.&lt;/P&gt;
&lt;P&gt;Either way, the goal is the same: end up with a structured &lt;STRONG&gt;CSV or JSON&lt;/STRONG&gt; file, not a static PDF, since that file becomes the single source of truth for everything that follows. The real benefit shows up the second time: when a new document version comes out, redoing the extraction gives a clean diff showing exactly which services were added or removed.&lt;/P&gt;
&lt;P&gt;Below is an example of how that extract can look once it's structured - two services from the August 2026 document that are not part of the Germany C5 scope, each mapped to its actual Azure resource provider and resource types:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "NonAllowedResources": [
    {
      "name": "Azure Kubernetes Fleet Manager",
      "resourceProvider": "Microsoft.ContainerService",
      "resourceTypes": ["fleets"]
    },
    {
      "name": "Azure Storage Actions",
      "resourceProvider": "Microsoft.StorageActions",
      "resourceTypes": [
        "locations",
        "locations/asyncoperations",
        "locations/operationStatuses",
        "operations",
        "storageTasks",
        "storageTasks/reports",
        "storageTasks/storageTaskAssignments"
      ]
    }
  ]
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; In addition to a dedicated PDF-parsing script, the download-and-extract step can be handed off to an LLM entirely. A Foundry Agent (or a plain Azure OpenAI call) can be given a URL or file input, download the document itself via a connected tool/function, and return the extracted table directly as JSON matching the schema above.&lt;/P&gt;
&lt;H2&gt;⚖️Step 3 - Allow-List vs. Deny-List&lt;/H2&gt;
&lt;P&gt;An &lt;STRONG&gt;allow-list&lt;/STRONG&gt; only permits certified services. For highly regulated environments, allow-lists are often preferred because they enforce an explicit "only what is approved" model. It is the stricter option, but harder to maintain, because most services in a mature platform are usually already certified. A&amp;nbsp;&lt;STRONG&gt;deny-list&lt;/STRONG&gt; only blocks the few services that are not certified, which is usually much easier to maintain, since that list is typically short. Which option makes sense still depends on your risk appetite and the specific requirement you're working with.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;in some cases, it isn't the whole service that's missing certification, just a specific sub-feature of it. A single entry in the source document can bundle several sub-services under one name, and they don't always share the same status. Treating the whole entry as one block, in either direction, can silently make your scope too strict or too loose - so it's worth checking the exact granularity in the source document rather than assuming a sub-service inherits its parent's status.&lt;/P&gt;
&lt;H1&gt;🧩Step 4 - Map to Azure Policy&lt;/H1&gt;
&lt;P&gt;Not every entry in a compliance document is something &lt;STRONG&gt;Azure Policy&lt;/STRONG&gt; can act on, and the document doesn't flag the difference for you. Entries fall into two buckets: services that map to an actual, deployable &lt;STRONG&gt;ARM resource type&lt;/STRONG&gt;, which Azure Policy can deny or audit directly, and entries that describe a &lt;STRONG&gt;portal feature or platform capability&lt;/STRONG&gt; with no deployable resource behind them at all - for example, "&lt;STRONG&gt;Microsoft Azure Portal&lt;/STRONG&gt;" or the "&lt;STRONG&gt;Quota+ Usage Blade&lt;/STRONG&gt;", both listed in the same table. These entries therefore require different handling during the mapping process. The real effort in this step is sorting entries into these two buckets and, for the first one, translating business-facing service names into the exact resource type strings Azure Policy expects. Once that mapping exists, the policy definition itself is relatively straightforward.&lt;/P&gt;
&lt;P&gt;Take the two entries from the Step 2 extract. Azure Kubernetes Fleet Manager flattens to a single resource type, &lt;STRONG&gt;Microsoft.ContainerService/fleets&lt;/STRONG&gt;. Azure Storage Actions flattens to several, such as &lt;STRONG&gt;Microsoft.StorageActions/storageTasks&lt;/STRONG&gt; and &lt;STRONG&gt;Microsoft.StorageActions/storageTasks/reports&lt;/STRONG&gt;. Once every entry has been flattened this way, they all feed into the same parameterized deny policy&lt;/P&gt;
&lt;LI-CODE lang="bicep"&gt;param policyName string = 'deny-out-of-compliance-scope-services'
resource denyOutOfScope 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: policyName
  properties: {
    displayName: 'Deny resource types outside approved compliance scope'
    policyType: 'Custom'
    mode: 'Indexed'
    parameters: {
      NonAllowedResources: {
        type: 'Array'
        metadata: {
          displayName: 'Excluded resource types'
          description: 'Resource types outside current compliance scope.'
        }
      }
    }
    policyRule: {
      if: {
        field: 'type'
        in: '[parameters("NonAllowedResources")]'
      }
      then: {
        effect: 'deny'
      }
    }
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;A practical governance model must balance control with flexibility. When teams need to evaluate new capabilities, such as preview services not yet covered by existing standards, &lt;STRONG&gt;policy exemptions&lt;/STRONG&gt; provide a controlled exception mechanism. By requiring an expiry date, organizations can prevent temporary deviations from evolving into long-term compliance gaps.&lt;/P&gt;
&lt;LI-CODE lang="bicep"&gt;resource temporaryExemption 'Microsoft.Authorization/policyExemptions@2022-07-01-preview' = {
  name: 'exemption-preview-service-evaluation'
  properties: {
    policyAssignmentId: assignment.id
    exemptionCategory: 'Waiver'
    displayName: 'Temporary evaluation of a non-certified preview service'
    description: 'Approved by security review on 2026-08-15; must be re-assessed before expiry.'
    expiresOn: '2026-11-15T00:00:00Z'
  }
}
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;A deny effect is a good default for new deployments, but not always for existing environments. For live workloads, start with &lt;STRONG&gt;audit mode&lt;/STRONG&gt; to assess impact before enforcing deny. Consider the newer &lt;A href="https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/introducing-compliance-substate-for-azure-policy-exemptions/4541703" target="_blank" rel="noopener" data-lia-auto-title="compliance substate" data-lia-auto-title-active="0"&gt;&lt;STRONG&gt;compliance substate&lt;/STRONG&gt;&lt;/A&gt; for exemptions, which keeps exempted resources visible in compliance reporting instead of excluding them.&lt;/P&gt;
&lt;H2&gt;🔄Step 5 - Automate &amp;amp; Audit&amp;nbsp;&lt;/H2&gt;
&lt;P&gt;Keep policy definitions and assignments &lt;STRONG&gt;as code&lt;/STRONG&gt;, alongside the scope file from Step 2, in the same repository as the rest of your Landing Zone infrastructure. At a high level, this splits into two workflows: one that gets hold of the latest source document and regenerates the JSON scope file, and a second one that takes an approved change to that file and redeploys the policy assignment.&lt;/P&gt;
&lt;P&gt;A key advantage of this approach is that the document retrieval process is isolated from the rest of the workflow. For this publicly accessible document, the workflow simply queries the &lt;STRONG&gt;Trust Portal API&lt;/STRONG&gt; to obtain the latest version ID and then downloads the corresponding file.&lt;/P&gt;
&lt;LI-CODE lang="git"&gt;name: sync-c5-compliance-scope
 
on:
  schedule:
    - cron: '0 6 * * 1'   # weekly check for a new compliance document
  workflow_dispatch: {}
 
permissions:
  contents: write
  pull-requests: write
 
jobs:
  extract-and-diff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - name: Download the compliance document (public doc, no auth needed)
        run: |
          DOC_ID="7adf2d9e-d7b5-4e71-bad8-713e6a183cf3"
          VERSION_ID=$(curl -s "https://api.servicetrust.microsoft.com/api/v2/GetLiveDocumentIncludingOldSeriesDoc/$DOC_ID" | jq -r '.id')
          curl -sS -o compliance-offerings.pdf "https://api.servicetrust.microsoft.com/api/v2/downloadDocuments/$DOC_ID/$VERSION_ID"
 
      - name: Extract current compliance scope
        run: python scripts/extract_c5_scope.py compliance-offerings.pdf --out compliance/c5-scope.json
 
      - name: Open a PR if the scope changed
        uses: peter-evans/create-pull-request@v6
        with:
          title: 'Update C5 compliance scope'
          branch: update-c5-scope
          add-paths: compliance/c5-scope.json
&lt;/LI-CODE&gt;
&lt;P&gt;The second workflow runs only after approval and merge into the main branch. It leaves the extraction process untouched, instead translating the domain-based JSON from Step 2 into the flattened resource type array required by Azure Policy and redeploying the assignment defined in Step 4 with the updated parameter set.&lt;/P&gt;
&lt;LI-CODE lang="git"&gt;name: deploy-c5-policy
 
on:
  push:
    branches: [main]
    paths: ['compliance/c5-scope.json']
 
permissions:
  id-token: write   # required for OIDC federated login
  contents: read
 
jobs:
  deploy-policy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
 
      - name: Flatten the extract into the policy's parameter format
        run: |
          jq '[.NonAllowedResources[] | .resourceProvider as $rp | .resourceTypes[] | "\($rp)/\(.)"]' \
            compliance/c5-scope.json &amp;gt; excluded-resource-types.json
 
      - name: Redeploy policy assignment with updated scope
        run: |
          az deployment mg create \
            --management-group-id ${{ vars.MG_ID }} \
            --template-file infra/policy-assignment.bicep \
            --parameters excludedResourceTypes=@excluded-resource-types.json
&lt;/LI-CODE&gt;
&lt;P&gt;The key benefit of this design is the strict separation between change generation and change deployment. The extraction workflow is limited to creating reviewed pull requests, while the deployment workflow acts solely on approved and merged content. This guarantees that no unreviewed modification can reach a production policy assignment, and that safeguard remains in place regardless of how the underlying document is sourced.&lt;/P&gt;
&lt;P&gt;There are plenty of other ways to implement this - the following are just meant as inspiration:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Someone downloads the public PDF into a storage account container. The GitHub workflow is then triggered manually, fetches the PDF from blob storage instead of the Trust Portal API, and continues as normal from there (extraction → diff → PR).&lt;/LI&gt;
&lt;LI&gt;Instead of doing this through workflows at all, a Logic App could just as well be the preferred choice, handling these exact same steps end to end on its own.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;🎯Compliance as Code, Not Compliance as Spreadsheet&lt;/H2&gt;
&lt;P&gt;Any list you hardcode will go &lt;STRONG&gt;out of date&lt;/STRONG&gt;, sooner or later. A process that re-reads the list whenever needed stays correct indefinitely. The C5 document is a good example of why: the same service can be certified for &lt;STRONG&gt;Azure Public&lt;/STRONG&gt; but not for &lt;STRONG&gt;Azure Government&lt;/STRONG&gt;, or the other way around. That's a good reminder that the extraction step needs to be repeatable, not something you do once during a single audit.&lt;/P&gt;
&lt;P&gt;✅ The real objective is not maintaining a perfect list.&lt;/P&gt;
&lt;P&gt;✅ The objective is maintaining a repeatable process that continuously converts Microsoft's published compliance scope into enforceable controls.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Sep 2026 00:08:55 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/automating-compliance-scope-enforcement-with-azure-policy/ba-p/4551921</guid>
      <dc:creator>gurjsing</dc:creator>
      <dc:date>2026-09-02T00:08:55Z</dc:date>
    </item>
    <item>
      <title>[Now Generally Available] What-If for Azure Deployment Stacks</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/now-generally-available-what-if-for-azure-deployment-stacks/ba-p/4547614</link>
      <description>&lt;P&gt;We are proud to announce that what-if for Azure Deployment Stacks is now generally available, in all regions.&lt;/P&gt;
&lt;P&gt;To be precise about what this is, since the names are similar: what-if for standard template deployments has been around for a while. This release brings what-if to the deployment stacks resource type. A Stacks What-if result is composed of the list of change types (e.g. create, modify, delete, etc.) and their corresponding resources, the changes to the stack resource itself (e.g. changes to deny settings of a stack), and lastly the changes to the resources a stack manages (e.g. managed resources to be detached or deleted).&lt;/P&gt;
&lt;P&gt;Furthermore, the new Stacks What-if filters out "noise" (noisy properties that are flagged by what-if as changes that are false positives) by using a baseline recorded when the stack was deployed. And the result it produces is a Stacks What-If Resource you name and can retrieve later, rather than output that disappears when your terminal scrolls.&lt;/P&gt;
&lt;P&gt;This is the most requested feature we have had for deployment stacks. Thank you to everyone who kept that conversation going. This release is a direct result of it.&lt;/P&gt;
&lt;H2&gt;Why this matters&lt;/H2&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks" target="_blank" rel="noopener"&gt;Deployment stacks&lt;/A&gt; manage a collection of resources as a single unit. With deployment stacks, users are able to perform a single delete operation on the stack that is applied to all of its managed resources rather than having to go one-by-one or scope-by-scope to perform that delete. More surgically, a user can also choose to delete a subset of managed resources by removing their definition from the bicep or ARM template that defines the state of the stack. This capability is extremely powerful, and it is also what makes updating a stack feel risky. A change to your template does not just add or modify resources. Depending on the &lt;CODE&gt;actionOnUnmanage&lt;/CODE&gt; setting, it can also remove resources from the stack's management, or delete them outright.&lt;/P&gt;
&lt;P&gt;Until now, the only way to know for certain what a stack update would do was to run it. For teams running production estates on stacks, that is an uncomfortable place to be.&lt;/P&gt;
&lt;P&gt;Stacks What-if answers the following questions before you deploy changes:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;What is about to happen to my resources?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;What resources will be deleted?&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;What is included&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Stacks What-if&lt;/STRONG&gt; at resource group, subscription, and management group scope, in Azure CLI, Azure PowerShell, and the &lt;A href="https://learn.microsoft.com/azure/developer/intro/azure-developer-overview" target="_blank" rel="noopener"&gt;Azure SDKs&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Detach and Delete changes&lt;/STRONG&gt;, so you can see which resources are about to leave the stack's management or be removed from Azure.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Standard change types on managed resources&lt;/STRONG&gt;, such as create, modify, and delete, including property level diff detail.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Noise reduction, enabled in all regions&lt;/STRONG&gt;, for more accurate results, with false positives (aka noise) removed from the Stacks What-if response.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Stacks What-If Result as a New Resource Type&lt;/STRONG&gt;, which you can reference by URI and use as an approval artifact in a pipeline.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;What Stacks What-if reports&lt;/H2&gt;
&lt;P&gt;Stacks What-if evaluates your template against the current state of the resources the stack manages, and reports each one as a change type. It makes no changes to your resources.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Symbol&lt;/th&gt;&lt;th&gt;Change type&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;CODE&gt;+&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Create&lt;/td&gt;&lt;td&gt;The resource doesn't exist and is created.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;CODE&gt;~&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Modify&lt;/td&gt;&lt;td&gt;The resource exists and some properties change.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;CODE&gt;=&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;NoChange&lt;/td&gt;&lt;td&gt;The resource exists and isn't changed.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;CODE&gt;-&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Delete&lt;/td&gt;&lt;td&gt;The resource is removed from the stack and deleted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;CODE&gt;v&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Detach&lt;/td&gt;&lt;td&gt;The resource is removed from the stack's management but isn't deleted from Azure.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;CODE&gt;!&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Unsupported&lt;/td&gt;&lt;td&gt;The resource isn't supported for what-if evaluation.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;That list is specific to stacks, and it is not the same set you get from deployment what-if. Detach and Delete are the two that matter most here (e.g. a resource you removed from your template is about to leave the stack's management, or be deleted outright), and they are the reason this feature exists. They tell you which resources are affected before you deploy, not after.&lt;/P&gt;
&lt;H2&gt;The one thing to know if you're coming from deployments&lt;/H2&gt;
&lt;P&gt;If you already use what-if for regular Bicep or ARM template deployments, there is one difference worth internalizing.&lt;/P&gt;
&lt;P&gt;For a standard deployment, what-if is an &lt;STRONG&gt;operation&lt;/STRONG&gt;. You run it, Azure returns the predicted changes, and nothing persists.&lt;/P&gt;
&lt;P&gt;For a deployment stack, Stacks What-if creates a &lt;STRONG&gt;Stacks What-If Resource&lt;/STRONG&gt;, which stores the Stacks What-If response. The result is a standalone Azure resource of type &lt;CODE&gt;Microsoft.Resources/deploymentStacksWhatIfResults&lt;/CODE&gt;. You give it a name, it gets its own resource ID, and it references the stack it was evaluated against through &lt;CODE&gt;properties.deploymentStackResourceId&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;That means a Stacks What-If Resource ID looks like this:&lt;/P&gt;
&lt;PRE class="lia-code-sample language-output" tabindex="0" contenteditable="false" data-lia-code-value="/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Resources/deploymentStacksWhatIfResults/{what-if-result-name}"&gt;&lt;CODE&gt;/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Resources/deploymentStacksWhatIfResults/{what-if-result-name}&lt;/CODE&gt;&lt;/PRE&gt;
&lt;H2&gt;Get started running Stacks What-if&lt;/H2&gt;
&lt;P&gt;Azure CLI, at resource group scope:&lt;/P&gt;
&lt;PRE class="lia-code-sample language-azurecli" tabindex="0" contenteditable="false" data-lia-code-value="az stack-whatif group create \
  --name &amp;quot;my-preview&amp;quot; \
  --resource-group &amp;quot;my-rg&amp;quot; \
  --stack-id &amp;quot;/subscriptions/&amp;lt;sub-id&amp;gt;/resourceGroups/my-rg/providers/Microsoft.Resources/deploymentStacks/my-stack&amp;quot; \
  --template-file &amp;quot;main.bicep&amp;quot; \
  --action-on-unmanage &amp;quot;detachAll&amp;quot; \
  --deny-settings-mode &amp;quot;none&amp;quot; \
  --retention-interval &amp;quot;PT3H&amp;quot;"&gt;&lt;CODE&gt;az stack-whatif group create \
  --name "my-preview" \
  --resource-group "my-rg" \
  --stack-id "/subscriptions/&amp;lt;sub-id&amp;gt;/resourceGroups/my-rg/providers/Microsoft.Resources/deploymentStacks/my-stack" \
  --template-file "main.bicep" \
  --action-on-unmanage "detachAll" \
  --deny-settings-mode "none" \
  --retention-interval "PT3H"&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Azure PowerShell:&lt;/P&gt;
&lt;PRE class="lia-code-sample language-azurepowershell" tabindex="0" contenteditable="false" data-lia-code-value="New-AzResourceGroupDeploymentStackWhatIfResult `
  -Name &amp;quot;my-preview&amp;quot; `
  -ResourceGroupName &amp;quot;my-rg&amp;quot; `
  -StackResourceId &amp;quot;&amp;lt;stack-resource-id&amp;gt;&amp;quot; `
  -TemplateFile &amp;quot;main.bicep&amp;quot; `
  -ActionOnUnmanage &amp;quot;DetachAll&amp;quot; `
  -DenySettingsMode &amp;quot;None&amp;quot; `
  -RetentionInterval &amp;quot;PT3H&amp;quot;"&gt;&lt;CODE&gt;New-AzResourceGroupDeploymentStackWhatIfResult `
  -Name "my-preview" `
  -ResourceGroupName "my-rg" `
  -StackResourceId "&amp;lt;stack-resource-id&amp;gt;" `
  -TemplateFile "main.bicep" `
  -ActionOnUnmanage "DetachAll" `
  -DenySettingsMode "None" `
  -RetentionInterval "PT3H"&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Real output from a Stacks What-if run against a demo stack. The legend maps each symbol to a change type, then each managed resource is listed with the property changes underneath it:&lt;/P&gt;
&lt;img /&gt;&lt;img /&gt;&lt;img /&gt;
&lt;P&gt;Subscription and management group scopes work the same way, using&amp;nbsp;&lt;CODE&gt;az stack-whatif sub&lt;/CODE&gt; and &lt;CODE&gt;az stack-whatif mg&lt;/CODE&gt;, or the &lt;CODE&gt;New-AzSubscriptionDeploymentStackWhatIfResult&lt;/CODE&gt; and &lt;CODE&gt;New-AzManagementGroupDeploymentStackWhatIfResult&lt;/CODE&gt; cmdlets.&lt;/P&gt;
&lt;P&gt;A detail that is easy to miss: the stack does not have to exist yet. If it doesn't, Stacks What-if reports the stack itself as a new resource, so you can preview the very first deployment of a stack before you create anything.&lt;/P&gt;
&lt;H2&gt;Using it in a pipeline&lt;/H2&gt;
&lt;P&gt;The durability of a Stacks What-If Resource is what makes this useful in CI. A pattern that works well:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;On a pull request, run Stacks What-if against the target stack and give the result a name that includes the build or PR number.&lt;/LI&gt;
&lt;LI&gt;Post the output, or a link to the result, as PR feedback so a reviewer sees the predicted changes next to the template diff that caused them.&lt;/LI&gt;
&lt;LI&gt;Gate the deploy stage on approval. If someone wants to re-check before approving, they retrieve the same stored result rather than rerunning the evaluation and hoping it matches.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Point 3 is the part that's genuinely different. With deployment what-if you get output in a log, and if you want it again you rerun and hope nothing drifted underneath you. With a Stacks What-If Resource you retrieve the exact evaluation the reviewer looked at.&lt;/P&gt;
&lt;P&gt;Set the retention interval to cover your review window and no longer. &lt;CODE&gt;PT3H&lt;/CODE&gt; gets cleaned up for you, so it's a good default for per pull request runs.&lt;/P&gt;
&lt;H2&gt;Resources&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks-what-if" target="_blank" rel="noopener"&gt;Preview deployment stack changes with what-if&lt;/A&gt;. The documentation for what is being announced here. Change types, running Stacks What-if at each scope, retrieving and deleting Stacks What-If Resources, and noise reduction.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks" target="_blank" rel="noopener"&gt;Create and deploy Azure deployment stacks in Bicep&lt;/A&gt;. The main deployment stacks article, if you are new to stacks or want a refresher on &lt;CODE&gt;actionOnUnmanage&lt;/CODE&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-resource-manager/bicep/deploy-what-if" target="_blank" rel="noopener"&gt;Preview Bicep deployment changes by using what-if&lt;/A&gt;. What-if for standard template deployments. This is the separate, existing feature described earlier, included here for comparison rather than as part of this release.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Tell us what you think&lt;/H2&gt;
&lt;P&gt;This feature exists because people filed issues and kept talking to us about them. That has not changed. If Stacks What-if reports something that looks wrong, or the output is awkward in your pipeline, open an issue in &lt;A href="https://github.com/Azure/deployment-stacks/issues" target="_blank" rel="noopener"&gt;Azure/deployment-stacks&lt;/A&gt;. We read them, and several are already shaping what we do next.&lt;/P&gt;</description>
      <pubDate>Tue, 18 Aug 2026 15:20:36 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/now-generally-available-what-if-for-azure-deployment-stacks/ba-p/4547614</guid>
      <dc:creator>torreyt</dc:creator>
      <dc:date>2026-08-18T15:20:36Z</dc:date>
    </item>
    <item>
      <title>Introducing Compliance Substate for Azure Policy Exemptions!</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/introducing-compliance-substate-for-azure-policy-exemptions/ba-p/4541703</link>
      <description>&lt;P&gt;When a policy is applied, some resources in scope may need to be temporarily exempted from enforcement, whether it be during a migration, an incident, or while an app team works through its compliance requirements.&lt;/P&gt;
&lt;P&gt;However, the moment you grant an exemption, that resource's compliance result flips to “Exempt” and that's all you see. The underlying state is hidden behind the exemption. This leads to questions like, is the resource violating the policy right now? Or has it quietly come into compliance since the exemption was granted, and can I safely remove the exemption? The “Exempt” status alone can't tell you.&lt;/P&gt;
&lt;P&gt;To solve this, we've introduced a new &lt;STRONG&gt;compliance substate property&lt;/STRONG&gt; on Azure Policy compliance results. This property tells you what the resource's compliance state would be if the exemption were removed so you never lose sight of the underlying state.&lt;/P&gt;
&lt;H3&gt;Before and after&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Before&lt;/STRONG&gt;: Your compliance report lists 40 resources, all showing "Exempt" and nothing more. You have no idea which exemptions still matter, so you either leave them all in place or audit each one by hand.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;After:&amp;nbsp;&lt;/STRONG&gt;The same 40 resources still show Exempt, but now each carries a substate - 28 Compliant (safe to retire) and 12 non-compliant (still needed). Your cleanup list just wrote itself.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;How to see the sub-state&lt;/H3&gt;
&lt;P&gt;The primary way you will interact with Compliance Substate is right where you already review compliance today, the &lt;STRONG&gt;Compliance&lt;/STRONG&gt; tab of the Azure Policy blade. It surfaces as an optional column in the resource compliance table of an assignment's compliance report.&lt;/P&gt;
&lt;H3&gt;How to show the Compliance Substate column&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Open the assignment's compliance report.&lt;/STRONG&gt; In the Azure portal, go to &lt;STRONG&gt;Policy &amp;gt; Compliance&lt;/STRONG&gt;, then open the report of the assignment you want to view.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Click on the “Edit Column” button &lt;/STRONG&gt;to edit which columns are shown by default.&amp;nbsp;&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3. Add the new property.&amp;nbsp;&lt;/STRONG&gt;In Edit Options, add a new property and select the “Compliance sub state” and then select save. You can drag to reorder the columns.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4. Read the results.&lt;/STRONG&gt; Exempt resources now show &lt;STRONG&gt;Compliant&lt;/STRONG&gt; or &lt;STRONG&gt;Non-compliant&lt;/STRONG&gt;. Non-exempt resources show blank for compliance substate&lt;STRONG&gt;. &lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Additionally, you can click on the “Waiver” or "Mitigated" status under the "Compliance details" column and the details tab will include the compliance substate by default.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Querying the property&lt;/H3&gt;
&lt;P&gt;The portal column is perfect for reviewing a single assignment. For org wide exemption audits you will want to query across every subscription at once. Compliance Substate is also surfaced in &lt;STRONG&gt;Azure Resource Graph (ARG)&lt;/STRONG&gt; under properties.stateDetails.complianceSubState, so you can build reports, dashboards, and automation on top of it.&lt;/P&gt;
&lt;P&gt;The core query. List every exempted resource and its substate:&lt;/P&gt;
&lt;LI-CODE lang="kusto"&gt;policyresources
| where type == "microsoft.policyinsights/policystates"
| extend complianceState = tostring(properties.complianceState)
| extend complianceSubState = tostring(properties.stateDetails.complianceSubState),
         resourceId = tostring(properties.resourceId),
         policyAssignmentId = tostring(properties.policyAssignmentId)
| where complianceState == "Exempt"
| project resourceId, policyAssignmentId, complianceState, complianceSubState
&lt;/LI-CODE&gt;
&lt;H3&gt;Conclusion&lt;/H3&gt;
&lt;P&gt;Exemptions will always be part of governance, but they no longer have to be a blind spot. Compliance Substate shows you what is really happening underneath every exemption, so you can remediate resources, confirm they are green, and retire exemptions with confidence instead of guesswork. Give it a try and let us know what you think by sharing your thoughts to &lt;A href="mailto:policypm@microsoft.com" target="_blank" rel="noopener"&gt;policypm@microsoft.com&lt;/A&gt;!&lt;/P&gt;
&lt;H3&gt;Other resources&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/overview" target="_blank"&gt;Azure Policy overview&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/concepts/exemption-structure" target="_blank"&gt;Policy exemption structure&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/how-to/get-compliance-data" target="_blank"&gt;Get compliance data with Azure Resource Graph&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language" target="_blank"&gt;Azure Resource Graph query language&lt;/A&gt;&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Tue, 28 Jul 2026 23:26:47 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/introducing-compliance-substate-for-azure-policy-exemptions/ba-p/4541703</guid>
      <dc:creator>stevenbucher</dc:creator>
      <dc:date>2026-07-28T23:26:47Z</dc:date>
    </item>
    <item>
      <title>Introducing Kubernetes-Native Policy Validation with CEL and VAP in Azure Policy</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/introducing-kubernetes-native-policy-validation-with-cel-and-vap/ba-p/4534585</link>
      <description>&lt;P&gt;Azure Policy for Kubernetes now supports&amp;nbsp;&lt;A href="https://open-policy-agent.github.io/gatekeeper/website/docs/validating-admission-policy/" target="_blank" rel="noopener"&gt;Gatekeeper’s integration&lt;/A&gt; with native Kubernetes Validating Admission Policy (VAP) using Common Expression Language (CEL)! This integration leverages the new VAP feature introduced in Kubernetes 1.30, providing a more efficient, reliable and in-process way to enforce policies.&lt;/P&gt;
&lt;P&gt;This integration brings lower latency for admission decisions, simpler constraint template authoring—for the first time – allows you to enable stronger fail-close behavior to prevent non-compliant components getting created or updated in your environment . And you keep all the Azure Policy benefits you already rely on like centralized assignment, scope management, safe rollout control, and governance at scale.&lt;/P&gt;
&lt;P&gt;Previously, Azure Policy for Kubernetes only supported on OPA Rego-based evaluation through an admission webhook flow:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;A request is sent to the Kubernetes API server.&lt;/LI&gt;
&lt;LI&gt;The request is forwarded to Gatekeeper.&lt;/LI&gt;
&lt;LI&gt;Gatekeeper enforces resources using constraint template written in Rego.&lt;/LI&gt;
&lt;LI&gt;The result is returned to the API server.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;Native Kubernetes Validation with Common Expression Language (CEL)&lt;/H2&gt;
&lt;P&gt;Policy expressions can be written in CEL syntax, a lightweight and expressive language that Kubernetes designed specifically for this validation context. Here's what changes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; In-tree evaluation&lt;/STRONG&gt;: Policy rules run inside the Kubernetes API server itself, not in an external webhook service. This means:&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Lower latency&lt;/STRONG&gt;: No round-trip delay to an external service. Admission decisions are made faster because evaluation happens in-process.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Better reliability&lt;/STRONG&gt;: Validation doesn't depend on a separate service remaining healthy. If the VAP controller finds a violating resource, the PUT request will be denied, resulting in a fail-close scenario.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Getting Azure Policy Benefits with CEL&lt;/P&gt;
&lt;P&gt;Kubernetes-native enforcement does not replace Azure Policy governance capabilities. It strengthens them. Azure Policy becomes the governance and deployment layer, while CEL becomes the validation logic. Here's what that means:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;CEL handles the validation&lt;/STRONG&gt;: You write lightweight, readable expressions that run natively in Kubernetes. CEL is simpler than Rego and aligns with Kubernetes' own validation framework.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Policy handles the governance&lt;/STRONG&gt;: Assignments, versioning, compliance tracking, safe rollouts, overrides, and multi-cluster management all happen through Azure Policy. You get enterprise governance without extra operational overhead.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Your First CEL Policy with Azure Policy&lt;/H2&gt;
&lt;P&gt;Here's the key insight:&amp;nbsp;&lt;STRONG&gt;you don't write Azure Policy definitions in CEL&lt;/STRONG&gt;. Instead, you write a CEL constraint template, package it inside an Azure Policy definition, and deploy it through Azure Policy.&lt;/P&gt;
&lt;P&gt;Think of it as two layers:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Layer 1: CEL Constraint Template&lt;/STRONG&gt; — The Kubernetes validation logic you write&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Layer 2: Azure Policy Definition&lt;/STRONG&gt; — The wrapper that adds assignments, versioning, compliance tracking, and safe deployment&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Real Example: Limit Deployment Replicas&lt;/H3&gt;
&lt;P&gt;Let's walk through a concrete scenario. Your platform team wants to prevent developers from creating Deployments with more than 5 replicas—a common guard rail for dev/test environments to control resource consumption.&lt;/P&gt;
&lt;P&gt;- replicas: 1 through replicas: 5 — allowed&lt;/P&gt;
&lt;P&gt;- replicas: 6 or higher — denied&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 1: Write the CEL constraint template&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You write a Gatekeeper ConstraintTemplate using the K8sNativeValidation engine. The CEL expression itself is a single, readable line:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="yaml"&gt;apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
  name: k8se2etestcelmaxdeployreplicas
spec:
  crd:
    spec:
      names:
        kind: K8sE2ETestCelMaxDeployReplicas
      validation:
       # Schema for the `parameters` field
        openAPIV3Schema:
          type: object
          properties:
            message:
              type: string
  targets:
    - target: admission.k8s.gatekeeper.sh
      code:
      - engine: K8sNativeValidation
        source:
          validations:
          - expression: "object.spec.replicas &amp;lt;= 5"
            message: "message example"&lt;/LI-CODE&gt;
&lt;P&gt;The key part is the engine: K8sNativeValidation block. This tells Gatekeeper to generate a Kubernetes ValidatingAdmissionPolicy resource from this template, so evaluation runs inside the API server rather than through the Gatekeeper webhook. The CEL expression object.spec.replicas &amp;lt;= 5 is evaluated natively at admission time.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 2: Package the CEL template into an Azure Policy definition&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You then will need to base64-encode the constraint template (you can use an online tool or a local tool to do this) and embed the encoded content in an Azure Policy custom definition using sourceType: Base64Encoded. The full custom policy definition structure, matching the real format Azure Policy expects:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "policyType": "Custom",
  "mode": "Microsoft.Kubernetes.Data",
  "displayName": "Ensure deployment replicas are less than or equal to 5 in Kubernetes cluster",
  "policyRule": {
    "if": {
      "field": "type",
      "in": [
        "Microsoft.ContainerService/managedClusters"
      ]
    },
    "then": {
      "effect": "[parameters('effect')]",
      "details": {
        "templateInfo": {
          "sourceType": "Base64Encoded",
          "content": "&amp;lt;BASE64_ENCODED_CONSTRAINT_TEMPLATE&amp;gt;"
        },
        "apiGroups": [
          "apps"
        ],
        "kinds": [
          "Deployment"
        ],
        "namespaces": "[parameters('namespaces')]",
        "excludedNamespaces": "[parameters('excludedNamespaces')]",
        "labelSelector": "[parameters('labelSelector')]",
        "values": {
          "message": "[parameters('message')]"
        }
      }
    }
  },
  "parameters": {
    "effect": {
      "type": "String",
      "allowedValues": [
        "audit",
        "deny",
        "disabled"
      ],
      "defaultValue": "audit"
    },
    "namespaces": {
      "type": "Array",
      "defaultValue": []
    },
    "labelSelector": {
      "type": "Object",
      "defaultValue": {}
    },
    "message": {
      "type": "String"
    }
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;A few things worth noting in this structure:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;sourceType: Base64Encoded - Azure Policy stores your constraint template as base64 content inline in the policy definition. When Azure Policy deploys to your cluster, it decodes and installs the template automatically.&lt;/LI&gt;
&lt;LI&gt;apiGroups: ["apps"] and kinds: ["Deployment"] - These scope the policy to only evaluate Kubernetes Deployment resources in the apps API group. Pods, Services, and other resources are unaffected.&lt;/LI&gt;
&lt;LI&gt;excludedNamespaces - System namespaces like kube-system and gatekeeper-system are excluded by default, so the policy doesn't interfere with cluster infrastructure.&lt;/LI&gt;
&lt;LI&gt;effect: audit (default) - The policy starts in audit mode, flagging violations without blocking them. Switch to deny when you're ready to enforce.&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-SPOILER label="Important"&gt;
&lt;P&gt;Right now only audit, deny, and disabled Policy effects are supported.&lt;/P&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can create the policy definition via the Azure portal, Azure CLI, or the Azure Policy VS Code extension.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 3: Assign the policy to your AKS clusters&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Now you can assign this policy through Azure Policy to your clusters:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;In the Azure portal, go to Azure Policy &amp;gt; Definitions.&lt;/LI&gt;
&lt;LI&gt;Find your policy by name (e.g., "Ensure deployment replicas are less than or equal to 5").&lt;/LI&gt;
&lt;LI&gt;Click Assign.&lt;/LI&gt;
&lt;LI&gt;Set the Scope to the management group, subscription, or resource group containing your AKS clusters.&lt;/LI&gt;
&lt;LI&gt;Set the effect parameter to audit to start, then graduate to deny once you've validated the policy behavior.&lt;/LI&gt;
&lt;LI&gt;Click Create.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Azure Policy deploys the CEL-based constraint template to all clusters in scope. Within a few minutes, the Azure Policy add-on decodes the template, installs it on each cluster, and Gatekeeper generates the corresponding ValidatingAdmissionPolicy resource. From that point on, the Kubernetes API server evaluates every new Deployment admission request against your CEL rule directly. You can target different clusters or namespaces with different assignments and apply overrides for exceptions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 4: Monitor compliance through Azure Policy&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In the Azure Policy console, you see real-time compliance across all your clusters:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Non-compliant Deployments (those with replicas &amp;gt; 5) appear in the Compliance view.&lt;/LI&gt;
&lt;LI&gt;You can drill down by policy, cluster, or namespace to see which Deployments are violating the limit.&lt;/LI&gt;
&lt;LI&gt;While in audit mode, existing violations are surfaced without blocking anything—giving you a clear picture before switching to deny.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Availability and prerequisites&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;Supported Kubernetes version: AKS clusters running Kubernetes v1.30 or later (VAP became generally available in K8s v1.30).&lt;/LI&gt;
&lt;LI&gt;Gatekeeper version: Azure Policy add-on includes Gatekeeper v3.17.0 or later, which supports VAP and CEL policy generation.&lt;/LI&gt;
&lt;LI&gt;Azure Policy Add-on: The Azure Policy add-on for Kubernetes must be installed on your clusters. See &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/governance/policy/concepts/policy-for-kubernetes" target="_blank" rel="noopener"&gt;Azure Policy for Kubernetes documentation&lt;/A&gt;for installation instructions.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This is currently generally available and can be used to enforce policies in your Kubernetes clusters today.&lt;/P&gt;
&lt;H2&gt;Roadmap&lt;/H2&gt;
&lt;P&gt;We are actively working to include more built in Azure Policies for Azure Kubernetes service with the constraint template built with CEL.&lt;/P&gt;
&lt;H2&gt;Resources&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/governance/policy/concepts/policy-for-kubernetes" target="_blank" rel="noopener"&gt;Azure Policy for Kubernetes&lt;/A&gt;: Full documentation on how Azure Policy integrates with Kubernetes, including built-in definitions and assignment workflows.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://kubernetes.io/docs/reference/using-api/cel/" target="_blank" rel="noopener"&gt;Common Expression Language in Kubernetes&lt;/A&gt;: Reference guide for authoring CEL expressions used in Validating Admission Policies.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;Conclusion&lt;/H2&gt;
&lt;P&gt;Azure Policy for Kubernetes now lets you bring Kubernetes-native CEL validation into your enterprise governance workflow.&lt;/P&gt;
&lt;P&gt;The mental model is simple: &lt;STRONG&gt;CEL handles what to validate, Azure Policy handles how to govern it.&lt;/STRONG&gt; You write clean, readable CEL expressions that run natively in your Kubernetes API server. Azure Policy wraps those expressions and handles the hard parts of enterprise governance—assignments across management hierarchies, versioning, compliance tracking, safe rollouts, and overrides.&lt;/P&gt;
&lt;P&gt;Whether you're enforcing container registries, requiring security contexts, or validating resource configurations, you now have a path to do it natively in Kubernetes with enterprise governance backing it up.&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2026 19:27:12 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/introducing-kubernetes-native-policy-validation-with-cel-and-vap/ba-p/4534585</guid>
      <dc:creator>stevenbucher</dc:creator>
      <dc:date>2026-07-23T19:27:12Z</dc:date>
    </item>
    <item>
      <title>Azure landing zone (ALZ) enters its next chapter</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/azure-landing-zone-alz-enters-its-next-chapter/ba-p/4533520</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;Azure landing zone (ALZ) is now maintained by the Azure Migrate team. Nothing has changed in relation to getting support and making requests; still head to&amp;nbsp;&lt;A href="https://aka.ms/alz/issues" target="_blank" rel="noopener"&gt;aka.ms/alz/issues&lt;/A&gt; (GitHub) and file your ask.&lt;/P&gt;
&lt;P&gt;ALZ continues to be open-source, maintained by the Azure Migrate team 👍&lt;/P&gt;
&lt;P&gt;This is only the Platform landing zone side, where ALZ operates as detailed here &lt;A href="https://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/?tabs=platvsapp#platform-landing-zone-vs-application-landing-zones" target="_blank" rel="noopener"&gt;Platform landing zone vs. application landing zones&lt;/A&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Hey all 👋&lt;/P&gt;
&lt;P&gt;I’ve got a genuinely exciting update to share today, and it’s one that’s been a long time coming:&amp;nbsp;&lt;STRONG&gt;Azure landing zone (ALZ)&lt;/STRONG&gt;, maintained by the Azure Migrate product team.&lt;/P&gt;
&lt;H3&gt;A bit of history first&lt;/H3&gt;
&lt;P&gt;For the past five or so years, ALZ has been built completely in the open, in the open source repos, in community calls, in issues, in PRs, together with an incredible group of customers, partners, and Microsoft folks who cared enough to keep showing up and making it better. This has helped many customers start their Azure Journey with the right Platform landing zone. That community effort is the entire reason ALZ is what it is today, and it deserves a moment of recognition before we talk about what’s changing.&lt;/P&gt;
&lt;H3&gt;So, what’s actually changing?&lt;/H3&gt;
&lt;P&gt;ALZ continues to remain community driven, open source initiative now maintained by Azure Migrate team.&lt;/P&gt;
&lt;P&gt;For you, practically?&amp;nbsp;&lt;STRONG&gt;Nothing changes.&lt;/STRONG&gt; The GitHub repos, the modules, the way you consume ALZ today all stay exactly as they are. So that you can continue to deploy high-quality Platform landing zones for you and your customers.&lt;/P&gt;
&lt;P&gt;What’s changing is who’s steering the ship. If you’ve got an issue to raise, that still happens exactly where it always has, over at&amp;nbsp;&lt;A href="https://aka.ms/alz/issues" target="_blank" rel="noopener"&gt;aka.ms/alz/issues&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;What about us?&lt;/H3&gt;
&lt;P&gt;I want to be upfront about this part: myself (Jack Tracey), Matt White, Jared Holgate, and Zach Trocinski are no longer involved in the day-to-day of ALZ. No more issue triage, no more day-to-day operations from us. That responsibility now sits with the Azure Migrate team.&lt;/P&gt;
&lt;P&gt;We’re not disappearing entirely, though. Over the last couple of months we’ve been running a proper handover, and we’ll continue to be around behind the scenes for those moments when the Azure Migrate team needs a bit of extra context we didn’t manage to pass on during that process.&lt;/P&gt;
&lt;P&gt;And honestly? You’re in great hands. The Azure Migrate team already know ALZ inside and out. They’ve been working alongside us building the&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/migrate/platform-landing-zone?view=migrate" target="_blank" rel="noopener"&gt;Azure Migrate agent’s platform landing zone creation experience&lt;/A&gt;, which uses ALZ under the hood. This isn’t a handover to strangers, it’s a handover to people who’ve already been in the engine room with us.&lt;/P&gt;
&lt;H3&gt;A personal thank you&lt;/H3&gt;
&lt;P&gt;Before I move on, I wanted to add something a bit more personal.&lt;/P&gt;
&lt;P&gt;ALZ is one of the things I’m proudest of from my time at Microsoft so far. I’ve built and led it over the past five or six years, surrounded by genuinely great people who helped shape it, and backed by an amazing community, customer, and partner base who supported us every step of the way to make it the success it is today.&lt;/P&gt;
&lt;P&gt;So, while I’m stepping away and I’m no longer involved in the day-to-day, ALZ will always hold a special place for me. I’ll forever be happy to chat about it socially. It’s something I still have real passion for, and that’s not going away just because my day job has moved on.&lt;/P&gt;
&lt;P&gt;That said, I’m taking those learnings and that passion into other things at Microsoft, including now focusing on&amp;nbsp;&lt;STRONG&gt;AVM (Azure Verified Modules)&lt;/STRONG&gt; alongside Jared and several other great folks. We’ll have some announcements of a similar nature to share on that front soon, so watch this space 😁&lt;/P&gt;
&lt;H3&gt;Thank you 🙌&lt;/H3&gt;
&lt;P&gt;And finally, the wider thanks. Alongside Matt White, Jared Holgate, and Zach Trocinski, huge thanks to: Paul Grimley, Rob Kuehfus, Sacha Narinx, Seif Bassem, Arjen Huitema, Nelson Pereira, Paulo Alves Oliveira Jr., Vishal Mehrotra, Charlie Grabiaud, Simona Tarantola, Bruno Gabrielli, Luke Taylor, Adam Tuckwell, and Kevin Rowlandson.&lt;/P&gt;
&lt;P&gt;A special shout-out too to Remo Leone Laudo, Rhys Ash, Jamie Pla, Igor Jovovic, and Haflidi Fridthjofsson, who will continue to contribute to the ALZ IaC modules alongside their day jobs as CSAs, as and when they can 🙂&lt;/P&gt;
&lt;P&gt;And to everyone else who’s contributed to ALZ over the past five years or so, through code, issues, feedback, conversations, or just using it and telling us what worked and what didn’t, thank you. This milestone is yours as much as anyone’s.&lt;/P&gt;
&lt;P&gt;Here’s to the next chapter for ALZ. 🎉&lt;/P&gt;</description>
      <pubDate>Tue, 28 Jul 2026 10:22:02 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/azure-landing-zone-alz-enters-its-next-chapter/ba-p/4533520</guid>
      <dc:creator>jtracey93msft</dc:creator>
      <dc:date>2026-07-28T10:22:02Z</dc:date>
    </item>
    <item>
      <title>ARM MCP Server: A Catalog of 24 PoCs</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/arm-mcp-server-a-catalog-of-24-pocs/ba-p/4519069</link>
      <description>&lt;H2 data-line="6"&gt;Introduction&lt;/H2&gt;
&lt;P data-line="8"&gt;The&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/introducing-the-azure-resource-manager-mcp-server/4517521" target="_blank" rel="noopener" data-href="https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/introducing-the-azure-resource-manager-mcp-server/4517521"&gt;Azure Resource Manager MCP Server&lt;/A&gt;&amp;nbsp;is a remote Model Context Protocol server that gives AI agents first-class access to Azure infrastructure operations. Six tools is a small surface area, but ARM and Azure Resource Graph are not small control planes. To explore what that surface area can support in practice, we built the&amp;nbsp;&lt;A href="https://github.com/jvargh/arm-mcp-poc-catalog" target="_blank" rel="noopener" data-href="https://github.com/jvargh/arm-mcp-poc-catalog"&gt;arm-mcp-poc-catalog&lt;/A&gt;: 24 self-contained proof-of-concept agents spanning enterprise governance, FinOps, platform engineering, and Site Reliability Engineering.&lt;/P&gt;
&lt;P data-line="8"&gt;This post is in two parts. &lt;STRONG&gt;Part 1 &lt;/STRONG&gt;summarizes what the ARM MCP Server offers. &lt;STRONG&gt;Part 2 &lt;/STRONG&gt;walks through the catalog and how to use it.&lt;/P&gt;
&lt;H2 data-line="12"&gt;Part 1. What the ARM MCP Server Offers&lt;/H2&gt;
&lt;H3 data-line="14"&gt;Architecture&lt;/H3&gt;
&lt;P data-line="16"&gt;The ARM MCP Server is a remote MCP server hosted at https://mcp.management.azure.com. There is no container to run, no sidecar to deploy, and no service principal to manage. Every operation executes in the context of the signed-in Azure user, so the agent's effective permissions are exactly the human's effective permissions, for both reads (ARG) and writes (ARM template deployments). Azure Policy assignments apply identically.&lt;/P&gt;
&lt;H3 data-line="18"&gt;The six tools&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;/th&gt;&lt;th&gt;Tool&lt;/th&gt;&lt;th&gt;Half&lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;generate_query&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Translate a natural-language ask into Azure Resource Graph KQL.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;validate_query&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Statically validate an ARG query before execution.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;execute_query&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Run an ARG query against the signed-in user's scope.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;create_template_deployment&lt;/td&gt;&lt;td&gt;Write&lt;/td&gt;&lt;td&gt;Submit an ARM template to a target resource group.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;get_arm_template_deployment_status&lt;/td&gt;&lt;td&gt;Write&lt;/td&gt;&lt;td&gt;Poll a deployment's progress, outputs, and errors.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;cancel_arm_template_deployment&lt;/td&gt;&lt;td&gt;Write&lt;/td&gt;&lt;td&gt;Abort an in-flight deployment.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="29"&gt;The toolset partitions cleanly into a read half (Azure Resource Graph) and a write half (Azure Resource Manager). The two halves compose: an agent can read the current state of the estate, decide what to change, deploy a template, and watch the result, all in a single conversation.&lt;/P&gt;
&lt;H3 data-line="31"&gt;Why this matters&lt;/H3&gt;
&lt;P data-line="33"&gt;Three properties make the ARM MCP Server qualitatively different from earlier "Azure SDK in a function" approaches:&lt;/P&gt;
&lt;OL data-line="35"&gt;
&lt;LI data-line="35"&gt;&lt;STRONG&gt;Identity inheritance.&lt;/STRONG&gt;&amp;nbsp;The agent operates as the user. There is no shared credential, no over-privileged service principal, and no escalation path from "the agent can read this" to "the agent can write that."&lt;/LI&gt;
&lt;LI data-line="36"&gt;&lt;STRONG&gt;Tenant-wide read in one query.&lt;/STRONG&gt; Azure Resource Graph indexes every resource type across every subscription the user can see. A single execute_query call can return all storage accounts in the tenant, or every public IP, or every VM by SKU, in seconds.&lt;/LI&gt;
&lt;LI data-line="37"&gt;&lt;STRONG&gt;Deterministic write surface.&lt;/STRONG&gt;&amp;nbsp;ARM templates are declarative, idempotent, and auditable. Every&amp;nbsp;create_template_deployment&amp;nbsp;produces a correlation ID and an entry in the activity log. The agent inherits all of that for free.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="39"&gt;Together, these properties move the practical question from&amp;nbsp;&lt;EM&gt;"can we let an agent touch our cloud?"&lt;/EM&gt;&amp;nbsp;to&amp;nbsp;&lt;EM&gt;"what is the most useful thing to put on top of these six tools?"&lt;/EM&gt; That is the question the PoC catalog tries to answer.&lt;/P&gt;
&lt;H2 data-line="43"&gt;Part 2. The PoC Catalog&lt;/H2&gt;
&lt;P data-line="45"&gt;The&amp;nbsp;&lt;A href="https://github.com/jvargh/arm-mcp-poc-catalog" target="_blank" rel="noopener" data-href="https://github.com/jvargh/arm-mcp-poc-catalog"&gt;arm-mcp-poc-catalog&lt;/A&gt;&amp;nbsp;is a public repository containing 24 proof-of-concept agents, organized into two batches of 12. Every PoC is a self-contained VS Code workspace with its own agent persona, deterministic skill, pre-canned ARG queries, frozen output templates, and ARM template stubs where applicable. Each PoC folder contains a&amp;nbsp;README.md, a&amp;nbsp;runbooks/&amp;nbsp;directory with a committed scope template and a gitignored values file, and the agent definition plus rules and output templates.&lt;/P&gt;
&lt;H3 data-line="47"&gt;The determinism contract&lt;/H3&gt;
&lt;P data-line="49"&gt;Before walking through the catalog, one design decision is worth calling out because it shows up in every PoC. The ARM MCP Server's generate_query tool is non-deterministic: the same prompt can produce slightly different KQL on different invocations, which produces different result sets, which would produce different remediation actions in a recurring agent.&lt;/P&gt;
&lt;P data-line="51"&gt;To make these PoCs safe for repeated use (weekly reports, on-call playbooks, pre-deploy gates), every PoC follows the same five-rule contract:&lt;/P&gt;
&lt;OL data-line="53"&gt;
&lt;LI data-line="53"&gt;ARG queries are&amp;nbsp;&lt;STRONG&gt;read literally from a&amp;nbsp;rules.yaml&amp;nbsp;file&lt;/STRONG&gt;, never authored by the LLM at runtime.&lt;/LI&gt;
&lt;LI data-line="54"&gt;Every query call is&amp;nbsp;validate_query&amp;nbsp;then&amp;nbsp;execute_query. Failed validations are marked&amp;nbsp;INVALID&amp;nbsp;and the agent does not retry or rewrite.&lt;/LI&gt;
&lt;LI data-line="55"&gt;Scope filters (subscription IDs, resource group names) are string-substituted from a separate values file.&lt;/LI&gt;
&lt;LI data-line="56"&gt;Output is a frozen markdown template with&amp;nbsp;{{placeholder}}&amp;nbsp;slots. No paraphrasing by the model.&lt;/LI&gt;
&lt;LI data-line="57"&gt;Run IDs follow&amp;nbsp;&amp;lt;POC-PREFIX&amp;gt;-{YYYYMMDD}-{scope}-{sha256(rules.yaml)[:8]}, so identical inputs produce identical IDs.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="59"&gt;The&amp;nbsp;generate_query&amp;nbsp;tool is still useful, but as a dev-time aid for drafting the KQL that gets checked into&amp;nbsp;rules.yaml, not as a runtime step in a recurring agent.&lt;/P&gt;
&lt;H3 data-line="61"&gt;Catalog: Enterprise PoCs (governance, FinOps, platform)&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;/th&gt;&lt;th&gt;PoC&lt;/th&gt;&lt;th&gt;Primary tools&lt;/th&gt;&lt;th&gt;What it does&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Tag Hygiene Czar&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Write&lt;/td&gt;&lt;td&gt;Finds resources missing required tags, generates a patch ARM template, deploys on approval.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Blast Radius Analyzer&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + What-if&lt;/td&gt;&lt;td&gt;Pre-deploy: cross-references an ARM template against current state to predict create/modify/replace/delete impact.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Cost Driver Finder&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Surfaces top cost-driving resources by region/owner/workload using ARG topology and tags.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Golden Path Provisioner&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Write&lt;/td&gt;&lt;td&gt;Templated provisioning of standard workload patterns with policy-aware defaults.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;IaC Drift Detector&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Compares deployed state to a Git-stored ARM/Bicep baseline and reports drift.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Incident Responder&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Write&lt;/td&gt;&lt;td&gt;Estate-wide impact assessment for a declared incident, with optional remediation deploys.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Policy What-If&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Simulates a proposed Azure Policy assignment against current resources to predict denials.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Estate Cartographer&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Generates a tenant-wide topology map (resources, dependencies, ownership) from ARG.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;ARM Template Fixer&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Write&lt;/td&gt;&lt;td&gt;Diagnoses a failed deployment, proposes a corrected template, redeploys on approval.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Crown-Jewels Security&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Identifies the small set of high-value resources (Key Vaults, prod databases, identities) and their exposure.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;FinOps Rightsizer&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Recommends SKU downshifts for under-utilized compute and data resources.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;ChatOps Bot&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Write&lt;/td&gt;&lt;td&gt;Slack/Teams-friendly wrapper exposing a curated subset of agent verbs to non-engineers.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3 data-line="78"&gt;Catalog: SRE PoCs (incident response, change safety, reliability)&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;/th&gt;&lt;th&gt;PoC&lt;/th&gt;&lt;th&gt;Primary tools&lt;/th&gt;&lt;th&gt;What it does&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Incident Triage&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Cancel&lt;/td&gt;&lt;td&gt;"First 60 seconds" change feed for the affected scope, with one-key cancel for in-flight deploys.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Change Freeze Enforcer&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Write gate&lt;/td&gt;&lt;td&gt;Intercepts deployments during freeze windows; requires break-glass justification logged to ticketing.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Pre-flight Safety&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Battery of health/dependency/capacity checks before any prod deployment.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Auto Rollback&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Write + Cancel&lt;/td&gt;&lt;td&gt;Watches a deploy; on failure or health-gate breach, cancels and applies last-known-good template.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Reliability Posture Scorecard&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Weighted scoring of ~15 reliability rules (zone redundancy, geo-replication, soft-delete, etc.) across a scope.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;SLO Deployment Gate&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Blocks deploys when the target service's error budget is exhausted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Capacity / Quota Guardian&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Tracks subscription/region quota headroom and warns before deploys would exceed it.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Blast Radius Simulator&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;"What if I drained this AZ?" or "what if this RG went away?" dependency simulation.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Stuck Deployment Janitor&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Cancel&lt;/td&gt;&lt;td&gt;Finds deployments stuck in&amp;nbsp;Running&amp;nbsp;past their SLA, summarizes, optionally cancels.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Runbook Executor&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Write&lt;/td&gt;&lt;td&gt;Parameterized ARM-template runbooks for routine ops (cert rotation, scale events, etc.).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Post-Incident Reconstructor&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read&lt;/td&gt;&lt;td&gt;Reconstructs an exact timeline of resource changes during an incident window for the postmortem.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Weekly Cleanup PRs&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Read + Write&lt;/td&gt;&lt;td&gt;Generates PRs for low-risk cleanup (orphaned NICs, unused public IPs, untagged dev resources).&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="95"&gt;SRE-PoC-5 (Reliability Posture Scorecard) is the reference implementation. Read it first to understand the determinism contract end to end: literal KQL, validate then execute, frozen template, deterministic run ID, and no deployment risk.&lt;/P&gt;
&lt;H3 data-line="97"&gt;Patterns that emerged across the 24 PoCs&lt;/H3&gt;
&lt;P data-line="99"&gt;Three patterns showed up repeatedly and are worth naming.&lt;/P&gt;
&lt;P data-line="101"&gt;&lt;STRONG&gt;Pattern 1: Read-only agents are 80% of the value and 5% of the risk.&lt;/STRONG&gt;&amp;nbsp;Tag hygiene reporting, blast-radius analysis, cost driver discovery, crown-jewels security posture, the reliability scorecard, post-incident reconstruction: none of these require the write half of the API. They turn ARG into a query layer the existing humans can interrogate in English. Most teams should start here.&lt;/P&gt;
&lt;P data-line="103"&gt;&lt;STRONG&gt;Pattern 2: Write-capable agents need three things, not one.&lt;/STRONG&gt;&amp;nbsp;Every deploy-capable PoC in the catalog gates&amp;nbsp;create_template_deployment&amp;nbsp;behind (a) an explicit user verb such as&amp;nbsp;apply&amp;nbsp;or&amp;nbsp;remediate, (b) a confirm step that shows the resolved template and scope, and (c) a global freeze flag in the scope config that is checked before any other logic runs. The change-freeze enforcer (SRE-PoC-2) is itself one of the PoCs and can be wired in front of any other write-capable agent.&lt;/P&gt;
&lt;P data-line="105"&gt;&lt;STRONG&gt;Pattern 3: The "what changed" loop is the killer feature.&lt;/STRONG&gt;&amp;nbsp;ARG can answer&amp;nbsp;&lt;EM&gt;"what does my estate look like right now?"&lt;/EM&gt;&amp;nbsp;in seconds. Pair that with deployment status polling and you get&amp;nbsp;&lt;EM&gt;"what just changed, by whom, and is it still in flight?"&lt;/EM&gt;, which is the foundation for incident triage, post-incident reconstruction, auto-rollback, and the stuck-deployment janitor. None of these were practical before the MCP server collapsed the auth, ARG, and ARM client stack into a single tool surface.&lt;/P&gt;
&lt;H3 data-line="107"&gt;Getting started with any PoC&lt;/H3&gt;
&lt;OL data-line="109"&gt;
&lt;LI data-line="109"&gt;&lt;STRONG&gt;Install the ARM MCP Server&lt;/STRONG&gt;&amp;nbsp;once: open&amp;nbsp;&lt;A href="https://aka.ms/JoinARMMCP" target="_blank" rel="noopener" data-href="https://aka.ms/JoinARMMCP"&gt;https://aka.ms/JoinARMMCP&lt;/A&gt;&amp;nbsp;in VS Code and sign in.&lt;/LI&gt;
&lt;LI data-line="110"&gt;&lt;STRONG&gt;Verify Azure access&lt;/STRONG&gt;&amp;nbsp;with&amp;nbsp;az login. Read-only PoCs need Reader plus Resource Graph Reader on the target scope. Deploy-capable PoCs additionally need Contributor on the target resource groups.&lt;/LI&gt;
&lt;LI data-line="111"&gt;&lt;STRONG&gt;Clone the catalog&lt;/STRONG&gt;:&amp;nbsp;git clone https://github.com/jvargh/arm-mcp-poc-catalog.git.&lt;/LI&gt;
&lt;LI data-line="112"&gt;&lt;STRONG&gt;Open one PoC folder&lt;/STRONG&gt;&amp;nbsp;in VS Code as a workspace. The&amp;nbsp;.vscode/mcp.json&amp;nbsp;declares the ARM MCP server at workspace scope and starts it on first chat use.&lt;/LI&gt;
&lt;LI data-line="113"&gt;&lt;STRONG&gt;Configure scope&lt;/STRONG&gt;: copy&amp;nbsp;runbooks/&amp;lt;scope&amp;gt;.values.yaml.example&amp;nbsp;to&amp;nbsp;runbooks/&amp;lt;scope&amp;gt;.values.yaml&amp;nbsp;and fill in subscription ID and resource groups. The values file is gitignored.&lt;/LI&gt;
&lt;LI data-line="114"&gt;&lt;STRONG&gt;Invoke the agent&lt;/STRONG&gt;: see each PoC's&amp;nbsp;README.md&amp;nbsp;for accepted verbs (typically&amp;nbsp;run,&amp;nbsp;drilldown,&amp;nbsp;remediate).&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2 data-line="118"&gt;Spotlight: SRE-PoC-5, Reliability Posture Scorecard&lt;/H2&gt;
&lt;P data-line="120"&gt;Of the 24 PoCs in the catalog, the&amp;nbsp;&lt;STRONG&gt;Reliability Posture Scorecard&lt;/STRONG&gt;&amp;nbsp;(&lt;A href="https://github.com/jvargh/arm-mcp-poc-catalog/tree/main/SRE-PoC-5-Reliability-posture-scorecard" target="_blank" rel="noopener" data-href="https://github.com/jvargh/arm-mcp-poc-catalog/tree/main/SRE-PoC-5-Reliability-posture-scorecard"&gt;SRE-PoC-5-Reliability-posture-scorecard/&lt;/A&gt;) is the reference implementation. It is the simplest PoC that exercises the full determinism contract end to end without any deployment risk.&lt;/P&gt;
&lt;H3 data-line="122"&gt;What it does&lt;/H3&gt;
&lt;P data-line="124"&gt;The agent loads a fixed pack of weighted reliability rules from&amp;nbsp;rules.yaml: checks like&amp;nbsp;&lt;EM&gt;App Services without zone redundancy&lt;/EM&gt;,&amp;nbsp;&lt;EM&gt;SQL databases without geo-replication&lt;/EM&gt;,&amp;nbsp;&lt;EM&gt;Storage accounts without soft delete&lt;/EM&gt;, and&amp;nbsp;&lt;EM&gt;Key Vaults without purge protection&lt;/EM&gt;. For each rule it calls&amp;nbsp;validate_query&amp;nbsp;then&amp;nbsp;execute_query&amp;nbsp;against the configured scope, aggregates failures per workload (resource group by default, or any tag), and computes a score:&lt;/P&gt;
&lt;P data-line="39"&gt;score = max(0, 100 - Σ weight of failed rules)&lt;/P&gt;
&lt;P data-line="130"&gt;The output is a frozen markdown report with a deterministic run ID of the form&amp;nbsp;RPS-{YYYYMMDD}-{scope}-{sha256(rules.yaml)[:8]}. Run it twice in a row against the same scope and you get byte-identical output. Run it next week and any diff is a real change in the estate.&lt;/P&gt;
&lt;H3 data-line="132"&gt;Why ARM MCP is a good fit&lt;/H3&gt;
&lt;UL data-line="134"&gt;
&lt;LI data-line="134"&gt;&lt;STRONG&gt;One tool covers every resource type.&lt;/STRONG&gt;&amp;nbsp;Reliability rules span App Services, SQL, Storage, Key Vault, NSGs, and more. ARG exposes all of them as columns in the same query language, so a 12-rule pack is 12 KQL strings instead of 12 SDK clients.&lt;/LI&gt;
&lt;LI data-line="135"&gt;&lt;STRONG&gt;Tenant breadth in one round-trip.&lt;/STRONG&gt;&amp;nbsp;A single&amp;nbsp;execute_query&amp;nbsp;inspects every resource of a type in scope in seconds, with no pagination loop and no rate-limit gymnastics.&lt;/LI&gt;
&lt;LI data-line="136"&gt;&lt;STRONG&gt;Identity inheritance keeps scoring honest.&lt;/STRONG&gt;&amp;nbsp;The agent can only score what the operator can see. No scoring service principal needs tenant-wide read.&lt;/LI&gt;
&lt;LI data-line="137"&gt;&lt;STRONG&gt;Read-only, so it's safe to roll out first.&lt;/STRONG&gt;&amp;nbsp;Reader plus Resource Graph Reader is the entire permission requirement, which makes it the natural proof point before introducing any deploy-capable agent.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 data-line="139"&gt;Resiliency benefits&lt;/H3&gt;
&lt;UL data-line="141"&gt;
&lt;LI data-line="141"&gt;&lt;STRONG&gt;Continuous, not episodic.&lt;/STRONG&gt;&amp;nbsp;Replaces the every-six-months &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/well-architected/" target="_blank"&gt;&lt;STRONG&gt;Well-Architected Review &lt;/STRONG&gt;&lt;/A&gt;with a weekly run that produces a 0–100 score per workload and a trend row in&amp;nbsp;exports/scorecard-trend.csv.&lt;/LI&gt;
&lt;LI data-line="142"&gt;&lt;STRONG&gt;Real diffs, not query drift.&lt;/STRONG&gt;&amp;nbsp;Deterministic run IDs mean a score moving from 78 to 64 is a real regression, not a different mood from the model.&lt;/LI&gt;
&lt;LI data-line="143"&gt;&lt;STRONG&gt;Pre-launch gate.&lt;/STRONG&gt;&amp;nbsp;The same rule pack runs in dev, staging, and prod, so missing zone redundancy or backup configuration is caught before promotion, not after.&lt;/LI&gt;
&lt;LI data-line="144"&gt;&lt;STRONG&gt;Postmortem evidence.&lt;/STRONG&gt;&amp;nbsp;The morning's scorecard is on disk with the exact failing rules and resource IDs, ready to cite directly in the writeup.&lt;/LI&gt;
&lt;LI data-line="145"&gt;&lt;STRONG&gt;Cheap to extend.&lt;/STRONG&gt;&amp;nbsp;Adding a rule is one block of YAML (literal KQL, weight, severity, remediation hint). No agent code changes, no prompt engineering.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="147"&gt;The full walkthrough, including the multi-step end-to-end flow from chat prompt through MCP to rendered report, is in the PoC's own &lt;A href="https://github.com/jvargh/arm-mcp-poc-catalog/tree/main/SRE-PoC-5-Reliability-posture-scorecard" target="_blank" rel="noopener" data-href="https://github.com/jvargh/arm-mcp-poc-catalog/tree/main/SRE-PoC-5-Reliability-posture-scorecard"&gt;README&lt;/A&gt;.&lt;/P&gt;
&lt;H2 data-line="151"&gt;Conclusion&lt;/H2&gt;
&lt;P data-line="153"&gt;The ARM MCP Server's six tools are deliberately small. The interesting engineering is in the&amp;nbsp;&lt;EM&gt;shape&lt;/EM&gt;&amp;nbsp;you wrap them in: how you trade off the model's flexibility against the determinism a recurring agent needs, how you gate writes, and how you compose ARG reads with ARM deploys to answer the questions a human operator actually asks.&lt;/P&gt;
&lt;P data-line="155"&gt;The&amp;nbsp;&lt;A href="https://github.com/jvargh/arm-mcp-poc-catalog" target="_blank" rel="noopener" data-href="https://github.com/jvargh/arm-mcp-poc-catalog"&gt;arm-mcp-poc-catalog&lt;/A&gt;&amp;nbsp;is one set of answers to those questions. Twenty-four PoCs is a starting menu, not a roadmap. Pick the one closest to a problem your team has on Monday morning, read its&amp;nbsp;README.md, run it against a non-prod subscription, and decide whether the shape fits before you commit to building your own.&lt;/P&gt;
&lt;P data-line="157"&gt;If you build something interesting on top, please open an issue or a PR on the catalog repo.&lt;/P&gt;
&lt;H3 data-line="161"&gt;References&lt;/H3&gt;
&lt;UL data-line="163"&gt;
&lt;LI data-line="163"&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/introducing-the-azure-resource-manager-mcp-server/4517521" target="_blank" rel="noopener" data-href="https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/introducing-the-azure-resource-manager-mcp-server/4517521"&gt;Introducing the Azure Resource Manager MCP Server&lt;/A&gt;, Steven Bucher, Azure Governance and Management Blog&lt;/LI&gt;
&lt;LI data-line="164"&gt;&lt;A href="https://github.com/Azure/Azure-Resource-Manager-MCP" target="_blank" rel="noopener" data-href="https://github.com/Azure/Azure-Resource-Manager-MCP"&gt;Azure-Resource-Manager-MCP on GitHub&lt;/A&gt;: official server repo and documentation&lt;/LI&gt;
&lt;LI data-line="165"&gt;&lt;A href="https://github.com/jvargh/arm-mcp-poc-catalog" target="_blank" rel="noopener" data-href="https://github.com/jvargh/arm-mcp-poc-catalog"&gt;arm-mcp-poc-catalog&lt;/A&gt;: the 24-PoC catalog described in this post&lt;/LI&gt;
&lt;LI data-line="166"&gt;&lt;A href="https://aka.ms/JoinARMMCP" target="_blank" rel="noopener" data-href="https://aka.ms/JoinARMMCP"&gt;ARM MCP Server install link&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Fri, 19 Jun 2026 16:57:26 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/arm-mcp-server-a-catalog-of-24-pocs/ba-p/4519069</guid>
      <dc:creator>varghesejoji</dc:creator>
      <dc:date>2026-06-19T16:57:26Z</dc:date>
    </item>
    <item>
      <title>[Preview] CIS Benchmarks on Azure; Now for Windows Server</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/preview-cis-benchmarks-on-azure-now-for-windows-server/ba-p/4523432</link>
      <description>&lt;P&gt;For customers with machines managed by Azure (i.e., Arc-enabled machines and Azure VMs), last year we delivered built-in &lt;A href="https://techcommunity.microsoft.com/blog/linuxandopensourceblog/from-policy-to-practice-built-in-cis-benchmarks-on-azure---flexible-hybrid-ready/4467884" target="_blank" rel="noopener"&gt;CIS Benchmarks for Linux&lt;/A&gt;. The feedback has been clear: “Excellent, now do Windows.”&lt;/P&gt;
&lt;P&gt;Today we're announcing that built-in &lt;STRONG&gt;CIS Benchmarks for Windows Server&lt;/STRONG&gt; are coming to Azure Policy and Machine Configuration as well.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Supported Edition:&lt;/STRONG&gt; The initial preview supports &lt;STRONG&gt;Windows Server 2025&lt;/STRONG&gt; only. Additional Windows Server editions are planned for future releases.&lt;/P&gt;
&lt;H3&gt;Familiar workflow&lt;/H3&gt;
&lt;P&gt;If you've already adopted the new &lt;A href="https://learn.microsoft.com/en-us/azure/governance/machine-configuration/how-to/assign-security-baselines/overview-page" target="_blank" rel="noopener"&gt;Machine Configuration catalog experience&lt;/A&gt; with CIS benchmarks for Linux, the Windows rollout will feel familiar.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Also consistent across Windows and Linux are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Full parity with official CIS Benchmarks content&lt;/STRONG&gt; - precision translation from CIS formats to Machine Configuration formats&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Flexible configuration&lt;/STRONG&gt; - adjust parameters, exclude settings&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Compliance as code&lt;/STRONG&gt; - your benchmark selections and customizations can be exported as JSON to support versioning, approval workflows, and even file-centric deployment patterns like GitOps, build pipelines, etc.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Single policy/assignment compatibility&lt;/STRONG&gt; with Azure VMs and Arc-enabled machines); no need to handle Azure VMs one way and Arc machine another&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Audit-first&lt;/STRONG&gt; - Public Preview starts in audit-only mode; remediation and enforcement come next (see below).&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Windows specifics&lt;/H3&gt;
&lt;P&gt;While we strive for consistency, we also strive to nail platform specific details. For instance, the new experience automatically handles heterogenous Windows fleet nuances such as:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Variation in CIS recommended settings by OS version (&lt;EM&gt;when available&lt;/EM&gt;)&lt;/LI&gt;
&lt;LI&gt;Variation in CIS recommended settings by role (domain controller, member server)&lt;/LI&gt;
&lt;LI&gt;Variation in management APIs by OS version&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;SPAN style="color: rgb(30, 30, 30); font-size: 32px;"&gt;What's next?&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;Beyond the current preview, we are focusing on:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Granular per-rule &lt;STRONG&gt;auto-remediation / enforcement&lt;/STRONG&gt; so you can safely gradually increase security and compliance across your fleet&lt;/LI&gt;
&lt;LI&gt;Retiring &lt;STRONG&gt;overlapping policy definitions&lt;/STRONG&gt; in Azure; for example, unmaintained implementations of older CIS benchmarks, and so on&lt;/LI&gt;
&lt;LI&gt;Adding &lt;STRONG&gt;STIG and other industry baseline&lt;/STRONG&gt; coverage, so a single Azure control plane can manage your end-to-end compliance posture.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Get Started&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;Watch for &lt;A class="lia-external-url" href="https://aka.ms/cis-windows-azure" target="_blank" rel="noopener"&gt;aka.ms/cis-windows-azure&lt;/A&gt; to go live for enablement docs and resources.&lt;/LI&gt;
&lt;LI&gt;In Azure Policy &amp;gt; Authoring &amp;gt; Machine Configuration, look for CIS benchmarks for Windows to appear as a built-in option.&lt;/LI&gt;
&lt;LI&gt;Interested in the upcoming auto-remediation preview? See&amp;nbsp;&lt;A class="lia-external-url" href="https://forms.office.com/r/rfVRsZ6mL4" target="_blank" rel="noopener"&gt;remediation preview sign-up form.&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 28 May 2026 23:33:29 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/preview-cis-benchmarks-on-azure-now-for-windows-server/ba-p/4523432</guid>
      <dc:creator>AmirB</dc:creator>
      <dc:date>2026-05-28T23:33:29Z</dc:date>
    </item>
    <item>
      <title>[Now Generally Available] Customizable Security Baseline Policies in Machine Configuration!</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/now-generally-available-customizable-security-baseline-policies/ba-p/4523429</link>
      <description>&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Background:&lt;/STRONG&gt; &lt;A href="https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview/01-overview-concepts" target="_blank" rel="noopener"&gt;Azure Machine Configuration&lt;/A&gt; remains committed to enabling greater security and simplicity in at-scale server management for all Azure customers. Machine Configuration (previously known as Azure Policy Guest Configuration) enables both built-in and custom configuration as code allowing you to audit and configure OS, app, and workload level settings at scale, both for machines running in Azure and hybrid Azure Arc-enabled servers.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We're excited to announce the&amp;nbsp;&lt;STRONG&gt;General Availability of Customizable Security Baselines&lt;/STRONG&gt; in &lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/overview" target="_blank" rel="noopener"&gt;Azure Policy&lt;/A&gt; and &lt;A href="https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview/01-overview-concepts" target="_blank" rel="noopener"&gt;Machine Configuration&lt;/A&gt;&lt;/STRONG&gt;. What began as a Public Preview is now a mature, production-grade capability that empowers you to tailor industry security benchmarks to your organization's unique compliance standards across both Azure and &lt;A href="https://learn.microsoft.com/en-us/azure/azure-arc/overview" target="_blank" rel="noopener"&gt;Arc-connected machines&lt;/A&gt;, at scale.&lt;/P&gt;
&lt;P&gt;This release moves the experience from "useful" to "everyday default." Standards coverage has expanded, the customization and assignment flow is faster, full lifecycle management is now possible directly from the Azure Portal, and a new Overview page gives you a single pane of glass into which parts of your estate are unprotected.&lt;/P&gt;
&lt;H3&gt;What is Baseline Customization?&lt;/H3&gt;
&lt;P&gt;The core experience remains: tailor security standards through the &lt;STRONG&gt;Modify Settings&lt;/STRONG&gt; wizard under &lt;STRONG&gt;Policy &amp;gt; Machine Configuration&lt;/STRONG&gt;. You can enable, exclude, or adjust rules from existing benchmarks, apply organization-specific parameters, and export your custom configuration as a downloadable JSON file. Each baseline JSON file serves as a reusable, declarative artifact, ideal for policy-as-code workflows, version control, and CI/CD integration.&lt;/P&gt;
&lt;H2&gt;What's New?&lt;/H2&gt;
&lt;P&gt;GA brings four substantive shifts to the customizable baselines experience: &lt;STRONG&gt;broader standards coverage&lt;/STRONG&gt;, &lt;STRONG&gt;a faster path from customization to deployment&lt;/STRONG&gt;, &lt;STRONG&gt;lifecycle management directly in the portal&lt;/STRONG&gt;, and &lt;STRONG&gt;a new Overview page&lt;/STRONG&gt; that surfaces compliance gaps at the subscription level. Together, these changes reflect what we heard from early customers during Preview: that custom baselines need to live alongside the rest of their governance workflows, not in a one-time wizard.&lt;/P&gt;
&lt;P&gt;This cloud-native approach continues to embody Microsoft's &lt;STRONG&gt;Secure by Design&lt;/STRONG&gt; and &lt;STRONG&gt;Secure by Default&lt;/STRONG&gt; principles, with a sharper focus on the operational reality of running compliance at scale.&lt;/P&gt;
&lt;H2&gt;Built-in Policy Standards Coverage&lt;/H2&gt;
&lt;P&gt;GA expands what you can customize and where it's supported.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Standard&lt;/th&gt;&lt;th&gt;Status&lt;/th&gt;&lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;CIS Benchmarks for Linux&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Expanded distribution coverage since Public Preview. See the full list of &lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/samples/guest-configuration-baseline-cis-linux" target="_blank" rel="noopener"&gt;supported distros in the official documentation&lt;/A&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;[NEW!] CIS Benchmarks for Windows&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Public Preview&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Initial release covers L1 settings for WS2025 Domain Controller and Member Server roles.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Azure Compute Security Baseline for Windows&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Now supports customization for Windows Server 2016 and 2019, in addition to 2022 and 2025.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Azure Compute Security Baseline for Linux&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Generally Available&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Aligned with Azure Compute recommendations across supported Linux distributions.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;Key Scenarios&lt;/H2&gt;
&lt;H3&gt;Faster Time to Deployment&lt;/H3&gt;
&lt;P&gt;The customization-to-assignment path is now a single continuous flow. You can:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Skip the JSON download step entirely.&lt;/STRONG&gt; Baseline settings are auto-populated into the Azure Policy assignment flow, so you no longer have to download a JSON file, browse for it, and upload it back. The settings ride with you from &lt;STRONG&gt;Modify Settings&lt;/STRONG&gt; straight into &lt;STRONG&gt;Assign Policy&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Use the improved settings editor.&lt;/STRONG&gt; Role-specific values (Domain Controller, Member Server) and formatted inputs render cleanly in the UX, with validation that prevents malformed parameters from reaching the policy assignment.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Still export when you need to.&lt;/STRONG&gt; The JSON download remains available for teams that want to commit baselines to source control, share with reviewers, or pipe through CI/CD.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The net result: what used to take a multi-step download-and-reupload sequence is now a few clicks inside one blade.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;Lifecycle Management in the Portal&lt;/H3&gt;
&lt;P&gt;Compliance baselines are not write-once artifacts. They evolve as benchmarks update, as your controls tighten, and as your estate changes. GA introduces two capabilities that treat baselines as living configuration:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Import and Modify.&lt;/STRONG&gt; From the &lt;STRONG&gt;Definitions&lt;/STRONG&gt; tab under &lt;STRONG&gt;Machine Configuration&lt;/STRONG&gt;, you can now import an existing baseline JSON and iterate on it directly in the portal. This closes the loop between policy-as-code workflows and ad-hoc edits, so you no longer have to choose between version-controlled artifacts and in-portal convenience.&lt;img /&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Edit Settings on existing Assignments.&lt;/STRONG&gt; The &lt;STRONG&gt;Assignments&lt;/STRONG&gt; tab now supports updating an active baseline assignment in place. You can refine rules, adjust role-specific values, or exclude controls without tearing down and re-creating the assignment. All you have to do is select the policy assignment and the "Edit Settings" button should be enabled.&lt;img /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Together, these turn baselines into something you maintain, not something you set and forget.&lt;/P&gt;
&lt;H3&gt;New Overview Page: See Where You're Unprotected&lt;/H3&gt;
&lt;P&gt;A new &lt;STRONG&gt;Overview&lt;/STRONG&gt; page on &lt;STRONG&gt;Policy &amp;gt; Machine Configuration&lt;/STRONG&gt; gives you subscription-level visibility into where Machine Configuration is enabled and where it isn't. For each subscription it surfaces status (At Risk, Not Enabled, Enabled), machines missing prerequisites, machines with prerequisites in place, and total eligible machines. From the same view you can enable Machine Configuration on selected subscriptions to onboard eligible VMs and activate baseline auditing in a single action.&lt;/P&gt;
&lt;P&gt;This shifts the first question from &lt;EM&gt;"is this one machine compliant?"&lt;/EM&gt; to &lt;EM&gt;"which corners of my estate aren't even being assessed yet?"&lt;/EM&gt;, which is usually the more consequential gap.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;Integration and Automation&lt;/H3&gt;
&lt;P&gt;Security baselines continue to integrate into your &lt;STRONG&gt;DevOps pipelines&lt;/STRONG&gt; and &lt;STRONG&gt;configuration management workflows&lt;/STRONG&gt;. Each baseline produces a declarative settings catalog (JSON) that can be versioned and deployed using Azure CLI, ARM templates, Bicep, and CI/CD automation, ensuring reproducible, traceable compliance configurations across environments.&lt;/P&gt;
&lt;H2&gt;Availability&lt;/H2&gt;
&lt;P&gt;Customizable security baselines are now generally available in &lt;STRONG&gt;all public Azure regions&lt;/STRONG&gt;, &lt;STRONG&gt;Azure Government&lt;/STRONG&gt;, and &lt;STRONG&gt;Sovereign Clouds&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2&gt;Getting Started&lt;/H2&gt;
&lt;H3&gt;Prerequisites&lt;/H3&gt;
&lt;P&gt;Before you begin:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Deploy the &lt;A href="https://ms.portal.azure.com/#view/Microsoft_Azure_Policy/InitiativeDetail.ReactView/id/%2Fproviders%2FMicrosoft.Authorization%2FpolicySetDefinitions%2F12794019-7a00-42cf-95c2-882eed337cc8" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Azure Machine Configuration prerequisite policy initiative.&lt;/STRONG&gt;&lt;/A&gt; (This installs the required Guest Configuration extension on supported VMs.) You can also do this in a single action from the new &lt;STRONG&gt;Overview&lt;/STRONG&gt; page.&lt;/LI&gt;
&lt;LI&gt;Ensure your &lt;STRONG&gt;Azure subscription or management group&lt;/STRONG&gt; includes supported Windows or Linux VMs.&lt;/LI&gt;
&lt;LI&gt;Have sufficient permissions (Owner or Resource Policy Contributor) to create and assign custom policy definitions.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Step-by-Step Guidance&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Check your coverage&lt;/STRONG&gt; on the &lt;STRONG&gt;Overview&lt;/STRONG&gt; page to see which subscriptions are unprotected and onboard them with one click.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Select a baseline&lt;/STRONG&gt; from the &lt;STRONG&gt;Definitions&lt;/STRONG&gt; tab in &lt;STRONG&gt;Machine Configuration or&lt;/STRONG&gt;&amp;nbsp;use &lt;STRONG&gt;Import and Modify&lt;/STRONG&gt; to iterate on an existing baseline JSON.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Modify settings&lt;/STRONG&gt; to enable, exclude, or parameterize rules to match your internal policies.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Assign the policy&lt;/STRONG&gt; directly from the wizard. Settings are auto populated into the assignment flow, no JSON upload required.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Iterate when needed.&lt;/STRONG&gt; Use &lt;STRONG&gt;Edit Settings&lt;/STRONG&gt; on the &lt;STRONG&gt;Assignments&lt;/STRONG&gt; tab to refine active baselines in place.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Review compliance results&lt;/STRONG&gt; to track outcomes in Azure Policy, Azure Resource Graph, or the Guest Assignments page.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;Learn More&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/machine-configuration/how-to/assign-security-baselines/overview-page" target="_blank" rel="noopener"&gt;Azure Machine Configuration security baselines official documentation&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/osconfig/overview-cis-benchmarks-windows-server" target="_blank"&gt;CIS Benchmark for Windows Server (Preview) documentation&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/samples/guest-configuration-baseline-cis-linux" target="_blank" rel="noopener"&gt;CIS Benchmark for Linux documentation&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/samples/guest-configuration-baseline-windows-server-2025" target="_blank" rel="noopener"&gt;Azure Windows Baseline&lt;/A&gt; and &lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/samples/guest-configuration-baseline-linux" target="_blank" rel="noopener"&gt;Azure Linux Baseline&lt;/A&gt; documentation&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;Please note that the use of Azure Machine Configuration on Azure Arc-enabled servers will incur a charge.&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 28 May 2026 19:29:06 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/now-generally-available-customizable-security-baseline-policies/ba-p/4523429</guid>
      <dc:creator>mutemwamasheke</dc:creator>
      <dc:date>2026-05-28T19:29:06Z</dc:date>
    </item>
    <item>
      <title>Introducing the Azure Resource Manager MCP Server!</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/introducing-the-azure-resource-manager-mcp-server/ba-p/4517521</link>
      <description>&lt;P&gt;We're super excited to announce the public preview of the &lt;STRONG&gt;Azure Resource Manager MCP Server&lt;/STRONG&gt;! This is a remote MCP server that provides tools to give AI agents first-class access to Azure infrastructure operations through Azure Resource Manager (ARM). AI agents can now be equipped with tools to generate, validate, execute Azure Resource Graph (ARG) queries and tools to deploy and manage ARM template deployments. This server is able to generate and execuite queries that return data across &lt;STRONG&gt;all your Azure resource types&lt;/STRONG&gt;! At its core, this server is built to help AI agents interact with Azure resources seamlessly.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;What this means for you&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;Ask natural language questions about your Azure estate to your agents and get real time, accurate answers backed with an ARG query&lt;/LI&gt;
&lt;LI&gt;Deploy and manage infrastructure easily by having AI deploy ARM templates for you&lt;/LI&gt;
&lt;LI&gt;Monitor deployment status and catch issues before they escalate&lt;/LI&gt;
&lt;LI&gt;Ability to build more advanced AI agents that understand your Azure environment&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;What You Can Do Today&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;STRONG&gt;Generate, Validate, and Execute Azure Resource Graph Queries from Natural Language&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=""&gt;No need to struggle with writing KQL from stratch! Describe what you need, and the MCP server tool generates Azure Resource Graph queries that match your intent. You ask an AI Agent: "Find all virtual machines in my subscription that don't have managed disks". It uses the tool and returns: A ready-to-execute ARG query without manual KQL writing. These queries spans across &lt;STRONG&gt;all your azure resource types&lt;/STRONG&gt; so can learn and navigate across any type!&lt;/P&gt;
&lt;img /&gt;
&lt;P class=""&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=""&gt;&lt;STRONG&gt;Deploy, monitor and cancel ARM Templates&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Pass an ARM template, and the MCP server kicks off the deployment targeted to an existing resource group scope. Monitor the deployment by getting status about it and even cancel it if you decide its not doing what you need it to.&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the complete list of the tool available in this preview:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;PRE&gt;generate_query &lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;validate_query&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;execute_query &lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;create_template_deployment &lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;get_arm_template_deployment_status &lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;cancel_arm_template_deployment &lt;/PRE&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;Real-World Scenarios&lt;/STRONG&gt;&lt;/H5&gt;
&lt;H6&gt;&lt;EM&gt;&lt;STRONG&gt;Infrastructure Compliance Audit&lt;/STRONG&gt;&lt;/EM&gt;&lt;/H6&gt;
&lt;P&gt;"&lt;EM&gt;Show me all resources created in the last 30 days that don't have required tags.&lt;/EM&gt;" - The MCP server generates and executes the query, returning resources that need remediation. Your team can then fix them programmatically or through Copilot.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Rapid Infrastructure Provisioning&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;"&lt;EM&gt;Using this ARM template &amp;lt;path to template&amp;gt;, deploy a secure storage account with HTTPS-only access, private endpoints, and Standard_LRS replication to my production resource group&lt;/EM&gt;." This will take an existing ARM template and deploy it to a resource group scope.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-SPOILER label="Note"&gt;
&lt;P&gt;You can ask your Copilot to generate the ARM template for you as well but there is no quality guarantee on the generated template so we recommend providing your own template for certainty in deployment.&lt;/P&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Policy Compliance Check&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;"&lt;EM&gt;Check if all resources in my subscription comply with the latest policy applied to it." - &lt;/EM&gt;The MCP server generates and executes the query, returning resources that are non-compliant. Your team can then take corrective actions programmatically or through Copilot.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Building Agents with Azure Resource Manager MCP Server&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;The MCP server's tools can be integrated into custom agents you build with GitHub Copilot. What this means is you can create custom agents that automatically check compliance, track changes in a scope, or ensure all resources have a particular tag applied to them!&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Getting Started&lt;/STRONG&gt;&lt;/H4&gt;
&lt;H5&gt;&lt;STRONG&gt;Prerequisites&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;VS Code installed&lt;/LI&gt;
&lt;LI&gt;Valid Azure account with appropriate permissions&lt;/LI&gt;
&lt;LI&gt;GitHub Copilot subscription&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;Installation&lt;/STRONG&gt;&lt;/H5&gt;
&lt;OL&gt;
&lt;LI&gt;Install the MCP Server&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;Open &lt;A class="lia-external-url" href="https://aka.ms/JoinARMMCP" target="_blank"&gt;https://aka.ms/JoinARMMCP&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;VS Code launches automatically&lt;/LI&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;Install&lt;/STRONG&gt; under &lt;STRONG&gt;Azure Resource Manager MCP Server&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Sign in with your Azure credentials&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;If you hit any authentication issues see&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/Azure/Azure-Resource-Manager-MCP/blob/main/docs/Troubleshooting.md" target="_blank" rel="noopener"&gt;Troubleshooting Guide&lt;/A&gt; in our repo&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;Check tools are enabled in Chat&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;Open Chat in VS Code (&lt;STRONG&gt;View &amp;gt; Chat&lt;/STRONG&gt;)&lt;/LI&gt;
&lt;LI&gt;Click &lt;STRONG&gt;Configure Tools&lt;/STRONG&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Ensure the six &lt;STRONG&gt;Azure Resource Manager MCP Server&lt;/STRONG&gt; tools are enabled&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;Start Using It&amp;nbsp;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;Ask Copilot a question about your Azure resources or infrastructure needs&lt;/LI&gt;
&lt;LI&gt;The MCP server handles the rest&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Governance &amp;amp; Security&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;The Azure Resource Manager MCP Server respects your Azure permissions and governance policies. All operations run in the context of your signed-in user. Additionally you can apply Azure Policies to prevent deployments via the MCP Server. Find more details in the&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/Azure/Azure-Resource-Manager-MCP/tree/main#governance" target="_blank" rel="noopener"&gt;README&lt;/A&gt; of our documentation repo.&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;What's Next?&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;We are actively expanding the capabilities of the Azure Resource Manager MCP Server! The Server will expand to include:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Additional ARM API capabilities with ARM&lt;/LI&gt;
&lt;LI&gt;Enhanced query generation and optimization&lt;/LI&gt;
&lt;LI&gt;Support for additional MCP clients beyond VS Code, next up: Claude&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;Get Feedback&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;We want to hear from you. Try the public preview and share your feedback. &lt;STRONG&gt;Found a bug? Or have a feature request?&lt;/STRONG&gt; Open an issue on GitHub at &lt;A class="lia-external-url" href="https://aka.ms/ARMMCPIssue" target="_blank" rel="noopener"&gt;https://aka.ms/ARMMCPIssue&lt;/A&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Resources&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;- 📖&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/Azure/Azure-Resource-Manager-MCP/blob/main/README.md" target="_blank" rel="noopener"&gt;Full Documentation&lt;/A&gt;&amp;nbsp; – Complete setup and usage guide&lt;/P&gt;
&lt;P&gt;- 🔗 &lt;A class="lia-external-url" href="https://aka.ms/JoinARMMCP" target="_blank" rel="noopener"&gt;Install Now&lt;/A&gt;&amp;nbsp; – Get started with the public preview&lt;/P&gt;
&lt;P&gt;- 🐛&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/Azure/Azure-Resource-Manager-MCP/issues" target="_blank" rel="noopener"&gt;Report Issues&lt;/A&gt;&amp;nbsp; – Share feedback and bugs&lt;/P&gt;
&lt;P&gt;- ❓ &lt;A class="lia-external-url" href="https://github.com/Azure/Azure-Resource-Manager-MCP/blob/main/docs/FAQ.md" target="_blank" rel="noopener"&gt;FAQ&lt;/A&gt;&amp;nbsp; – Common questions answered&lt;/P&gt;
&lt;P&gt;- 🛠️ &lt;A class="lia-external-url" href="https://github.com/Azure/Azure-Resource-Manager-MCP/blob/main/docs/Troubleshooting.md" target="_blank" rel="noopener"&gt;Troubleshooting&lt;/A&gt;&amp;nbsp; – Resolve common issues&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Try It Today&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;The Azure Resource Manager MCP Server public preview is available now. Visit &lt;A class="lia-external-url" href="https://aka.ms/JoinARMMCP" target="_blank" rel="noopener"&gt;https://aka.ms/JoinARMMCP&lt;/A&gt; to install and start automating your Azure infrastructure with AI.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What agents will you build with these tools?&lt;/STRONG&gt; We can't wait to see how you'll use this.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Steven Bucher&lt;/P&gt;
&lt;P&gt;PM on Azure Resource Manager and Azure Governance&lt;/P&gt;</description>
      <pubDate>Mon, 11 May 2026 20:49:28 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/introducing-the-azure-resource-manager-mcp-server/ba-p/4517521</guid>
      <dc:creator>stevenbucher</dc:creator>
      <dc:date>2026-05-11T20:49:28Z</dc:date>
    </item>
    <item>
      <title>New Local Management Group for ALZ &amp; Updated Sovereign Policies for SLZ</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/new-local-management-group-for-alz-updated-sovereign-policies/ba-p/4515156</link>
      <description>&lt;P&gt;Following on from months of working alongside customers, partners, and our internal product groups, we have now made two updates to the &lt;STRONG&gt;Azure landing zone (ALZ)&lt;/STRONG&gt; and the &lt;STRONG&gt;Sovereign landing zone (SLZ)&lt;/STRONG&gt;, that I’d like to walk you through in this post:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;A new dedicated ‘&lt;STRONG&gt;Local’ Management Group&lt;/STRONG&gt; added beneath the Landing Zones Management Group – &lt;STRONG&gt;&lt;EM&gt;applies to both ALZ &amp;amp; SLZ&lt;/EM&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;A refresh of the &lt;STRONG&gt;sovereign policy initiatives&lt;/STRONG&gt; assigned in the SLZ, replacing the previous Sovereignty Baseline initiatives with new built-in initiatives that align directly to sovereign control levels 1, 2, and 3 – &lt;STRONG&gt;&lt;EM&gt;applies to SLZ only&lt;/EM&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;A new ‘Local’ Management Group&lt;/H2&gt;
&lt;H3&gt;What’s changing?&lt;/H3&gt;
&lt;P&gt;We have added a new dedicated ‘&lt;STRONG&gt;Local’&lt;/STRONG&gt; Management Group beneath the &lt;STRONG&gt;Landing Zones&lt;/STRONG&gt; Management Group in the ALZ conceptual architecture, sitting alongside the existing &lt;STRONG&gt;Corp&lt;/STRONG&gt; and &lt;STRONG&gt;Online&lt;/STRONG&gt; Management Groups. And because the SLZ extends and takes a dependency on ALZ, this Management Group is inherited by the SLZ hierarchy too in the same hierarchy location, beneath the &lt;STRONG&gt;Landing Zones&lt;/STRONG&gt; Management Group.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Azure landing zone conceptual architecture's Management Group hierarchy only. Download a&amp;nbsp;&lt;A href="https://github.com/MicrosoftDocs/cloud-adoption-framework/raw/main/docs/ready/enterprise-scale/media/enterprise-scale-architecture.vsdx" target="_blank" rel="noopener"&gt;Visio file&lt;/A&gt;&amp;nbsp;or&amp;nbsp;&lt;A href="https://github.com/MicrosoftDocs/cloud-adoption-framework/raw/main/docs/ready/enterprise-scale/media/enterprise-scale-architecture.pdf" target="_blank" rel="noopener"&gt;PDF file&lt;/A&gt;&amp;nbsp;of this architecture.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;H3&gt;Why have we added it?&lt;/H3&gt;
&lt;P&gt;We have been working closely with the Azure Local product group, customers, and partners on what good governance looks like for Azure Local within the ALZ architecture, and we kept hearing two consistent asks:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A clear, opinionated home in the Management Group hierarchy for Azure Local clusters and the workloads that sit on top of them.&lt;/LI&gt;
&lt;LI&gt;A way to help customers — particularly those with sovereignty or resiliency requirements — design and run workloads in the Azure public cloud today that are ready to "exit" to &lt;STRONG&gt;Azure Local disconnected operations&lt;/STRONG&gt; (ALDO) if they ever need to.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The new &lt;STRONG&gt;Local&lt;/STRONG&gt; Management Group gives us a single, consistent scope to address both scenarios with the same governance and policy guardrails. It is therefore intended to be used both for:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Workloads running directly on Azure Local clusters — to apply consistent best practices, governance, and security guardrails for Azure Local deployments.&lt;/LI&gt;
&lt;LI&gt;Workloads running in the Azure public cloud today that may &lt;EM&gt;one day&lt;/EM&gt; need to be moved to run on Azure Local in disconnected operations mode — to make sure they are exit-ready by construction, rather than at the point you find out you need them to be.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;How exit planning is supported&lt;/H3&gt;
&lt;P&gt;To make exit planning straightforward, the new ‘Local’ Management Group leverages the following new built-in Azure Policy:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://www.azadvertizer.net/azpolicyadvertizer/dabf7c7f-5354-42de-a92a-8367f538dd71.html" target="_blank" rel="noopener"&gt;[Preview]: Restrict resource types to Azure services supported in Azure Local disconnected operations&lt;/A&gt; — Definition ID dabf7c7f-5354-42de-a92a-8367f538dd71. Category: &lt;EM&gt;Azure Local&lt;/EM&gt;, Version: 1.0.0-preview.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This policy can be used in a couple of ways depending on where a customer is on their journey:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;In &lt;STRONG&gt;Audit&lt;/STRONG&gt; mode, the policy gives you an at-a-glance view of which resource types currently deployed in subscriptions under the ‘Local’ Management Group are &lt;EM&gt;not&lt;/EM&gt; available on Azure Local disconnected operations clusters. This is great for understanding the current state of an exit plan without changing developer behavior.&lt;/LI&gt;
&lt;LI&gt;In &lt;STRONG&gt;Deny&lt;/STRONG&gt; mode, the policy &lt;EM&gt;prevents&lt;/EM&gt; deployment of any resource type that is not available on Azure Local disconnected operations clusters. Workloads can carry on running happily in Azure public, but they are exit-ready by construction — there is no scenario where someone "accidentally" introduces a service that breaks the exit story.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The important thing to call out here is that workloads do &lt;EM&gt;not&lt;/EM&gt; have to run on Azure Local today to benefit from this. Customers with sovereignty or business continuity requirements that need a credible exit story to Azure Local disconnected operations can keep their workloads running in the Azure public cloud and use this new ‘Local’ Management Group, with the new built-in policy to &lt;STRONG&gt;Deny&lt;/STRONG&gt;, to guarantee portability when they need it. The platform enforces it, rather than someone tracking it in a spreadsheet or other manual methods.&lt;/P&gt;
&lt;P&gt;Further policies from the Azure local product group will be created and published in the future. These additional policies will focus on Azure Local cluster and workload best practices and other scenarios that can be assigned to the new ‘Local’ Management Group.&lt;/P&gt;
&lt;H3&gt;Do I place my Azure Arc-enabled resources in the new local management group?&lt;/H3&gt;
&lt;P&gt;This is a fantastic question and one that we have had a couple of times already since posting this blog post, hence updating it with this new section.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;In short, no&lt;/STRONG&gt;, we do not think that this is the best place to place your Azure Arc-enabled resources such as servers as a central location to group them all together. Instead, you should consider putting them with their existing resources in their own application landing zone subscriptions as per the normal Azure landing zone guidance, for example, in either a corp or online application landing zone governed subscription.&lt;/P&gt;
&lt;P&gt;We actually wrote up this and other scenarios in the hybrid and multi-cloud cloud adoption framework scenario a few years back that we are sharing here for convenience, as we believe it will help many answer this question, if they have it. Please see &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/hybrid/enterprise-scale-landing-zone#integrate-azure-arc-resources-with-application-landing-zones" target="_blank" rel="noopener"&gt;Integrate Azure Arc resources with application landing zones&lt;/A&gt; for the guidance on this topic.&lt;/P&gt;
&lt;H2&gt;New sovereign policy built-in initiatives aligned to sovereign control levels 1, 2 &amp;amp; 3&lt;/H2&gt;
&lt;H3&gt;What’s changing?&lt;/H3&gt;
&lt;P&gt;In the SLZ we have replaced the previous Sovereignty Baseline initiatives with a set of &lt;STRONG&gt;new built-in sovereign policy initiatives&lt;/STRONG&gt;, assigned at the appropriate Management Group scopes in the Sovereign landing zone (SLZ), that align to the three sovereign control levels:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Level 1 — Data residency&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Level 2 — Encryption-at-Rest / in-Transit&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Level 3 — Encryption in use (Confidential Computing)&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;You can read more about each of these levels and the principles behind them on Microsoft Learn:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-gb/azure/azure-sovereign-clouds/public/overview-controls-principles" target="_blank" rel="noopener"&gt;Controls and principles in Sovereign Public Cloud&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-gb/azure/azure-sovereign-clouds/public/implement-controls-principles" target="_blank" rel="noopener"&gt;Implement controls and principles in SLZ&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;What was assigned before?&lt;/P&gt;
&lt;P&gt;Up until this update, the SLZ assigned two existing Sovereignty Baseline built-in initiatives:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Sovereignty Baseline – Global Policies&lt;/STRONG&gt; (c1cbff38-87c0-4b9f-9f70-035c7a3b5523) — 5 policies covering location restrictions and Trusted Launch.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sovereignty Baseline – Confidential Policies&lt;/STRONG&gt; (03de05a4-c324-4ccd-882f-a814ea8ab9ea) — 19 policies covering customer-managed keys, confidential compute, and resource type / location restrictions.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These were broad baselines, not purpose-built per sovereign control level. They did the job, but they didn’t map cleanly to the L1/L2/L3 model that customers, partners, and our own documentation use to talk about sovereign controls.&lt;/P&gt;
&lt;H3&gt;What’s assigned now?&lt;/H3&gt;
&lt;P&gt;Working with the Sovereign Public product group, we have moved the SLZ over to a set of &lt;STRONG&gt;new built-in initiatives &lt;/STRONG&gt;that we have built and published recently, each aligned to a specific sovereign control level. These are now assigned by default in the SLZ in place of the two Sovereignty Baseline initiatives above:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Initiative&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Control level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Purpose&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.azadvertizer.net/azpolicyinitiativesadvertizer/bebfcba2-e789-4da6-9043-726ef3a00d02.html" target="_blank" rel="noopener"&gt;[Preview]: Enforce Data Residency across Azure Services&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Level 1 — Data Residency&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Restrict / audit Azure regions; prevent cross-region replication (Cosmos DB, SQL, Storage, etc.)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.azadvertizer.net/azpolicyinitiativesadvertizer/f15f4d95-c59c-4395-9317-be6978d0743f.html" target="_blank" rel="noopener"&gt;[Preview]: Enforce Encryption-at-Rest with Customer Managed Keys (CMK) with Azure Key Vault Premium Keys across Azure Services&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Level 2 — Encryption-at-Rest&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Restrict / audit Azure services to use CMK with AKV Premium keys&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.azadvertizer.net/azpolicyinitiativesadvertizer/7a00a7fc-fdf4-4ad8-8fa2-a94acc223e8e.html" target="_blank" rel="noopener"&gt;[Preview]: Enforce Encryption-at-Rest with Customer Managed Keys (CMK) with Azure Key Vault Managed HSM Keys across Azure Services&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Level 2 — Encryption-at-Rest&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Restrict / audit Azure services to use CMK with AKV Managed HSM keys&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.azadvertizer.net/azpolicyinitiativesadvertizer/c7c0ab87-63da-4706-ba95-ff564e38402b.html" target="_blank" rel="noopener"&gt;[Preview]: Enforce Encryption-in-Transit across Azure Services - HTTPS&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Level 2 — Encryption-at-Rest&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Restrict / audit Azure services to use HTTPS/SSL&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.azadvertizer.net/azpolicyinitiativesadvertizer/f1fe6a81-eee9-47b8-9f7f-80685141209e.html" target="_blank" rel="noopener"&gt;[Preview]: Enforce Encryption-in-Transit across Azure Services - TLS Version&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Level 2 — Encryption-at-Rest&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Restrict / audit Azure services to use latest TLS versions (e.g. TLS 1.3)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.azadvertizer.net/azpolicyinitiativesadvertizer/7a76da03-ec94-45ea-a4fd-496c350c2a63.html" target="_blank" rel="noopener"&gt;[Preview]: Enforce Encryption-in-Use across Azure Services&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Level 3 — Encryption-in-Use&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Restrict / audit to Azure Confidential Compute (ACC) VM SKUs or ACC-backed PaaS services&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Sovereign landing zone conceptual architecture's Management Group hierarchy with the associated controls and principles applied. Download a&amp;nbsp;&lt;A href="https://github.com/MicrosoftDocs/cloud-adoption-framework/raw/main/docs/ready/enterprise-scale/media/enterprise-scale-architecture.vsdx" target="_blank" rel="noopener"&gt;Visio file&lt;/A&gt;&amp;nbsp;or&amp;nbsp;&lt;A href="https://github.com/MicrosoftDocs/cloud-adoption-framework/raw/main/docs/ready/enterprise-scale/media/enterprise-scale-architecture.pdf" target="_blank" rel="noopener"&gt;PDF file&lt;/A&gt;&amp;nbsp;of this architecture.&lt;/EM&gt;&lt;/P&gt;
&lt;H3&gt;Why have we done this?&lt;/H3&gt;
&lt;P&gt;Aligning the SLZ to these new built-in policy initiatives gives customers, partners, and our internal teams several benefits:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Single source of truth&lt;/STRONG&gt; — the policies assigned by the SLZ now match exactly what is documented in the sovereign controls and principles guidance on Microsoft Learn. No translation, no mapping exercise.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Per-level alignment&lt;/STRONG&gt; — each initiative aligns to a specific level (L1, L2, L3), so customers can map their data classifications (Public, Internal, Confidential, Secret) to the right scope in the hierarchy and apply only what is required for that classification.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Lower maintenance overhead&lt;/STRONG&gt; — by moving from broad baselines to per-control built-ins owned by the Sovereign Public product group, customers benefit from updates made by the product group automatically, without us having to ship and version our own copies in the SLZ.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Easier auditing and reporting&lt;/STRONG&gt; — built-in initiatives are first-class citizens in tools such as Microsoft Defender for Cloud and Azure Policy compliance reporting, which makes evidencing compliance against the sovereign controls easier for those that need to.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;What if we have already deployed ALZ or the SLZ?&lt;/H2&gt;
&lt;P&gt;These changes are now live in the following releases in the Azure Landing Zones library.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://github.com/Azure/Azure-Landing-Zones-Library/releases/tag/platform%2Falz%2F2026.04.2" target="_blank" rel="noopener"&gt;platform/alz/2026.04.2&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/Azure/Azure-Landing-Zones-Library/releases/tag/platform%2Fslz%2F2026.04.2" target="_blank" rel="noopener"&gt;platform/slz/2026.04.2&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;We have also updated the &lt;A href="https://aka.ms/alz/accelerator" target="_blank" rel="noopener"&gt;ALZ Accelerator&lt;/A&gt; and our AVM-based Terraform &amp;amp; Bicep deployment options to use these latest releases for new deployments. And for those of you who already have an active deployment you can upgrade your library version following the guidance here:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Terraform - &lt;A href="https://azure.github.io/Azure-Landing-Zones/terraform/howtos/update/" target="_blank" rel="noopener"&gt;Updating the module and library version | Azure landing zone Documentation&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Bicep - &lt;A href="https://azure.github.io/Azure-Landing-Zones/bicep/howtos/modifyingpolicyassets/" target="_blank" rel="noopener"&gt;Updating the ALZ Library Version | Azure landing zone Documentation&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The ALZ Portal accelerator is also being updated this week so stay tuned for those if you use that, although we highly recommend the &lt;A href="https://aka.ms/alz/accelerator" target="_blank" rel="noopener"&gt;ALZ IaC Accelerator&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Thu, 30 Apr 2026 07:58:07 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/new-local-management-group-for-alz-updated-sovereign-policies/ba-p/4515156</guid>
      <dc:creator>jtracey93msft</dc:creator>
      <dc:date>2026-04-30T07:58:07Z</dc:date>
    </item>
    <item>
      <title>Announcing One‑Command Backup Configuration for AKS with Azure Backup</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/announcing-one-command-backup-configuration-for-aks-with-azure/ba-p/4511852</link>
      <description>&lt;P&gt;Running production workloads on &lt;STRONG&gt;Azure Kubernetes Service (AKS)&lt;/STRONG&gt; is becoming the norm for platform teams building cloud‑native applications at scale. As these environments increasingly host stateful workloads using persistent volumes, ensuring data protection and rapid recovery becomes mission‑critical.&lt;/P&gt;
&lt;P&gt;Today, we’re excited to introduce an alternate &lt;STRONG&gt;simplified CLI‑based experience&lt;/STRONG&gt; that allows customers to configure &lt;STRONG&gt;back&lt;/STRONG&gt;&lt;STRONG&gt;ups for AKS using Azure Backup with a single command&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2&gt;The challenge with AKS backup onboarding today&lt;/H2&gt;
&lt;P&gt;Until now, enabling backup for an AKS cluster through Azure CLI required customers to understand and coordinate across multiple CLI domains, including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;az aks&lt;/LI&gt;
&lt;LI&gt;az k8s-extension&lt;/LI&gt;
&lt;LI&gt;az dataprotection&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Configuring vaulted backup involved:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Extension installation&lt;/LI&gt;
&lt;LI&gt;Storage account provisioning&lt;/LI&gt;
&lt;LI&gt;Backup vault creation&lt;/LI&gt;
&lt;LI&gt;Policy configuration&lt;/LI&gt;
&lt;LI&gt;Trusted access setup&lt;/LI&gt;
&lt;LI&gt;Backup instance initialization&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;All of which required orchestrating &lt;STRONG&gt;8 separate lifecycle steps across 15+ CLI commands&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;For platform teams managing tens or hundreds of AKS clusters through automation or CI/CD pipelines, this multi‑step setup often became a barrier to experimentation and adoption.&lt;/P&gt;
&lt;H2&gt;A simpler way: Configure backup in one CLI command&lt;/H2&gt;
&lt;P&gt;With this new experience, customers can now enable full‑cluster backup for AKS using a &lt;STRONG&gt;single CLI command&lt;/STRONG&gt;:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;LI-CODE lang="json"&gt;az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id &amp;lt;cluster-arm-id&amp;gt; \
--backup-strategy &amp;lt;strategy&amp;gt; \
--backup-configuration-file @config.json
&lt;/LI-CODE&gt;&lt;/DIV&gt;
&lt;P&gt;This command orchestrates the entire AKS backup enablement workflow behind the scenes by automatically performing the following steps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Validate AKS cluster existence and running state&lt;/LI&gt;
&lt;LI&gt;Create or identify region‑specific backup resource group&lt;/LI&gt;
&lt;LI&gt;Check if Backup Extension is already installed on the cluster&lt;/LI&gt;
&lt;LI&gt;Install Backup Extension (if not present)&lt;/LI&gt;
&lt;LI&gt;Create or reuse Storage Account for backup data&lt;/LI&gt;
&lt;LI&gt;Create or reuse Backup Vault&lt;/LI&gt;
&lt;LI&gt;Create or reuse Backup Policy&lt;/LI&gt;
&lt;LI&gt;Enable Trusted Access between vault and cluster&lt;/LI&gt;
&lt;LI&gt;Initialize and create Backup Instance&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Customers no longer need to manually orchestrate resources across different CLI surfaces.&lt;/P&gt;
&lt;H2&gt;Backup Strategy Presets&lt;/H2&gt;
&lt;P&gt;Customers can select predefined strategies aligned to common protection needs:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Strategy&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Op Store Retention&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Vault Store Retention&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Use Case&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Week (default)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;7 days&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;—&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Dev/Test&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Month&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;30 days&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;—&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Production&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;DisasterRecovery&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;7 days&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;90 days&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cross‑region DR&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Custom&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;User-defined&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;User-defined&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;BYO Vault &amp;amp; Policy&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id &amp;lt;cluster-arm-id&amp;gt; \
--backup-strategy DisasterRecovery
&lt;/LI-CODE&gt;
&lt;H2&gt;Backup Configuration JSON (Advanced Customization)&lt;/H2&gt;
&lt;P&gt;Advanced users can optionally provide a configuration JSON file to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Use existing vaults or policies&lt;/LI&gt;
&lt;LI&gt;Bring your own storage account&lt;/LI&gt;
&lt;LI&gt;Apply enterprise tags&lt;/LI&gt;
&lt;LI&gt;Use custom backup resource groups&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Supported Parameters&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Parameter&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;When Required&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;backupVaultId&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Custom strategy&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Use existing vault&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;backupPolicyId&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Custom strategy&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Use existing policy&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;storageAccountResourceId&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Optional&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Use existing SA&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;blobContainerName&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Optional&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Custom container&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;backupResourceGroupId&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Optional&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Use existing RG&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;tags&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Optional&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Apply to created resources&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;Built‑in validations for reliability&lt;/H2&gt;
&lt;P&gt;Before enabling backup, the CLI automatically validates:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Cluster existence&lt;/LI&gt;
&lt;LI&gt;Running state&lt;/LI&gt;
&lt;LI&gt;Backup compatibility&lt;/LI&gt;
&lt;LI&gt;Required RBAC permissions&lt;/LI&gt;
&lt;LI&gt;Resource availability (if provided)&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Faster time‑to‑protection for AKS workloads&lt;/H2&gt;
&lt;P&gt;By collapsing a previously multi‑step setup into a single command:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Backup onboarding becomes automation‑friendly&lt;/LI&gt;
&lt;LI&gt;Platform teams can enable protection consistently across environments&lt;/LI&gt;
&lt;LI&gt;Setup errors from manual orchestration are reduced&lt;/LI&gt;
&lt;LI&gt;Backup rollout across large AKS estates becomes significantly faster&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;What’s next&lt;/H2&gt;
&lt;P&gt;The simplified &lt;STRONG&gt;single‑command backup enablement experience&lt;/STRONG&gt; introduced for AKS is part of a broader effort to make Azure Backup more automation‑friendly across cloud‑native and platform workloads.&lt;/P&gt;
&lt;P&gt;We are actively working to extend this model to other workloads supported by Azure Backup, enabling customers to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Configure protection using native CLI workflows&lt;/LI&gt;
&lt;LI&gt;Reduce onboarding complexity across backup‑supported resources&lt;/LI&gt;
&lt;LI&gt;Integrate backup enablement seamlessly into CI/CD pipelines&lt;/LI&gt;
&lt;LI&gt;Achieve faster time‑to‑protection across heterogeneous environments&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Over time, customers can expect similar &lt;STRONG&gt;single‑command backup configuration experiences&lt;/STRONG&gt; for additional Azure Backup‑supported workloads — bringing consistency and ease of adoption across their backup strategy.&lt;/P&gt;
&lt;P&gt;For more information, see &lt;A href="https://learn.microsoft.com/en-us/azure/backup/azure-kubernetes-service-cluster-backup-using-cli#configure-backup-using-a-single-azure-cli-command" target="_blank" rel="noopener"&gt;how to configure AKS backup using a single CLI command&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Thu, 16 Apr 2026 07:50:59 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/announcing-one-command-backup-configuration-for-aks-with-azure/ba-p/4511852</guid>
      <dc:creator>shobhitgarg</dc:creator>
      <dc:date>2026-04-16T07:50:59Z</dc:date>
    </item>
    <item>
      <title>Announcing Public Preview for Essential Machine Management</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/announcing-public-preview-for-essential-machine-management/ba-p/4502721</link>
      <description>&lt;P&gt;Managing servers and VMs across Azure, on premises, and multi-cloud environments often means turning on core capabilities—monitoring, updates, inventory, and configuration—through separate setup experiences. We’ve heard feedback that this makes it harder to get visibility into machine state and take actions.&lt;/P&gt;
&lt;P&gt;We’re excited to announce the &lt;STRONG&gt;public preview of Essential Machine Management experience within Compute Infrastructure Hub&lt;/STRONG&gt;—a new entry point in Azure that streamlines onboarding for machines at scale and enables basic management capabilities. Start once at subscription scope, get a clear view of what’s turned on, and move from setup to operations faster across your Azure and cloud and hybrid estate.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;What is Essential Machine Management?&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Essential Machine Management is a &lt;STRONG&gt;centralized onboarding experience&lt;/STRONG&gt; that helps customers enroll their machines into a set of selected cloud-native management services from Azure in a simple, scalable way,&lt;/P&gt;
&lt;P&gt;Instead of enabling monitoring, updates, inventory, and configuration independently per machine, Essential Machine Management allows you to enroll entire &lt;STRONG&gt;subscriptions&lt;/STRONG&gt; at once, including both &lt;STRONG&gt;Azure Virtual Machines&lt;/STRONG&gt; and &lt;STRONG&gt;Azure Arc–enabled servers. &lt;/STRONG&gt;These services are pre-configured with best practices, enabling customers with out-of-the-box value right away.&lt;/P&gt;
&lt;P&gt;Once enrolled, current and future machines in the selected subscriptions are automatically onboarded to the enabled management services, helping ensure consistent visibility and operational coverage from day one.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;What management capabilities are enabled?&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Using Essential Machine Management, you can quickly onboard machines to multiple Azure management capabilities, including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-monitor/vm/vminsights-overview" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Monitoring insights and recommended alerts&lt;/STRONG&gt;&lt;/A&gt; for machine health and performance&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/update-manager/overview" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Azure Update Manager&lt;/STRONG&gt;&lt;/A&gt; to help keep machines secure and compliant&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/azure-change-tracking-inventory/overview-monitoring-agent" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Change tracking and inventory&lt;/STRONG&gt;&lt;/A&gt; for visibility and auditability&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/governance/machine-configuration/overview/01-overview-concepts" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Machine configuration&lt;/STRONG&gt;&lt;/A&gt; for managing in-machine configuration, compliance and security&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/governance/machine-configuration/how-to/assign-security-baselines/overview-page" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Azure Security baseline policy&lt;/STRONG&gt;&lt;/A&gt; is a set of tailored rules to assess your machine's security posture&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These services help keep your infrastructure secure and healthy.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;How much does it cost?&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;Azure VMs:&lt;/STRONG&gt; For Azure Virtual Machines only, capabilities enabled by Essential Machine Management are provided at no additional charge.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Arc-enabled servers:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;For Azure Arc-enabled servers with Windows Server Software Assurance, Windows Server PayGo, and Windows Server Extended Security Updates, capabilities enabled by Essential Machine Management are provided at no additional charge.&lt;/LI&gt;
&lt;LI&gt;For &lt;STRONG&gt;all other Arc-enabled servers&lt;/STRONG&gt;, Essential Machine Management will be priced at $9 per server per month once billing is enabled. See more details&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/operations/configuration-enrollment?toc=%2Fazure%2Fvirtual-machines%2Ftoc.json#essentials-tier" target="_blank"&gt;here&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;STRONG&gt;Getting started&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;If you manage Azure VMs or Arc-enabled servers and are looking to simplify how you onboard and manage machines at scale, Essential Machine Management feature is now available for you to try in &lt;STRONG&gt;public preview&lt;/STRONG&gt;. Check out the preview in the &lt;A href="https://aka.ms/emm-portal" target="_blank" rel="noopener"&gt;Azure Portal&lt;/A&gt; under &lt;STRONG&gt;Compute infrastructure --&amp;gt;&lt;/STRONG&gt;&lt;STRONG&gt; Monitoring + Operations --&amp;gt; Essential Machine Management (preview&lt;/STRONG&gt;&lt;STRONG&gt;):&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Check out Essential Machine Management now and reach out to &lt;A href="mailto:machineenrollmentsupport@microsoft.com" target="_blank" rel="noopener"&gt;machineenrollmentsupport@microsoft.com&lt;/A&gt; for any feedback or support. Learn more about Essential Machine Management &lt;A href="https://aka.ms/EssentialMachineManagement" target="_blank" rel="noopener"&gt;here.&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 06 Apr 2026 18:54:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/announcing-public-preview-for-essential-machine-management/ba-p/4502721</guid>
      <dc:creator>Meagan McCrory</dc:creator>
      <dc:date>2026-04-06T18:54:19Z</dc:date>
    </item>
    <item>
      <title>Azure Policy: Required Actions for Docker Content Trust Deprecation in Azure Container Registry</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/azure-policy-required-actions-for-docker-content-trust/ba-p/4478951</link>
      <description>&lt;P&gt;As Azure evolves, certain features are deprecated to streamline services and improve security and performance. One such upcoming change is the &lt;A href="https://azure.microsoft.com/en-us/updates?searchterms=content+trust" target="_blank"&gt;deprecation of the Docker Content Trust (DCT) feature in Azure Container Registry (ACR) &lt;/A&gt;which is ongoing over a three-year period. This change will eventually remove the &lt;EM&gt;trustPolicy &lt;/EM&gt;property from underling APIs.&lt;/P&gt;
&lt;P&gt;This blog post explains what is changing, the potential impact on your Azure Policy environment, and steps you can take to mitigate disruption.&lt;/P&gt;
&lt;H1&gt;What is Changing?&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;The &lt;STRONG&gt;Docker Content Trust (DCT) &lt;/STRONG&gt;feature in ACR is being deprecated. As part of this process:
&lt;UL&gt;
&lt;LI&gt;The &lt;EM&gt;trustPolicy&lt;/EM&gt; property will be removed from ARM APIs in a future version.&lt;/LI&gt;
&lt;LI&gt;The Azure Policy &lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/policy/concepts/definition-structure-alias" target="_blank"&gt;aliases&lt;/A&gt; &lt;/STRONG&gt;referencing this property will eventually be impacted.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;Affected aliases include:
&lt;UL&gt;
&lt;LI style="font-style: italic;"&gt;&lt;EM&gt;Microsoft.ContainerRegistry/registries/trustPolicy&lt;/EM&gt;&lt;/LI&gt;
&lt;LI style="font-style: italic;"&gt;&lt;EM&gt;Microsoft.ContainerRegistry/registries/trustPolicy.type&lt;/EM&gt;&lt;/LI&gt;
&lt;LI style="font-style: italic;"&gt;&lt;EM&gt;Microsoft.ContainerRegistry/registries/trustPolicy.status&lt;/EM&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;Key findings:
&lt;UL&gt;
&lt;LI&gt;No built-in policy definitions currently use these aliases, so no built-ins will be deprecated because of this feature deprecation.&lt;/LI&gt;
&lt;LI&gt;The alias &lt;EM&gt;trustPolicy.status&lt;/EM&gt; is modifiable, so any active modify policies targeting this property will break when the property is removed. This alias will be removed.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Impacts on Azure Policy&lt;/H1&gt;
&lt;P&gt;If you have active policy assignments referencing these aliases, you will need to update or remove them during the deprecation period to avoid future compliance issues:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Existing policies will eventually become non-compliant for any new ACR resources. For example, if a policy assignment requires &lt;EM&gt;trustPolicy&lt;/EM&gt; to be enabled (&lt;EM&gt;Microsoft.ContainerRegistry/registries/trustPolicy.status == "enabled"&lt;/EM&gt;), but the ACR &lt;EM&gt;trustPolicy&lt;/EM&gt; property can no longer be set due to deprecation, then any new ACRs created after that point will automatically be noncompliant with the policy.&lt;/LI&gt;
&lt;LI&gt;Policies using the &lt;STRONG&gt;modifiable alias&lt;/STRONG&gt; (&lt;EM&gt;trustPolicy.status&lt;/EM&gt;) will fail when the alias is deleted or marked non-modifiable at the end of the deprecation period.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Steps to Mitigate the Impact&lt;/H1&gt;
&lt;P&gt;To ensure a smooth transition:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Identify Affected Policies and Assignments:&lt;/STRONG&gt; Locate any custom policy definitions in your environment referencing the affected aliases.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Update Policy Definitions:&lt;/STRONG&gt; Remove or replace references to &lt;EM&gt;trustPolicy&lt;/EM&gt; properties in your policy definitions. If the policy's only purpose is to evaluate the ACR &lt;EM&gt;trustPolicy&lt;/EM&gt;, consider removing the definition altogether.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Test and Validate:&lt;/STRONG&gt; After updating policies, validate that they enforce compliance as intended without relying on deprecated properties.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Monitor for Updates:&lt;/STRONG&gt; Stay informed by monitoring Azure Container Registry &lt;A href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-content-trust-deprecation" target="_blank"&gt;retirement documentation&lt;/A&gt; for more details on transitioning from Docker Content Trust to &lt;STRONG&gt;Notary Project&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Wed, 17 Dec 2025 22:36:46 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/azure-policy-required-actions-for-docker-content-trust/ba-p/4478951</guid>
      <dc:creator>ShannonHicks</dc:creator>
      <dc:date>2025-12-17T22:36:46Z</dc:date>
    </item>
    <item>
      <title>Announcing General Availability for Azure Resource Graph (ARG) GET/LIST API</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/announcing-general-availability-for-azure-resource-graph-arg-get/ba-p/4474188</link>
      <description>&lt;P&gt;ARG GET/LIST API delivers 10X higher throttling quotas to callers compared to &lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/guidance-for-throttled-requests#understand-throttling-headers" target="_blank" rel="noopener"&gt;ARG query&lt;/A&gt; unlocking a more scalable, resilient way to perform resource lookups in Azure. ARG GET/LIST API is a new platform capability within Azure Resource Graph that provides a high-performance experience for both Point GET and collection GET requests. A key advantage of this capability is its ability to significantly reduce READ throttling for high volume calls efficiently. This is made possible through intelligent control plane routing based on a query parameter controlled by the caller. When a specific query parameter is included, requests are automatically directed to this optimized ARG GET/LIST backend. When the parameter is omitted, requests flow to the Resource provider —ensuring flexibility and backward compatibility.&lt;/P&gt;
&lt;H1&gt;What Challenge Are We Addressing?&lt;/H1&gt;
&lt;P&gt;Azure Read Throttling is a significant challenge for many customers. When services hit throttling limits, applications may experience performance degradation, elevated latency, or even failed requests—issues that can disrupt critical workloads and customer operations.&lt;/P&gt;
&lt;P&gt;The ARG GET/LIST API is designed to directly address this problem. By routing GET and LIST calls through Azure Resource Graph’s scalable indexing infrastructure and intelligent control-plane routing, it dramatically reduces the likelihood of read throttling. Best of all, it follows the ARM control plane GET APIs request response contract, allowing you to benefit from improved performance and reliability with minimal effort, appending the flag “useResourceGraph=true”.&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;When to use Azure Resource Graph (ARG) GET/LIST API&lt;/H1&gt;
&lt;P&gt;The ARG GET/LIST API is designed for scenarios where you need to retrieve a single resource by its ID or list resources of the same type within a defined scope—whether that's a subscription, resource group, or parent resource.&lt;/P&gt;
&lt;P&gt;You should consider using the ARG GET/LIST API if your service fits into one or more of the following categories:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;H6&gt;High Volume of GET Calls Within a Single Scope:&lt;/H6&gt;
Your service issues a large number of GET requests targeting resources within a single subscription or resource group, without the need for cross-subscription queries, complex filters, or joins.&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;Risk of Throttling or Quota Competition:&lt;/H6&gt;
Your service produces a high volume of requests and may encounter issues such as::&lt;/LI&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;Experience throttling during sudden traffic spikes.&lt;/LI&gt;
&lt;LI&gt;Quota competition, where other workloads in the same subscription consume shared quota limits, causing your service to be throttled.&lt;/LI&gt;
&lt;LI&gt;Bursty traffic patterns, where large volume of GET requests are issued within a short time window, increasing the chance of throttling.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;H6&gt;Need for High Availability and Faster Performance:&lt;/H6&gt;
Your service depends on consistent; low-latency GET operations for either single-resource lookups or listing resources within a specific scope&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;The ARG GET/LIST API is currently supported only for resources in the &lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/reference/supported-tables-resources#resources" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;resources&lt;/STRONG&gt;&lt;/A&gt; and &lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/reference/supported-tables-resources#computeresources" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;computeresources&lt;/STRONG&gt;&lt;/A&gt; tables.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H1&gt;Using the ARG GET/LIST API&lt;/H1&gt;
&lt;P&gt;To get started with the ARG GET/LIST API, begin by assessing whether your scenario aligns with the recommended calling patterns and throttling considerations described earlier. Once confirmed, simply append the parameter &lt;STRONG&gt;&amp;amp;useResourceGraph=true&lt;/STRONG&gt; to your eligible GET/LIST API calls. This flag routes your request through the Azure Resource Graph GET/LIST API backend, allowing you to take advantage of its optimized performance and query efficiency. No calls will route to ARG GET/LIST backend automatically. The switch is entirely in the user’s control—the call will route to ARG GET/LIST API only when you explicitly include the &lt;STRONG&gt;useResourceGraph=true&lt;/STRONG&gt; parameter in your request.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Follow the ARG GET/LIST API contract here&lt;/STRONG&gt; - &lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/azure-resource-graph-get-list-api#arg-getlist-api-contract" target="_blank" rel="noopener"&gt;Azure Resource Graph GET/LIST API Guidance - Azure Resource Graph | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Let’s walk through a simple example of retrieving a Virtual Machine (VM) along with its&amp;nbsp;&lt;EM&gt;InstanceView&lt;/EM&gt; through ARG Query vs. ARM API vs. ARG GET/LIST API to show the difference in the calling experience.&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; Using an ARG Query (via ARG Explorer)&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;In ARG Explorer, you can use Kusto Query Language (KQL) to query resources.&lt;BR /&gt;A sample query to retrieve a specific VM looks like this:&lt;/P&gt;
&lt;LI-CODE lang="kusto"&gt;Resources
| where type =~ 'microsoft.compute/virtualmachines'
| where id =~ '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/microsoft.compute/virtualmachines/{vm}'
&lt;/LI-CODE&gt;
&lt;P&gt;This query filters the Resource Graph index to return the VM resource.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt; Using the ARM (Compute RP) API&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The equivalent ARM API call to retrieve the VM &lt;EM&gt;with InstanceView&lt;/EM&gt; is:&lt;/P&gt;
&lt;LI-CODE lang="http"&gt;GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/microsoft.compute/virtualmachines/{vm}?api-version=2024-07-01&amp;amp;$expand=instanceView&lt;/LI-CODE&gt;
&lt;P&gt;This hits the Compute Resource Provider, pulls the VM state, and expands the instanceView section.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;STRONG&gt; Using the ARG GET/LIST API&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;ARG GET/LIST APIs that follow the &lt;EM&gt;same&lt;/EM&gt; request structure as ARM—but with an additional flag that routes the call through ARG:&lt;/P&gt;
&lt;LI-CODE lang="http"&gt;GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/microsoft.compute/virtualmachines/{vm}?api-version=2024-07-01&amp;amp;$expand=instanceView&amp;amp;useResourceGraph=true&lt;/LI-CODE&gt;
&lt;P&gt;The important distinction here is the &lt;STRONG&gt;useResourceGraph=true&lt;/STRONG&gt; parameter, which routes the call through ARM to serve the response through ARG’s GET/LIST backend.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sample Response&amp;nbsp;-&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;You can find more examples in our documentation - &lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/azure-resource-graph-get-list-api#some-frequently-used-examples" target="_blank" rel="noopener"&gt;Azure Resource Graph GET/LIST API Guidance - Azure Resource Graph | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;H1&gt;Video Walkthrough&lt;/H1&gt;
&lt;P&gt;&lt;A href="https://www.youtube.com/watch?v=h6ieZqCO_90" target="_blank" rel="noopener"&gt;Increase Throttling Quota via Azure Resource Graph&lt;/A&gt;&lt;/P&gt;
&lt;H1&gt;Learn More&lt;/H1&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/azure-resource-graph-get-list-api" target="_blank" rel="noopener"&gt;Azure Resource Graph GET/LIST API Overview&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/azure-resource-graph-get-list-api#known-limitations" target="_blank" rel="noopener"&gt;Known Limitations&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/azure-resource-graph-get-list-api#frequently-asked-questions" target="_blank" rel="noopener"&gt;Frequently Asked Questions&lt;/A&gt;&lt;/P&gt;
&lt;H1&gt;Share Your Feedback&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;For questions and feedback, you can reach us at &lt;A href="mailto:argpms@microsoft.com" target="_blank" rel="noopener"&gt;Azure Resource Graph team &lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Share Product feedback and ideas with us at &lt;A href="https://feedback.azure.com/d365community/forum/675ae472-f324-ec11-b6e6-000d3a4f0da0" target="_blank" rel="noopener"&gt;Azure Governance · Community&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Happy Querying!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Dec 2025 04:39:28 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/announcing-general-availability-for-azure-resource-graph-arg-get/ba-p/4474188</guid>
      <dc:creator>JaspreetKaur</dc:creator>
      <dc:date>2025-12-03T04:39:28Z</dc:date>
    </item>
    <item>
      <title>Azure Governance @ Ignite 2025</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/azure-governance-ignite-2025/ba-p/4471112</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Recap: Azure Governance @ Ignite 2025&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Azure governance is thrilled to be back at ignite this year with some exciting updates. In this blog we will be sharing highlights from the session, overviews on new releases, and links on how you can get started using governance products including Azure Policy &amp;amp; Service Groups to maintain a well governed environment where you can deploy secure applications. Make sure to catch the recording if you missed it to see how Microsoft deploys these products in practice! &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Service Groups &lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Service groups is the newest product in the Azure governance suite allowing you to maintain more dynamic and flexible resource hierarchies. To recap, service groups provide:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Low Privilege Management:&lt;/STRONG&gt;&amp;nbsp;Service Groups are designed to operate with minimal permissions, ensuring that users can manage resources without needing excessive access and appealing to multiple personas. Access to a Service Group does not grant role-based access control or policy inheritance to its members.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Flexible and Varying Hierarchies:&lt;/STRONG&gt;&amp;nbsp;Azure resources and scopes, from anywhere in the tenant, can become members of one or multiple service groups. Additionally, Service Groups can be nested providing the ability to have multiple hierarchy structures, i.e. Cost Center, Product, Organization, and more!&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;Service groups has recently gone &lt;STRONG&gt;Public Preview&lt;/STRONG&gt; and this year at ignite we are excited to announce new integrations including,&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; &lt;/STRONG&gt;&lt;STRONG&gt;Azure Monitoring&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt; &lt;/STRONG&gt;&lt;STRONG&gt;Azure Resiliency&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Stay tuned for future integrations and get started using service groups today at: aka.ms//servicegroups&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Azure Policy&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This ignite we are excited to showcase new releases enriching the power of the policy language and improving ease of use through major UX improvements.&lt;/P&gt;
&lt;P&gt;To start off, we announced our public preview for&amp;nbsp;&lt;STRONG&gt;Identity Based Exemptions, &lt;/STRONG&gt;a new type of exemption resource that targets the callers service principal versus the scope on which the exemption is applied. Allowing admins to place targeted exemptions for approved service principals, to avoid over exempting without interrupting business critical workflows.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;New Home Page Experience! &lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;As the policy framework has expanded, the focus of your policy management has expanded beyond just compliance, to other aspects of the policy deployment lifecycle, including exemptions &amp;amp; remediations. We also know that one size does not fit all, so we are excited to release a new Azure policy UX landing page that provides a refreshed view on compliance, policy status, and will showcase how to get started using new primitives &amp;amp; releases. Try it out and let us know what you think!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Machine Configuration Customizable Baselines&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The Azure Windows and Azure Linux baselines have provided a standard set of guidance for how to configure server operating systems in Azure. To make these baselines more relevant to changing regulatory standards &amp;amp; business goals, we’re&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;releasing an extensibility framework to make it easier than ever to deploy custom Azure baselines through Azure policy &amp;amp; Machine configuration.&lt;/LI&gt;
&lt;LI&gt;Aligning the baseline content to be aligned with CIS across our supported distributions&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Getting started is easy, select the baseline that you’re interested in applying and adjust any settings based on business requirements.&lt;/P&gt;
&lt;P&gt;For more details on getting started visit: aka.ms//machinebaselines&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 22 Nov 2025 01:24:16 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/azure-governance-ignite-2025/ba-p/4471112</guid>
      <dc:creator>jodiboone</dc:creator>
      <dc:date>2025-11-22T01:24:16Z</dc:date>
    </item>
    <item>
      <title>Optimize Your Cloud Environment Using Agentic AI</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/optimize-your-cloud-environment-using-agentic-ai/ba-p/4469772</link>
      <description>&lt;P&gt;In today’s cloud-first world, optimization is no longer a luxury—it’s a strategic imperative. As IT professionals and developers navigate increasingly complex environments, the need to reduce costs, improve sustainability, and accelerate decision-making has never been more urgent.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;At Ignite 2025, Microsoft is introducing a new wave of agentic capabilities within Azure Copilot—one of the key capabilities includes the &lt;A href="https://aka.ms/OptimizationAgent" target="_blank" rel="noopener"&gt;optimization agent&lt;/A&gt;, designed to help you identify, validate, and act on opportunities to streamline cloud operations. For FinOps teams, this agent becomes especially powerful, enabling cost governance, carbon insights, and actionable recommendations to maximize financial efficiency at scale.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;From Complexity to Clarity&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;For users familiar with Azure’s cost and performance tools, the new&amp;nbsp;&lt;A href="https://aka.ms/OptimizationOpsCenter" target="_blank" rel="noopener"&gt;operations center&lt;/A&gt; experience in the Azure Portal provides a unified agentic experience to monitor spend and carbon emissions side by side, surface the most critical optimization opportunities, and seamlessly trigger actions by invoking the Optimization agent—bringing governance, efficiency, and sustainability into one streamlined experience.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;What’s New in Optimization&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The &lt;A href="https://aka.ms/OptimizationAgent" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;optimization agent&lt;/STRONG&gt;&lt;/A&gt; in Azure Copilot empowers teams to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Identify top actions&lt;/STRONG&gt; prioritized by impact, cost savings, and ease of implementation.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Evaluate cost and carbon impacts side-by-side&lt;/STRONG&gt;, helping you make informed decisions that align with financial and sustainability goals.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Validate recommendations&lt;/STRONG&gt; with supporting evidence, current / projected utilization trends, and alternative SKU choices.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Accelerate implementation&lt;/STRONG&gt; with step-by-step guidance and agentic workflows that reduce toil and increase confidence.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These capabilities are designed to scale FinOps impact, enabling collaboration across engineering, finance, procurement, and sustainability teams—all within a unified experience.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;A Day in the Life: FinOps in Action&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Let’s step into the shoes of a FinOps practitioner at a large enterprise navigating the complexities of cost management.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It’s Monday morning. Over the weekend, a set of development VMs were left running, quietly accumulating costs. The &lt;A href="https://aka.ms/OptimizationAgent" target="_blank" rel="noopener"&gt;optimization agent&lt;/A&gt;—a capability within Azure Copilot—surfaces a top action: resize or shut down the idle resources. With a few clicks, the practitioner reviews the supporting evidence, including usage trends, cost impact, and carbon footprint. The agent offers visibility over alternative SKUs and guides the practitioner through a step-by-step implementation—all within the same interface.&lt;/P&gt;
&lt;P&gt;But it doesn’t stop there. For teams that prefer automation or scripting, the agent also generates Azure CLI and PowerShell scripts tailored to the recommended action. This gives practitioners flexibility: they can execute changes directly in the portal or integrate scripts into their existing workflows for repeatability and scale. The experience is seamless—every recommendation is actionable, verifiable, and aligned with enterprise policy.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;By midweek, the practitioner has implemented multiple optimizations without leaving the console or writing custom code. Each action is logged for audit visibility, ensuring compliance and transparency across the organization. What used to take hours of manual investigation and coordination now happens in minutes, freeing the team to focus on strategic initiatives rather than firefighting cost overruns.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Why It Matters&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;These aren’t just features—they’re answers to the pain points customers have been voicing for years.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Cost visibility and predictability&lt;/STRONG&gt;: Azure Copilot centralizes insights across subscriptions, helping teams avoid surprise bills and understand where every dollar goes.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Resource inefficiencies&lt;/STRONG&gt;: The optimization agent proactively identifies underutilized resources and guide teams to act before costs escalate.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Scalability and complexity&lt;/STRONG&gt;: Azure Copilot’s unified experience simplifies operations for even the most complex setups.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Azure Copilot isn’t just simplifying cloud operations—it’s transforming how teams collaborate, govern, and optimize.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Get Started at Ignite&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://ignite.microsoft.com/en-US/sessions/BRK149" target="_blank"&gt;At Ignite 2025&lt;/A&gt;, you’ll get hands-on with Azure Copilot’s optimization capabilities. Explore how intelligent assistance can help you:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Reduce cloud costs&lt;/LI&gt;
&lt;LI&gt;Improve sustainability metrics&lt;/LI&gt;
&lt;LI&gt;Strengthen governance and compliance&lt;/LI&gt;
&lt;LI&gt;Drive better outcomes—faster&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Copilot: turning cloud operations into intelligent collaboration. &lt;/STRONG&gt;&lt;A class="lia-external-url" href="https://aka.ms/AzureCopilot/Agents" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Sign up for the Agents in Azure Copilot Limited (Preview&lt;/STRONG&gt;)&lt;/A&gt;&lt;STRONG&gt; and try the experience today.&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 18 Nov 2025 16:20:32 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/optimize-your-cloud-environment-using-agentic-ai/ba-p/4469772</guid>
      <dc:creator>riteshkini</dc:creator>
      <dc:date>2025-11-18T16:20:32Z</dc:date>
    </item>
    <item>
      <title>Improve your resiliency posture with new capabilities and intelligent assistance</title>
      <link>https://techcommunity.microsoft.com/t5/azure-governance-and-management/improve-your-resiliency-posture-with-new-capabilities-and/ba-p/4469771</link>
      <description>&lt;P&gt;In today’s cloud-first world, resilience isn’t optional—it’s mission-critical. The next phase of cloud operations is about simplifying workflows, enhancing control, and removing friction from daily work. At&amp;nbsp;&lt;STRONG&gt;Microsoft Ignite 2025&lt;/STRONG&gt;, Azure is redefining &lt;A href="https://azure.microsoft.com/en-us/solutions/resiliency" target="_blank" rel="noopener"&gt;resiliency&lt;/A&gt; with expanded capabilities to include Infrastructure Resiliency, Data Resiliency, and Cyber Recovery with AI-powered innovations designed to help you maintain uninterrupted business continuity.&lt;/P&gt;
&lt;H2&gt;Introducing the resiliency agent in Azure Copilot&lt;/H2&gt;
&lt;P&gt;With natural language guidance and automated actions, we are announcing the preview of the resiliency agent in &lt;A href="https://aka.ms/ignite25/azurecopilotblog" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Azure Copilot&lt;/STRONG&gt;&lt;/A&gt; which helps you &lt;STRONG&gt;assess your current posture, fix gaps with intelligent automation, and continuously monitor your environment&lt;/STRONG&gt; to keep critical workloads safe from disruptions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;Infra Resiliency: Leverage Guided Experiences to Become Zonally Resilient&amp;nbsp;&lt;/H2&gt;
&lt;P&gt;The new Infrastructure resiliency experiences are designed to keep your critical applications running—even during unexpected zonal outages. These new capabilities empower you to actively assess and improve your architecture and continuously validate your resiliency posture.&lt;EM&gt; &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Leverage at-scale views across Resources and &lt;A href="https://learn.microsoft.com/en-us/azure/governance/service-groups/overview" target="_blank" rel="noopener"&gt;Service Groups&lt;/A&gt; to uncover resiliency blind spots and prioritize remediation. Set resilience targets for your key workloads and invoke the resiliency agent from the &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/operations/overview" target="_blank" rel="noopener" data-lia-auto-title="operations center" data-lia-auto-title-active="0"&gt;operations center&lt;/A&gt; in Azure to proactively find resources (like virtual networks or firewalls) that are deployed in only one availability zone and could become single points of failure. Once identified the agent will &lt;STRONG&gt;highlight which resources aren’t zone-resilient and the risks they pose&lt;/STRONG&gt;, such as potential downtime or IP address changes during a zone failure, enabling you to prioritize the most crucial gaps first.&amp;nbsp; Then with a click, the agent will generate &lt;STRONG&gt;ready-to-run scripts&lt;/STRONG&gt; (or commands) to distribute those resources across zones to address configuration drift and strengthen architecture. This guided automation ensures that even if an entire Azure zone goes down, your application stays up.&lt;/P&gt;
&lt;P&gt;You can then validate readiness with built-in failure scenario drill templates (e.g., simulating a full availability zone outage) and proactively test failover behaviors without impacting production using default faults or custom runbooks. Create predefined recovery plans that sequence the failover of your application’s components during test drills or actual failovers and execute them with a single click to automatically fail over workloads to another Availability Zone. Track failover progress in real time, monitor key performance metrics, and export attestation reports for compliance and audit readiness.&lt;/P&gt;
&lt;P&gt;By streamlining what used to require multiple tools and significant expertise, you can utilize proactive insights, automated recovery, and continuous validation, to confidently strengthen your architecture, maintain operational continuity, and &lt;STRONG&gt;achieve high availability by design&lt;/STRONG&gt; without the usual complexity.&lt;/P&gt;
&lt;H2&gt;Beyond Infrastructure: Data and Cyber Recovery&lt;/H2&gt;
&lt;P&gt;The expanded resiliency experiences go beyond infrastructure, bringing in powerful new &amp;amp; existing capabilities that help you stay protected and recover fast, whether it's meeting your RPO and RTO goals through smarter data protection or defending against ransomware with built-in cyber-recovery. At Ignite, we’re excited to showcase new innovations designed to help you strengthen your business continuity strategy and stay ahead of evolving threats.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;Data Resiliency: Fortify your Cloud Data with enhanced workload protection &amp;amp; disaster recovery&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Never&lt;/STRONG&gt;&lt;STRONG&gt; get caught without a backup plan.&lt;/STRONG&gt; &lt;A href="https://azure.microsoft.com/en-us/products/backup/" target="_blank" rel="noopener"&gt;Azure Backup&lt;/A&gt; is evolving toward application-centric recovery, expanding coverage to protect critical cloud-native workloads that power enterprise data apps. As part of this journey, we’re introducing &lt;STRONG&gt;vaulted backups for ADLS Gen2&lt;/STRONG&gt;—a native, secure, and managed solution that safeguards data against deletion, corruption, and malicious threats. Additionally, agentless backup for &lt;STRONG&gt;Windows and Linux VMs&lt;/STRONG&gt; is now available, offering crash-consistent protection across multiple disks with high-frequency, lightweight backups. This makes it ideal for performance-sensitive workloads such as databases, delivering reliable protection with minimal operational overhead.&lt;/P&gt;
&lt;P&gt;And rather than manually checking each service or using separate dashboards for backups and disaster recovery, you can ask the resiliency agent to summarize your &lt;STRONG&gt;backup coverage&lt;/STRONG&gt; across both primary and secondary regions. It will report which virtual machines, databases, or other resources are already backed up and replicating, and which ones might need attention. With granular recovery, long-term retention for compliance, and enterprise-grade management through the &lt;A href="https://portal.azure.com/?feature.customPortal=false#view/Microsoft_Azure_BCDRCenter/AbcCenterMenuBlade/~/overview" target="_blank" rel="noopener"&gt;Resiliency blade in Azure&lt;/A&gt;, you can confidently ensure business continuity across your most vital workloads.&lt;/P&gt;
&lt;P&gt;As part of our continued investment in resilience and scale, &lt;A href="https://azure.microsoft.com/en-us/products/site-recovery/" target="_blank" rel="noopener"&gt;Azure Site Recovery&lt;/A&gt; now offers a suite of powerful enhancements to support enterprise-grade disaster recovery. &lt;STRONG&gt;Capacity Guidance&lt;/STRONG&gt; now provides alternative VM size recommendations during failovers to improve allocation success in target regions. &lt;STRONG&gt;ASR now supports up to 5x churn (500 MB/s per VM)&lt;/STRONG&gt;, enabling protection of high IOPS workloads and ensuring robust recovery for data-intensive applications. We’ve also expanded disk support with &lt;STRONG&gt;Premium SSD v2 and Ultra Disks &lt;/STRONG&gt;now fully supported, allowing seamless protection of performance-critical workloads across Azure regions. Finally, &lt;STRONG&gt;ASR enables failback from Azure VMs to on-premises Hyper-V &lt;/STRONG&gt;even when the original replication used a storage account and the failed-over VM was converted to managed disks, offering greater flexibility and control in hybrid recovery scenarios.&lt;/P&gt;
&lt;P&gt;For any critical resource that needs failover and failback capabilities, the agent can recommend the next step, like enabling Azure Site Recovery for cross-region replication. By turning on Site Recovery (with the agent’s guidance), you add a second layer of protection: if your primary region suffers an outage, those critical VMs can fail over to a secondary region with minimal downtime. In short, the resiliency agent ensures your data meets your business continuity goals. It helps you balance recovery point objectives (keeping data loss to a minimum with frequent backups) and recovery time objectives (restoring services quickly via failover). Through Copilot’s conversational interface, you can instantly get answers like &lt;EM&gt;“Are all my tier-1 workloads protected in a secondary region?”&lt;/EM&gt; and follow prompts to fill any gaps reducing the need to hunt through multiple tools. The result is a cloud estate that’s not only backed up, but truly disaster-ready.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;Cyber Recovery: Safeguard your critical data against Ransomware Attacks&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Fortify your backups against cyber threats.&lt;/STRONG&gt; Strengthen your organization’s cyber recovery with Azure Backup’s &lt;STRONG&gt;Vault Soft Delete&lt;/STRONG&gt;. This feature is enabled by default across all Recovery Services Vaults and ensures that backups remain recoverable for at least 14 days, even in the event of accidental or malicious deletions. It applies comprehensively to vaults, containers, backup items, and recovery points, offering robust protection against ransomware threats.&lt;/P&gt;
&lt;P&gt;The resiliency agent in Azure helps guard your backup data and recovery systems so they remain reliable even if attackers strike. It continuously reviews the &lt;STRONG&gt;security posture of your Recovery Services Vaults&lt;/STRONG&gt; (where your backups are stored) and other protection settings. If it finds that any backup vault is missing critical safeguards—say, if &lt;STRONG&gt;soft-delete&lt;/STRONG&gt; or &lt;STRONG&gt;immutability&lt;/STRONG&gt; isn’t enabled—it will alert you and recommend enabling them. Through the Copilot interface, you can simply ask something like &lt;EM&gt;“How secure are my backups?”&lt;/EM&gt; and the agent may respond with a summary like: &lt;EM&gt;“4 of 5 backup vaults have soft-delete and immutability on. One vault needs immutability; enable it now?”&lt;/EM&gt; You can then approve the suggestion, and the agent will &lt;STRONG&gt;automatically apply the setting or provide a script&lt;/STRONG&gt; to do so. Through intelligent guidance and recommendations, the resiliency agent ensures your backups are &lt;STRONG&gt;tamper-proof and ready to restore&lt;/STRONG&gt;. Therefore, even if a ransomware attack or accidental deletion hits your environment, you’ll have clean, safe backups to recover from. In essence, the agent helps make sure that &lt;EM&gt;when&lt;/EM&gt; trouble comes, your last line of defense, your backup, remains intact and readily available.&lt;/P&gt;
&lt;P&gt;Additionally, Azure Backup now also integrates with &lt;STRONG&gt;Microsoft Defender for Cloud (MDC)&lt;/STRONG&gt; to enhance the security of Azure VM backups. With a one-time setup via Defender for Servers, Azure Backup automatically assesses the health of recovery points at the time of snapshot creation using Defender signals. This marks a &lt;STRONG&gt;significant step toward proactive threat detection in backups&lt;/STRONG&gt;, helping organizations strengthen their overall cyber resilience posture.&lt;/P&gt;
&lt;P&gt;Together, data resiliency and cyber recovery form a unified defense strategy that ensures enterprise-grade protection across the full spectrum of threats—from accidental data loss to sophisticated ransomware attacks. By combining deep workload-aware backup and disaster recovery with proactive threat detection and secure retention, Azure empowers organizations to safeguard critical data assets and recover swiftly with confidence. This integrated approach not only meets business continuity goals but also strengthens security posture, delivering resilient-by-default coverage for modern cloud environments.&lt;/P&gt;
&lt;H2&gt;Next Steps&lt;/H2&gt;
&lt;P&gt;Azure is reaffirming its commitment to enterprise resilience. Whether it’s a datacenter outage, a cyberattack, or a zonal disaster, your applications and data can keep running and recover swiftly.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Join us at Ignite 2025: &lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;BRK146: &lt;A href="https://ignite.microsoft.com/en-US/sessions/BRK146?source=sessions" target="_blank" rel="noopener"&gt;Resiliency &amp;amp; Recovery with Azure Backup and Site Recovery &lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;BRK148: &lt;A href="https://ignite.microsoft.com/en-US/sessions/BRK148?source=sessions" target="_blank" rel="noopener"&gt;Architect Resilient Apps with Azure Backup and Reliability Features &lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;BRK217: &lt;A href="https://ignite.microsoft.com/en-US/sessions/BRK217?source=sessions" target="_blank" rel="noopener"&gt;Resilience by Design: Secure, Scalable, AI-Ready Cloud with Azure &lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;BRK178: &lt;A href="https://ignite.microsoft.com/en-US/sessions/BRK178?source=sessions" target="_blank" rel="noopener"&gt;Architecting for Resiliency on Azure Infrastructure &lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Connect with Microsoft experts at the &lt;STRONG&gt;Azure Copilot, Operations, and Management expert meet-up booth&lt;/STRONG&gt; to get your questions answered.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Additional Resources: &lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Learn more about specialized agents across the entire cloud management lifecycle: &lt;A href="https://www.youtube.com/watch?v=4AI9Oswnrko" target="_blank" rel="noopener" aria-label="Link Introducing Azure Copilot - YouTube"&gt;Introducing Azure Copilot&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Sign up for the preview of Azure Copilot&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/t5/aka.ms/azurecopilot/agents" target="_blank" rel="noopener"&gt;here&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Read about best practices about how to start, get, and stay resilient &lt;A href="https://aka.ms/resiliency-in-Azure" target="_blank" rel="noopener"&gt;here&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Explore Resiliency features in Azure and join us in this journey from reactive recovery to proactive resilience &lt;A href="https://azure.microsoft.com/en-us/solutions/resiliency" target="_blank" rel="noopener"&gt;here&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Explore new Learn documentation &lt;A href="https://learn.microsoft.com/en-us/azure/resiliency/" target="_blank" rel="noopener"&gt;here&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 18 Nov 2025 16:36:10 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-governance-and-management/improve-your-resiliency-posture-with-new-capabilities-and/ba-p/4469771</guid>
      <dc:creator>rochakm</dc:creator>
      <dc:date>2025-11-18T16:36:10Z</dc:date>
    </item>
  </channel>
</rss>

