Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
在本快速入门中,你将使用 Bicep 文件创建一个策略分配来验证资源是否符合 Azure 策略。 策略分配给资源组,并对不使用托管磁盘的虚拟机进行审核。 创建策略分配后,可以识别不合规的虚拟机。
Bicep 是一种特定于域的语言 (DSL),使用声明性语法来部署 Azure 资源。 它提供简明的语法、可靠的类型安全性以及对代码重用的支持。 Bicep 会针对你的 Azure 基础结构即代码解决方案提供最佳创作体验。
分配内置策略或方案定义时,引用版本是可选的。 内置定义的策略分配默认为最新版本,并将自动继承次要版本更改(除非另行指定)。
先决条件
- 如果没有 Azure 帐户,请在开始前创建一个试用帐户。
- Bicep。
- Azure PowerShell 或 Azure CLI。
- Visual Studio Code 和面向 Visual Studio Code 的 Bicep 扩展。
- 必须在 Azure 订阅中注册
Microsoft.PolicyInsights。 要注册资源提供程序,必须具有注册资源提供程序的权限。 此权限包含在“参与者”和“所有者”角色中。 - 具有至少一个不使用托管磁盘的虚拟机的资源组。
查阅 Bicep 文件
Bicep 文件将为资源组范围创建策略分配,并分配不使用托管磁盘的内置策略定义审核 VM。
创建以下 Bicep 文件作为 policy-assignment.bicep。
- 打开 Visual Studio Code 并选择“文件”>“新建文本文件”。
- 将 Bicep 文件复制并粘贴到 Visual Studio Code 中。
- 选择文件>保存,并使用文件名policy-assignment.bicep。
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'
resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
name: policyAssignmentName
scope: resourceGroup()
properties: {
policyDefinitionId: policyDefinitionID
description: 'Policy assignment to resource group scope created with Bicep file'
displayName: policyDisplayName
nonComplianceMessages: [
{
message: 'Virtual machines should use managed disks'
}
]
}
}
output assignmentId string = assignment.id
Bicep 文件中定义的资源类型为 Microsoft.Authorization/policyAssignments。
Bicep 文件使用三个参数以部署策略分配:
policyAssignmentName创建名为 audit-vm-managed-disks 的策略分配。policyDefinitionID使用内置策略定义的 ID。 有关参考,用于获取 ID 的命令位于用于部署模板的部分中。policyDisplayName创建显示在 Azure 门户中的显示名称。
有关 Bicep 文件的详细信息:
- 要查找更多 Bicep 示例,请转到浏览代码示例。
- 要详细了解用于部署的模板参考,请转到 Azure 模板参考。
- 要了解如何开发 Bicep 文件,请转到 Bicep 文档。
- 要了解订阅级部署,请转到使用 Bicep 文件进行订阅部署。
部署 Bicep 文件
可以使用 Azure PowerShell 或 Azure CLI 部署 Bicep 文件。
从 Visual Studio Code 终端会话连接到 Azure。 如果具有多个订阅,请运行命令以将上下文设置为你的订阅。 将 <subscriptionID> 替换为你的 Azure 订阅 ID。
Connect-AzAccount -Environment AzureChinaCloud
# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>
你可以核实 Microsoft.PolicyInsights 是否注册了。 如果没有,可以运行一条命令来注册资源提供程序。
Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
Select-Object -Property ResourceTypes, RegistrationState
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
有关详细信息,请转到 Get-AzResourceProvider 和 Register-AzResourceProvider。
以下命令显示 policyDefinitionID 参数的值:
(Get-AzPolicyDefinition |
Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId
以下命令可向资源组部署策略定义。 将 <resourceGroupName> 替换为你的资源组名称:
$rg = Get-AzResourceGroup -Name '<resourceGroupName>'
$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.bicep'
}
New-AzResourceGroupDeployment @deployparms
$rg 变量存储资源组的属性。 $deployparms 变量使用散点来创建参数值并提高可读性。 New-AzResourceGroupDeployment 命令使用 $deployparms 变量中定义的参数值。
Name是输出和 Azure 中为资源组部署显示的部署名称。ResourceGroupName使用$rg.ResourceGroupName属性获取分配到策略的资源组名称。TemplateFile指定 Bicep 文件名称及其在本地计算机上的位置。
你可以使用以下命令验证策略分配的部署:
该命令使用 $rg.ResourceId 属性来获取资源组的 ID。
Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name : audit-vm-managed-disks
ResourceId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName : audit-vm-managed-disks
ResourceGroupName : {resourceGroupName}
ResourceType : Microsoft.Authorization/policyAssignments
SubscriptionId : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties
有关详细信息,请转到 Get-AzPolicyAssignment。
识别不合规的资源
部署策略分配后,将会审核部署到资源组的虚拟机是否符合托管磁盘策略。
新策略分配的符合性状态需要几分钟才会变为活动状态,并提供关于策略状态的结果。
$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}
Get-AzPolicyState @complianceparms
$complianceparms 变量创建在 Get-AzPolicyState 命令中使用的参数值。
ResourceGroupName从$rg.ResourceGroupName属性获取资源组名称。PolicyAssignmentName指定创建策略分配时使用的名称。Filter使用表达式查找不符合策略分配的资源。
结果应如以下示例所示并且 ComplianceState 将显示 NonCompliant:
Timestamp : 2/20/2024 18:55:45
ResourceId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant : False
SubscriptionId : {subscriptionId}
ResourceType : Microsoft.Compute/virtualMachines
ResourceLocation : {location}
ResourceGroup : {resourceGroupName}
ResourceTags : tbd
PolicyAssignmentName : audit-vm-managed-disks
PolicyAssignmentOwner : tbd
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds : {managementGroupId}
ComplianceState : NonCompliant
AdditionalProperties : {[complianceReasonCode, ]}
有关详细信息,请访问 Get-AzPolicyState。
清理资源
Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
若要退出登录 Azure PowerShell 会话,请执行以下操作:
Disconnect-AzAccount
后续步骤
本快速入门已分配一个策略定义用于识别 Azure 环境中的不合规资源。
若要详细了解如何分配验证资源合规性的策略,请继续学习以下教程。