Skip to content

Commit 96644c0

Browse files
authored
Merge pull request #262601 from davidsmatlak/ds-update-policy-bicep-quickstart-20240105
Updates Azure Policy Bicep quickstart
2 parents 46f7227 + f95aab5 commit 96644c0

File tree

3 files changed

+146
-67
lines changed

3 files changed

+146
-67
lines changed
Lines changed: 146 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,133 +1,212 @@
11
---
2-
title: "Quickstart: New policy assignment with Bicep file"
3-
description: In this quickstart, you use a Bicep file to create a policy assignment to identify non-compliant resources.
4-
ms.date: 03/24/2022
2+
title: Create a policy assignment with Bicep file
3+
description: In this quickstart, you use a Bicep file to create an Azure policy assignment that identifies non-compliant resources.
4+
ms.date: 01/08/2024
55
ms.topic: quickstart
66
ms.custom: subject-bicepqs, devx-track-bicep
77
---
8-
# Quickstart: Create a policy assignment to identify non-compliant resources by using a Bicep file
98

10-
The first step in understanding compliance in Azure is to identify the status of your resources.
11-
This quickstart steps you through the process of using a
12-
[Bicep](https://github.com/Azure/bicep) file compiled to an Azure Resource
13-
Manager (ARM) deployment template to create a policy assignment to identify virtual machines that
14-
aren't using managed disks. At the end of this process, you'll successfully identify virtual
15-
machines that aren't using managed disks. They're _non-compliant_ with the policy assignment.
9+
# Quickstart: Create a policy assignment to identify non-compliant resources by using a Bicep file
1610

17-
[!INCLUDE [About Azure Resource Manager](../../../includes/resource-manager-quickstart-introduction.md)]
11+
In this quickstart, you use a Bicep file to create a policy assignment that validates resource's compliance with an Azure policy. The policy is assigned to a resource group scope and audits if virtual machines use managed disks. Virtual machines deployed in the resource group that don't use managed disks are _non-compliant_ with the policy assignment.
1812

19-
If your environment meets the prerequisites and you're familiar with using ARM templates, select the
20-
**Deploy to Azure** button. The template opens in the Azure portal.
13+
[!INCLUDE [About Bicep](../../../includes/resource-manager-quickstart-bicep-introduction.md)]
2114

22-
:::image type="content" source="../../media/template-deployments/deploy-to-azure.svg" alt-text="Button to deploy the ARM template for assigning an Azure Policy to Azure." border="false" link="https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2Fquickstarts%2Fmicrosoft.authorization%2Fazurepolicy-assign-builtinpolicy-resourcegroup%2Fazuredeploy.json":::
15+
> [!NOTE]
16+
> Azure Policy is a free service. For more information, go to [Overview of Azure Policy](./overview.md).
2317
2418
## Prerequisites
2519

26-
- If you don't have an Azure subscription, create a [free](https://azure.microsoft.com/free/)
27-
account before you begin.
28-
- Bicep version `0.3` or higher installed. If you don't yet have Bicep CLI or need to update, see
29-
[Install Bicep](../../azure-resource-manager/bicep/install.md).
20+
- If you don't have an Azure account, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
21+
- [Bicep](../../azure-resource-manager/bicep/install.md).
22+
- [Azure PowerShell](/powershell/azure/install-az-ps) or [Azure CLI](/cli/azure/install-azure-cli).
23+
- [Visual Studio Code](https://code.visualstudio.com/) and the [Bicep extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep).
24+
- `Microsoft.PolicyInsights` must be [registered](../../azure-resource-manager/management/resource-providers-and-types.md) in your Azure subscription.
3025

3126
## Review the Bicep file
3227

33-
In this quickstart, you create a policy assignment and assign a built-in policy definition called [_Audit VMs that do not use managed disks_](https://github.com/Azure/azure-policy/blob/master/built-in-policies/policyDefinitions/Compute/VMRequireManagedDisk_Audit.json). For a partial
34-
list of available built-in policies, see [Azure Policy samples](./samples/index.md).
28+
The Bicep file creates a policy assignment for a resource group scope and assigns the built-in policy definition [Audit VMs that do not use managed disks](https://github.com/Azure/azure-policy/blob/master/built-in-policies/policyDefinitions/Compute/VMRequireManagedDisk_Audit.json). For a list of available built-in policies, see [Azure Policy samples](./samples/index.md).
3529

36-
Create the following Bicep file as `assignment.bicep`:
30+
Create the following Bicep file as _policy-assignment.bicep_.
31+
32+
1. Open Visual Studio Code and select **File** > **New Text File**.
33+
1. Copy and paste the Bicep file into Visual Studio Code.
34+
1. Select **File** > **Save** and use the filename _policy-policy-assignment.bicep_.
3735

3836
```bicep
39-
param policyAssignmentName string = 'audit-vm-manageddisks'
37+
param policyAssignmentName string = 'audit-vm-managed-disks'
4038
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
4139
42-
resource assignment 'Microsoft.Authorization/policyAssignments@2021-09-01' = {
43-
name: policyAssignmentName
44-
scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
45-
properties: {
46-
policyDefinitionId: policyDefinitionID
47-
}
40+
resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
41+
name: policyAssignmentName
42+
scope: resourceGroup()
43+
properties: {
44+
policyDefinitionId: policyDefinitionID
45+
description: 'Policy assignment to resource group scope created with Bicep file'
46+
displayName: 'audit-vm-managed-disks'
47+
nonComplianceMessages: [
48+
{
49+
message: 'Virtual machines should use managed disks'
50+
}
51+
]
52+
}
4853
}
4954
5055
output assignmentId string = assignment.id
5156
```
5257

53-
The resource defined in the file is:
58+
The resource type defined in the Bicep file is [Microsoft.Authorization/policyAssignments](/azure/templates/microsoft.authorization/policyassignments).
5459

55-
- [Microsoft.Authorization/policyAssignments](/azure/templates/microsoft.authorization/policyassignments)
60+
For more information about Bicep files:
5661

57-
## Deploy the template
62+
- To find more Bicep samples, go to [Browse code samples](/samples/browse/?expanded=azure&languages=bicep).
63+
- To learn more about template reference's for deployments, go to [Azure template reference](/azure/templates/microsoft.authorization/allversions).
64+
- To learn how to develop Bicep files, go to [Bicep documentation](../../azure-resource-manager/bicep/overview.md).
65+
- To learn about subscription-level deployments, go to [Subscription deployments with Bicep files](../../azure-resource-manager/bicep/deploy-to-subscription.md).
5866

59-
> [!NOTE]
60-
> Azure Policy service is free. For more information, see
61-
> [Overview of Azure Policy](./overview.md).
67+
## Deploy the Bicep file
68+
69+
You can deploy the Bicep file with Azure PowerShell or Azure CLI.
70+
71+
From a Visual Studio Code terminal session, connect to Azure. If you have more than one subscription, run the commands to set context to your subscription. Replace `<subscriptionID>` with your Azure subscription ID.
72+
73+
# [PowerShell](#tab/azure-powershell)
74+
```azurepowershell
75+
Connect-AzAccount
76+
77+
# Run these commands if you have multiple subscriptions
78+
Get-AzSubScription
79+
Set-AzContext -Subscription <subscriptionID>
80+
```
81+
82+
# [Azure CLI](#tab/azure-cli)
83+
84+
```azurecli
85+
az login
86+
87+
# Run these commands if you have multiple subscriptions
88+
az account list --output table
89+
az account set --subscription <subscriptionID>
90+
```
91+
92+
---
6293

63-
After the Bicep CLI is installed and file created, you can deploy the Bicep file with:
94+
The following commands create a resource group and deploy the policy definition.
6495

6596
# [PowerShell](#tab/azure-powershell)
6697

67-
```azurepowershell-interactive
98+
```azurepowershell
99+
New-AzResourceGroup -Name "PolicyGroup" -Location "westus"
100+
68101
New-AzResourceGroupDeployment `
69102
-Name PolicyDeployment `
70103
-ResourceGroupName PolicyGroup `
71-
-TemplateFile assignment.bicep
104+
-TemplateFile policy-assignment.bicep
72105
```
73106

74107
# [Azure CLI](#tab/azure-cli)
75108

76-
```azurecli-interactive
109+
```azurecli
110+
az group create --name "PolicyGroup" --location "westus"
111+
77112
az deployment group create \
78113
--name PolicyDeployment \
79114
--resource-group PolicyGroup \
80-
--template-file assignment.bicep
115+
--template-file policy-assignment.bicep
81116
```
82117

83118
---
84119

85-
Some other resources:
86-
87-
- To find more samples templates, see
88-
[Azure Quickstart Template](https://azure.microsoft.com/resources/templates/?resourceType=Microsoft.Authorization&pageNumber=1&sort=Popular).
89-
- To see the template reference, go to
90-
[Azure template reference](/azure/templates/microsoft.authorization/allversions).
91-
- To learn how to develop ARM templates, see
92-
[Azure Resource Manager documentation](../../azure-resource-manager/management/overview.md).
93-
- To learn subscription-level deployment, see
94-
[Create resource groups and resources at the subscription level](../../azure-resource-manager/templates/deploy-to-subscription.md).
120+
The Bicep file outputs the policy `assignmentId`. You create a variable for the policy assignment ID in the commands that validate the deployment.
95121

96122
## Validate the deployment
97123

98-
Select **Compliance** in the left side of the page. Then locate the _Audit VMs that do not use
99-
managed disks_ policy assignment you created.
124+
After the policy assignment is deployed, virtual machines that are deployed to the _PolicyGroup_ resource group are audited for compliance with the managed disk policy.
100125

101-
:::image type="content" source="./media/assign-policy-template/policy-compliance.png" alt-text="Screenshot of compliance details on the Policy Compliance page." border="false":::
126+
1. Sign in to [Azure portal](https://portal.azure.com)
127+
1. Go to **Policy** and select **Compliance** on the left side of the page.
128+
1. Search for the _audit-vm-managed-disks_ policy assignment.
102129

103-
If there are any existing resources that aren't compliant with this new assignment, they appear
104-
under **Non-compliant resources**.
130+
The **Compliance state** for a new policy assignment is shown as **Not started** because it takes a few minutes to become active.
105131

106-
For more information, see
107-
[How compliance works](./concepts/compliance-states.md).
132+
:::image type="content" source="./media/assign-policy-bicep/policy-compliance.png" alt-text="Screenshot of compliance details on the Policy Compliance page.":::
108133

109-
## Clean up resources
134+
For more information, go to [How compliance works](./concepts/compliance-states.md).
135+
136+
You can also get the compliance state with Azure PowerShell or Azure CLI.
137+
138+
# [PowerShell](#tab/azure-powershell)
139+
```azurepowershell
140+
# Verifies policy assignment was deployed
141+
$rg = Get-AzResourceGroup -Name "PolicyGroup"
142+
Get-AzPolicyAssignment -Name "audit-vm-managed-disks" -Scope $rg.ResourceId
143+
144+
# Shows the number of non-compliant resources and policies
145+
$policyid = (Get-AzPolicyAssignment -Name "audit-vm-managed-disks" -Scope $rg.ResourceId)
146+
Get-AzPolicyStateSummary -ResourceId $policyid.ResourceId
147+
```
148+
149+
The `$rg` variable stores the resource group's properties and `Get-AzPolicyAssignment` shows your policy assignment. The `$policyid` variable stores the policy assignment's resource ID, and `Get-AzPolicyStateSummary` shows the number of non-compliant resources and policies.
150+
151+
# [Azure CLI](#tab/azure-cli)
152+
153+
```azurecli
154+
# Verifies policy assignment was deployed
155+
rg=$(az group show --resource-group PolicyGroup --query id --output tsv)
156+
az policy assignment show --name "audit-vm-managed-disks" --scope $rg
110157
111-
To remove the assignment created, follow these steps:
158+
# Shows the number of non-compliant resources and policies
159+
policyid=$(az policy assignment show --name "audit-vm-managed-disks" --scope $rg --query id --output tsv)
160+
az policy state summarize --resource $policyid
161+
```
162+
163+
The `$rg` variable stores the resource group's properties and `az policy assignment show` displays your policy assignment. The `$policyid` variable stores the policy assignment's resource ID and `az policy state summarize` shows the number of non-compliant resources and policies.
164+
165+
---
166+
167+
## Clean up resources
112168

113-
1. Select **Compliance** (or **Assignments**) in the left side of the Azure Policy page and locate
114-
the _Audit VMs that do not use managed disks_ policy assignment you created.
169+
To remove the assignment from Azure, follow these steps:
115170

116-
1. Right-click the _Audit VMs that do not use managed disks_ policy assignment and select **Delete
171+
1. Select **Compliance** in the left side of the Azure Policy page.
172+
1. Locate the _audit-vm-managed-disks_ policy assignment.
173+
1. Right-click the _audit-vm-managed-disks_ policy assignment and select **Delete
117174
assignment**.
118175

119-
:::image type="content" source="./media/assign-policy-template/delete-assignment.png" alt-text="Screenshot of using the context menu to delete an assignment from the Compliance page." border="false":::
176+
:::image type="content" source="./media/assign-policy-bicep/delete-assignment.png" alt-text="Screenshot of the context menu to delete an assignment from the Policy Compliance page.":::
120177

121-
1. Delete the `assignment.bicep` file.
178+
1. Delete the resource group _PolicyGroup_. Go to the Azure resource group and select **Delete resource group**.
179+
1. Delete the _policy-assignment.bicep_ file.
180+
181+
You can also delete the policy assignment and resource group with Azure PowerShell or Azure CLI.
182+
183+
# [PowerShell](#tab/azure-powershell)
184+
```azurepowershell
185+
Remove-AzPolicyAssignment -Id $policyid.ResourceId
186+
Remove-AzResourceGroup -Name "PolicyGroup"
187+
188+
# Sign out of Azure
189+
Disconnect-AzAccount
190+
```
191+
192+
# [Azure CLI](#tab/azure-cli)
193+
194+
```azurecli
195+
az policy assignment delete --name "audit-vm-managed-disks" --scope $rg
196+
az group delete --name PolicyGroup
197+
198+
# Sign out of Azure
199+
az logout
200+
```
201+
202+
---
122203

123204
## Next steps
124205

125-
In this quickstart, you assigned a built-in policy definition to a scope and evaluated its
126-
compliance report. The policy definition validates that all the resources in the scope are compliant
127-
and identifies which ones aren't.
206+
In this quickstart, you assigned a built-in policy definition to a resource group scope and reviewed its compliance report. The policy definition audits if the virtual machine resources in the resource group are compliant and identifies resources that aren't compliant.
128207

129208
To learn more about assigning policies to validate that new resources are compliant, continue to the
130-
tutorial for:
209+
tutorial.
131210

132211
> [!div class="nextstepaction"]
133212
> [Creating and managing policies](./tutorials/create-and-manage.md)
44.3 KB
Loading
98.5 KB
Loading

0 commit comments

Comments
 (0)