次の方法で共有


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

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

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

組み込みのポリシーまたはイニシアティブ定義を割り当てる場合、バージョンを参照することは省略可能です。 組み込み定義のポリシー割り当ては既定で最新バージョンになり、特に指定がない限り、マイナー バージョンの変更が自動的に継承されます。

Prerequisites

  • 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-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変数はスプラッティングを使用してパラメーター値を作成し、読みやすさを向上させます。 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 環境内の準拠していないリソースを識別するためのポリシー定義を割り当てたものです。

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