クイックスタート: Azure PowerShell を使用して準拠していないリソースを識別するためのポリシー割り当てを作成する

Azure のコンプライアンスを理解する第一歩は、リソースの状態を特定することです。 このクイックスタートでは、Azure PowerShell を使用して、準拠していないリソースを特定するためのポリシーの割り当てを作成します。 ポリシーはリソース グループに割り当てられ、マネージド ディスクを使用しない仮想マシンは監査されます。 ポリシーの割り当てを作成後、準拠していない仮想マシンを特定します。

Azure PowerShell モジュールは、コマンド ラインやスクリプトで Azure リソースを管理するために使用できます。 この記事では、Azure PowerShell を使用してポリシーの割り当てを作成する方法について説明します。

前提条件

  • Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
  • Azure PowerShell
  • Visual Studio Code
  • Microsoft.PolicyInsights が Azure サブスクリプションに登録されている必要があります。 リソース プロバイダーを登録するには、リソース プロバイダーを登録するためのアクセス許可が必要です。 このアクセス許可は、共同作成者ロールと所有者ロールに含まれます。
  • マネージド ディスクを使用しない仮想マシンが少なくとも 1 つ存在するリソース グループ。

Azure に接続する

Visual Studio Code ターミナル セッションから Azure に接続します。 複数のサブスクリプションがある場合は、コマンドを実行してコンテキストをサブスクリプションに設定します。 <subscriptionID> は、Azure サブスクリプション ID に置き換えてください。

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-AzResourceProviderRegister-AzResourceProvider をご覧ください。.

ポリシー割り当てを作成する

次のコマンドを実行して、リソース グループのポリシーの割り当てを新たに作成します。 この例では、マネージド ディスクの "ない" 仮想マシンを含む既存のリソース グループを使用します。 このリソース グループがポリシーの割り当てのスコープです。 この例では、組み込みポリシー定義 "マネージド ディスクを使用していない VM を監査する" を使います。

以下のコマンドを実行して、<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 VM managed disks'
Scope = $rg.ResourceId
PolicyDefinition = $definition
Description = 'Az PowerShell policy assignment to resource group'
}

New-AzPolicyAssignment @policyparms

$policyparms 変数はスプラッティングを使用してパラメータ値を作成し、読みやすさを改善します。 New-AzPolicyAssignment コマンドは $policyparms 変数で定義されるパラメータ値を使用します。

  • Name は、割り当ての ResourceId で使用されるポリシーの割り当て名を作成します。
  • DisplayName はポリシーの割り当て名で、Azure portal に表示されます。
  • 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 変数はスプラッティングを使用して、Get-AzPolicyState コマンドで使用されるパラメータ値を作成します。

  • ResourceGroupName$rg.ResourceGroupName プロパティからリソース グループ名を取得します。
  • PolicyAssignmentName は、ポリシーの割り当ての作成時に使用される名前を指定します。
  • Filter は式を使用して、ポリシーの割り当てに準拠していないリソースを見つけます。

次のような結果が返され、ComplianceStateNonCompliant を示しています。

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 環境内で準拠していないリソースを特定しました。

リソースのコンプライアンスを検証するポリシーの割り当て方法について詳しく学習するには、チュートリアルに進んでください。