快速入門:建立原則指派,以使用 Azure PowerShell 識別不符合規範的資源

瞭解 Azure 合規性的第一個步驟是識別資源的狀態。 在本快速入門中,您會建立原則指派,以使用 Azure PowerShell 識別不符合規範的資源。 原則會指派給資源群組,並稽核不使用受控磁碟的虛擬機。 建立原則指派之後,您會識別不符合規範的虛擬機。

Azure PowerShell 模組可用來從命令行或腳本中管理 Azure 資源。 本文說明如何使用 Azure PowerShell 建立原則指派。

必要條件

  • 如果您沒有 Azure 帳戶,請在您開始之前先建立 免費帳戶
  • Azure PowerShell
  • Visual Studio Code \(英文\)。
  • Microsoft.PolicyInsights 必須在 您的 Azure 訂用帳戶中註冊 。 若要註冊資源提供者,您必須具有註冊資源提供者的許可權。 該許可權包含在參與者和擁有者角色中。
  • 至少有一部虛擬機未使用受控磁碟的資源群組。

連接到 Azure

從 Visual Studio Code 終端機會話連線到 Azure。 如果您有一個以上的訂用帳戶,請執行命令,將內容設定為訂用帳戶。 將取代 <subscriptionID> 為您的 Azure 訂用帳戶標識碼。

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

註冊資源提供者

註冊資源提供者時,即可在 Azure 訂用帳戶中使用。

若要確認是否已 Microsoft.PolicyInsights 註冊,請執行 Get-AzResourceProvider。 資源提供者包含數個資源類型。 如果結果執行 NotRegisteredRegister-AzResourceProvider

 Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

建立原則指派

使用下列命令為您的資源群組建立新的原則指派。 此範例會使用包含沒有受控磁碟之虛擬機的現有資源群組。 資源群組是原則指派的範圍。

執行下列命令,並將 取代 <resourceGroupName> 為您的資源群組名稱:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$definition = Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }

變數 $rg 會儲存資源群組的屬性,而 $definition 變數會儲存原則定義的屬性。 這些屬性會用於後續命令中。

執行下列命令以建立原則指派:

$policyparms = @{
Name = 'audit-vm-managed-disks'
DisplayName = 'Audit VMs without managed disks Assignment'
Scope = $rg.ResourceId
PolicyDefinition = $definition
Description = 'Az PowerShell policy assignment to resource group'
}

New-AzPolicyAssignment @policyparms

變數 $policyparms 會使用 曲線 來建立參數值並改善可讀性。 命令 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

識別不符合規範的資源

新原則指派的合規性狀態需要幾分鐘的時間才能生效,並提供原則狀態的相關結果。

使用下列命令來識別不符合您所建立原則指派的資源:

$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 會使用表達式來尋找不符合原則指派規範的資源。

如需詳細資訊,請移至 Get-AzPolicyState

您的結果類似下列範例,並 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, ]}

清除資源

若要移除原則指派,請執行下列命令:

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

若要註銷 Azure PowerShell 會話:

Disconnect-AzAccount

下一步

在本快速入門中,您已指派原則定義來識別 Azure 環境中不符合規範的資源。

若要深入瞭解如何指派原則,以驗證新資源是否符合規範,請繼續進行教學課程。