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

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

Azure CLI は、コマンド ラインやスクリプトで Azure リソースを作成および管理するために使用します。 このガイドでは、Azure CLI を使用してポリシーの割り当てを作成し、Azure 環境内の準拠していないリソースを特定します。

前提条件

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

Azure に接続する

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

az login

# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>

リソース プロバイダーの登録

リソース プロバイダーが登録されると、Azure サブスクリプションで使用できるようになります。

Microsoft.PolicyInsights が登録されているかどうかを確認するには、Get-AzResourceProvider を実行します。 リソース プロバイダーにはいくつかのリソースの種類が含まれます。 結果が NotRegistered の場合、Register-AzResourceProvider を実行します。

az provider show \
  --namespace Microsoft.PolicyInsights \
  --query "{Provider:namespace,State:registrationState}" \
  --output table

az provider register --namespace Microsoft.PolicyInsights

Azure CLI コマンドでは、読みやすくするために、行の継続に円記号 (\) を使用します。 詳しくは、「az provider」を参照してください。

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

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

以下のコマンドを実行して、<resourceGroupName> をユーザーのリソース グループ名で置き換えます。

rgid=$(az group show --resource-group <resourceGroupName> --query id --output tsv)

definition=$(az policy definition list \
  --query "[?displayName=='Audit VMs that do not use managed disks']".name \
  --output tsv)

rgid 変数には、リソース グループ ID が格納されます。 definition 変数には、ポリシー定義の名前 (GUID) が格納されます。

ポリシーの割り当てを作成するには、次のコマンドを実行します。

az policy assignment create \
  --name 'audit-vm-managed-disks' \
  --display-name 'Audit VM managed disks' \
  --scope $rgid \
  --policy $definition \
  --description 'Azure CLI policy assignment to resource group'
  • name は、割り当ての ResourceId で使用されるポリシーの割り当て名を作成します。
  • display-name はポリシーの割り当て名で、Azure portal に表示されます。
  • scope$rgid 変数を使って、リソース グループにポリシーを割り当てます。
  • policy$definition 変数に保存されているポリシー定義を割り当てます。
  • description を使用すると、ポリシーの割り当てに関するコンテキストを追加できます。

ポリシーの割り当ての結果は、次の例のようになります。

"description": "Azure CLI policy assignment to resource group",
"displayName": "Audit VM managed disks",
"enforcementMode": "Default",
"id": "/subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks",
"identity": null,
"location": null,
"metadata": {
  "createdBy": "11111111-1111-1111-1111-111111111111",
  "createdOn": "2024-02-23T18:42:27.4780803Z",
  "updatedBy": null,
  "updatedOn": null
},
"name": "audit-vm-managed-disks",

ポリシー割り当て情報を再表示する場合は、次のコマンドを実行します。

az policy assignment show --name "audit-vm-managed-disks" --scope $rgid

詳しくは、「az policy assignment」をご覧ください。

準拠していないリソースを特定する

新しいポリシーの割り当ての準拠状態がアクティブになり、ポリシーの状態に関する結果を提供するまで、数分かかります。

以下のコマンドを使用すると、作成したポリシーの割り当てに準拠していないリソースを特定できます。

policyid=$(az policy assignment show \
  --name "audit-vm-managed-disks" \
  --scope $rgid \
  --query id \
  --output tsv)

az policy state list --resource $policyid --filter "(isCompliant eq false)"

policyid 変数で式を使用して、ポリシー割り当ての ID を取得します。 filter パラメーターで出力を非準拠リソースに制限します。

az policy state list の出力は詳細ですが、この記事では、complianceStateNonCompliant を示しています。

"complianceState": "NonCompliant",
"components": null,
"effectiveParameters": "",
"isCompliant": false,

詳しくは、「az policy state」をご覧ください。

リソースをクリーンアップする

ポリシーの割り当てを削除するには、次のコマンドを実行します。

az policy assignment delete --name "audit-vm-managed-disks" --scope $rgid

Azure CLI セッションからサインアウトするには:

az logout

次のステップ

このクイックスタートでは、ポリシー定義を割り当てて、Azure 環境内で準拠していないリソースを特定しました。

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