快速入門:使用 Azure PowerShell 建立原則指派,以識別不相容資源
了解 Azure 中合規性的第一個步驟是識別您資源的狀態。 在本快速入門中,您將使用 Azure PowerShell 來建立一個原則指派,以識別不符合規範的資源。 此原則會指派給資源群組,且其會稽核不使用受控磁碟的虛擬機器。 建立原則指派之後,您將識別不符合規範的虛擬機器。
Azure PowerShell 模組可用來從命令列或在指令碼中管理 Azure 資源。 本文說明如何使用 Azure PowerShell 建立原則指派。
指派內建原則或計畫定義時,您可以選擇參考版本。 除非另有指定,否則內建定義的原則指派會預設為最新版本,並自動繼承次要版本變更。
必要條件
- 如果您沒有 Azure 帳戶,請在您開始之前先建立 免費帳戶。
- Azure PowerShell。
- Visual Studio Code \(英文\)。
Microsoft.PolicyInsights
必須在您的 Azure 訂用帳戶中進行註冊。 若要註冊資源提供者,您必須有權註冊資源提供者。 該權限包括在參與者和擁有者角色中。- 至少包含一台不使用受控磁碟的虛擬機器的資源群組。
連接到 Azure
從 Visual Studio Code 終端機工作階段中連線到 Azure。 如果您有多個訂用帳戶,請執行命令來設定您訂用帳戶的內容。 使用您的 Azure 訂用帳戶識別碼來取代 <subscriptionID>
。
Connect-AzAccount
# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>
註冊資源提供者
註冊資源提供者後,即可在您的 Azure 訂用帳戶中使用它。
若要驗證 Microsoft.PolicyInsights
是否已註冊,請執行 Get-AzResourceProvider
。 資源提供者包含數個資源類型。 如果結果是 NotRegistered
,請執行 Register-AzResourceProvider
:
Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
Select-Object -Property ResourceTypes, RegistrationState
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
如需詳細資訊,請移至 Get-AzResourceProvider 和 Register-AzResourceProvider。
建立原則指派
使用下列命令來為您的資源群組建立新的原則指派。 此範例使用一個包含不含受控磁碟的虛擬機器的現有資源群組。 資源群組是原則指派的範圍。 此範例使用內建原則定義:稽核不是使用受控磁碟的 VM。
執行下列命令,並將 <resourceGroupName>
取代為您的資源群組名稱:
$rg = Get-AzResourceGroup -Name '<resourceGroupName>'
$definition = Get-AzPolicyDefinition |
Where-Object { $_.DisplayName -eq 'Audit VMs that do not use managed disks' }
$rg
變數會儲存資源群組的屬性,而 $definition
變數會儲存原則定義的屬性。 這些屬性會使用於後續命令中。
執行下列命令以建立原則指派:
$policyparms = @{
Name = 'audit-vm-managed-disks'
DisplayName = 'Audit VM managed disks'
Scope = $rg.ResourceId
PolicyDefinition = $definition
Description = 'Az PowerShell policy assignment to resource group'
}
New-AzPolicyAssignment @policyparms
$policyparms
變數會使用 splatting 來建立參數值並改善可讀性。 New-AzPolicyAssignment
命令會使用 $policyparms
變數中定義的參數值。
Name
會建立指派的ResourceId
中所使用的原則指派名稱。DisplayName
是原則指派的名稱,且會顯示在 Azure 入口網站中。Scope
會使用$rg.ResourceId
屬性來將原則指派給資源群組。PolicyDefinition
會指派儲存在$definition
變數中的原則定義。Description
可用來新增原則指派的相關內容。
原則指派的結果類似下列範例:
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
如需詳細資訊,請移至 New-AzPolicyAssignment。
如果您想要重新顯示原則指派資訊,請執行下列命令:
Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
識別不符合規範的資源
新原則指派的合規性狀態需要幾分鐘的時間才會生效,而且其會提供原則狀態的相關結果。
使用下列命令來識別不符合您所建立之原則指派規範的資源:
$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}
Get-AzPolicyState @complianceparms
$complianceparms
變數會使用 splatting 來建立 Get-AzPolicyState
命令中使用的參數值。
ResourceGroupName
會從$rg.ResourceGroupName
屬性中取得資源群組名稱。PolicyAssignmentName
會指定建立原則指派時所使用的名稱。Filter
會使用運算式來尋找不符合原則指派規範的資源。
您的結果類似下列範例,且 ComplianceState
顯示 NonCompliant
:
Timestamp : 2/14/2024 18:25:37
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 環境中的不相容資源。
若要深入了解如何指派驗證資源合規性的原則,請繼續進行教學課程。