快速入門:使用 Bicep 檔案建立原則指派,以識別不符合規範的資源
在本快速入門中,您會使用 Bicep 檔案建立一個原則指派,驗證資源是否符合 Azure 原則。 此原則會指派給資源群組,且其會稽核不使用受控磁碟的虛擬機器。 建立原則指派之後,您將識別不符合規範的虛擬機器。
Bicep 是使用宣告式語法來部署 Azure 資源的特定領域語言 (DSL)。 其提供簡潔的語法、可靠的類型安全,並支援程式碼重複使用。 Bicep 能夠為您在 Azure 中的基礎結構即程式碼解決方案,提供最佳的製作體驗。
指派內建原則或計畫定義時,您可以選擇參考版本。 除非另有指定,否則內建定義的原則指派會預設為最新版本,並自動繼承次要版本變更。
必要條件
- 如果您沒有 Azure 帳戶,請在您開始之前先建立 免費帳戶。
- Bicep。
- Azure PowerShell 或 Azure CLI。
- Visual Studio Code 和適用於 Visual Studio Code 的 Bicep 延伸模組。
Microsoft.PolicyInsights
必須在您的 Azure 訂用帳戶中進行註冊。 若要註冊資源提供者,您必須有權註冊資源提供者。 該權限包括在參與者和擁有者角色中。- 其中至少有一個虛擬機器不使用受控磁碟的資源群組。
檢閱 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
會使用內建原則定義的識別碼。 如需參考,取得識別碼的命令位於部署範本的區段中。policyDisplayName
會建立顯示在 Azure 入口網站中的顯示名稱。
如需 Bicep 檔案的詳細資訊:
- 若要尋找更多的 Bicep 範例,請移至瀏覽程式碼範例。
- 若要深入了解部署的範本參考,請移至 Azure 範本參考。
- 若要了解如何開發 Bicep 檔案,請移至 Bicep 文件。
- 若要了解訂用帳戶層級部署,請移至使用 Bicep 檔案進行訂用帳戶部署。
部署 Bicep 檔案
您可以使用 Azure PowerShell 或 Azure CLI 來部署 Bicep 檔案。
從 Visual Studio Code 終端機工作階段中,連線到 Azure。 如果您有多個訂用帳戶,請執行命令來設定您訂用帳戶的內容。 使用您的 Azure 訂用帳戶識別碼來取代 <subscriptionID>
。
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.bicep'
}
New-AzResourceGroupDeployment @deployparms
$rg
變數會儲存資源群組的屬性。 $deployparms
變數會使用 splatting 來建立參數值並改善可讀性。 New-AzResourceGroupDeployment
命令會使用 $deployparms
變數中定義的參數值。
Name
是輸出中和 Azure 中針對資源群組部署所顯示的部署名稱。ResourceGroupName
會使用$rg.ResourceGroupName
屬性來取得其中指派原則的資源群組名稱。TemplateFile
會指定本機電腦上 Bicep 檔案的名稱和位置。
您可以使用下列命令來驗證原則指派的部署:
此命令會使用 $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/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 環境中的不相容資源。
若要深入了解如何指派驗證資源合規性的原則,請繼續進行教學課程。