快速入門:使用ARM範本建立原則指派,以識別不符合規範的資源
在本快速入門中,您會使用 Azure Resource Manager 範本 (ARM 範本) 來建立原則指派,以驗證資源的合規性與 Azure 原則。 原則會指派給資源群組,並稽核不使用受控磁碟的虛擬機。 建立原則指派之後,您會識別不符合規範的虛擬機。
Azure Resource Manager 範本是 JavaScript 物件表示法 (JSON) 檔案,可定義專案的基礎結構和組態。 範本使用宣告式語法。 您不需要撰寫程式設計命令順序來建立部署,即可描述預定的部署。
如果您的環境符合必要條件,而且您很熟悉 ARM 範本,請選取 [部署至 Azure] 按鈕。 範本會在 Azure 入口網站中開啟。
必要條件
- 如果您沒有 Azure 帳戶,請在您開始之前先建立 免費帳戶。
- Azure PowerShell 或 Azure CLI。
- Visual Studio Code 和 Azure Resource Manager (ARM) 工具。
Microsoft.PolicyInsights
必須在 您的 Azure 訂用帳戶中註冊 。 若要註冊資源提供者,您必須具有註冊資源提供者的許可權。 該許可權包含在參與者和擁有者角色中。- 至少有一部虛擬機未使用受控磁碟的資源群組。
檢閱範本
ARM 範本會為資源群組範圍建立原則指派,並指派內建原則定義 稽核不使用受控磁碟的 VM。
建立下列 ARM 範本作為 policy-assignment.json。
- 開啟 Visual Studio Code,然後選取 [檔案>新文本檔]。
- 將 ARM 範本複製並貼到 Visual Studio Code 中。
- 選取 [檔案>儲存],並使用檔名policy-assignment.json。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"policyAssignmentName": {
"type": "string",
"defaultValue": "audit-vm-managed-disks",
"metadata": {
"description": "Policy assignment name used in assignment's resource ID"
}
},
"policyDefinitionID": {
"type": "string",
"defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
"metadata": {
"description": "Policy definition ID"
}
},
"policyDisplayName": {
"type": "string",
"defaultValue": "Audit VM managed disks",
"metadata": {
"description": "Display name for Azure portal"
}
}
},
"resources": [
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2023-04-01",
"name": "[parameters('policyAssignmentName')]",
"properties": {
"policyDefinitionId": "[parameters('policyDefinitionID')]",
"description": "Policy assignment to resource group scope created with ARM template",
"displayName": "[parameters('policyDisplayName')]",
"nonComplianceMessages": [
{
"message": "Virtual machines should use managed disks"
}
]
}
}
],
"outputs": {
"assignmentId": {
"type": "string",
"value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
}
}
}
ARM 範本中定義的資源類型是 Microsoft.Authorization/policyAssignments。
範本會使用三個參數來部署原則指派:
policyAssignmentName
會建立名為 audit-vm-managed-disks 的原則指派。policyDefinitionID
會使用內建原則定義的標識碼。 如需參考,取得標識符的命令位於部署範本的 區段中。policyDisplayName
會建立顯示在 Azure 入口網站 中的顯示名稱。
如需 ARM 範本檔案的詳細資訊:
- 若要尋找更多 ARM 範例,請移至瀏覽 程式代碼範例。
- 若要深入瞭解適用於部署的範本參考,請移至 Azure 樣本參考。
- 若要瞭解如何開發 ARM 範本,請移至 ARM 範本檔。
- 若要瞭解訂用帳戶層級部署,請移至 使用ARM範本的訂用帳戶部署。
部署 ARM 範本
您可以使用 Azure PowerShell 或 Azure CLI 來部署 ARM 範本。
從 Visual Studio Code 終端機會話連線到 Azure。 如果您有一個以上的訂用帳戶,請執行命令,將內容設定為訂用帳戶。 將 <subscriptionID>
取代為您的 Azure 訂用帳戶 ID。
Connect-AzAccount
# 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.json'
}
New-AzResourceGroupDeployment @deployparms
變數 $rg
會儲存資源群組的屬性。 變數 $deployparms
會使用 曲線 來建立參數值並改善可讀性。 命令 New-AzResourceGroupDeployment
會使用 變數中 $deployparms
定義的參數值。
Name
是資源群組部署的輸出和 Azure 中顯示的部署名稱。ResourceGroupName
會$rg.ResourceGroupName
使用 屬性來取得指派原則的資源群組名稱。TemplateFile
指定本機電腦上的 ARM 範本名稱和位置。
您可以使用下列命令來確認原則指派的部署:
命令會 $rg.ResourceId
使用 屬性來取得資源群組的標識碼。
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/26/2024 19:02:56
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 環境中不符合規範的資源。
若要深入瞭解如何指派驗證資源合規性的原則,請繼續進行教學課程。