クイックスタート: Bicep ファイルを使用して、準拠していないリソースを特定するためのポリシー割り当てを作成する

このクイックスタートでは、Bicep ファイルを使用して、リソースが Azure ポリシーに準拠していることを検証するポリシー割り当てを作成します。 ポリシーはリソース グループに割り当てられ、マネージド ディスクを使用しない仮想マシンは監査されます。 ポリシーの割り当てを作成後、準拠していない仮想マシンを特定します。

Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 簡潔な構文、信頼性の高いタイプ セーフ、およびコードの再利用のサポートが提供されます。 Bicep により、Azure のコード ソリューションとしてのインフラストラクチャに最適な作成エクスペリエンスが実現します。

前提条件

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

Bicep ファイルを確認する

Bicep ファイルでリソース グループ スコープのポリシー割り当てを作成し、組み込みのポリシー定義である [マネージド ディスクを使用していない VM の監査] を割り当てます。

次の Bicep ファイルを policy-assignment.bicep として作成します。

  1. Visual Studio Code を開き、[ファイル]>[新しいテキスト ファイル] の順に選択します。
  2. Bicep ファイルをコピーして Visual Studio Code に貼り付けます。
  3. [ファイル]>[保存] を選択し、ファイル名 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 ファイルでは、ポリシー割り当てのデプロイに 3 つのパラメーターを使います。

  • policyAssignmentName は、audit-vm-managed-disks という名前のポリシー割り当てを作成します。
  • policyDefinitionID は、組み込みのポリシー定義の ID を使用します。 参考までに、ID を取得するコマンドは、テンプレートをデプロイするためのセクションにあります。
  • policyDisplayName は、Azure portal に表示される表示名を作成します。

Bicep ファイルの詳細については、以下を参照してください。

Bicep ファイルをデプロイする

Azure PowerShell または Azure CLI を使用して Bicep ファイルをデプロイできます。

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

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-AzResourceProviderRegister-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 変数はスプラッティングを使用してパラメータ値を作成し、読みやすさを改善します。 New-AzResourceGroupDeployment コマンドは $deployparms 変数で定義されるパラメータ値を使用します。

  • Name は、リソース グループのデプロイの出力と Azure に表示されるデプロイ名です。
  • ResourceGroupName$rg.ResourceGroupName プロパティを使用して、ポリシーが割り当てられているリソース グループの名前を取得します。
  • TemplateFile は、ローカル コンピューター上の Bicep ファイルの名前と場所を指定します。

次のコマンドを使用して、ポリシー割り当てのデプロイを確認できます。

このコマンドで $rg.ResourceId プロパティを使用して、リソース グループの ID を取得します。

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 は式を使用して、ポリシーの割り当てに準拠していないリソースを見つけます。

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

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

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