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

Azure のコンプライアンスを理解する第一歩は、リソースの状態を特定することです。 このクイックスタートでは、ポリシーの割り当てを作成して、マネージド ディスクを使用していない仮想マシンを特定するプロセスについて順を追って説明します。

このプロセスを終了すると、マネージド ディスクを使用していない仮想マシンを適切に特定できるようになります。 これらはポリシーの割り当てに "準拠していません"。

REST API を使用して、Azure リソースを作成および管理します。 このガイドでは、REST API を使用してポリシー割り当てを作成し、Azure 環境内の準拠していないリソースを特定します。

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

  • ARMClient をまだインストールしていない場合はインストールします。 これは、Azure Resource Manager ベースの REST API に HTTP 要求を送信するツールです。 REST ドキュメントの "試してみる" 機能、または PowerShell の Invoke-RestMethodPostman などのツールを使用することもできます。

Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。

Azure Cloud Shell を開始するには:

オプション 例とリンク
コードまたはコマンド ブロックの右上隅にある [使ってみる] を選択します。 [使ってみる] を選択しても、コードまたはコマンドは Cloud Shell に自動的にはコピーされません。 Azure Cloud Shell の [使ってみる] の例を示すスクリーンショット。
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 新しいウィンドウで Cloud Shell を起動する方法を示すスクリーンショット。
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 Azure portal の [Cloud Shell] ボタンを示すスクリーンショット

Azure Cloud Shell を使用するには:

  1. Cloud Shell を開始します。

  2. コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードまたはコマンドを Cloud Shell セッションに貼り付けます。

  4. Enter キーを選択して、コードまたはコマンドを実行します。

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

このクイックスタートでは、ポリシー割り当てを作成し、マネージド ディスクを使用しない監査 VM (06a78e20-9358-41c9-923c-fb736d382a4d) 定義を割り当てます。 このポリシー定義では、ポリシー定義で設定されている条件に準拠していないリソースが識別されます。

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

  • REST API URI

    PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/audit-vm-manageddisks?api-version=2021-09-01
    
  • 要求本文

    {
      "properties": {
        "displayName": "Audit VMs without managed disks Assignment",
        "description": "Shows all virtual machines not using managed disks",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
        "nonComplianceMessages": [
            {
                "message": "Virtual machines should use a managed disk"
            }
        ]
      }
    }
    

上記のエンドポイントと要求本文では、次の情報を使用します。

REST API URI:

  • Scope - スコープによって、ポリシーの割り当てを強制するリソースまたはリソースのグループが決まります。 スコープには、管理グループから個々のリソースまで指定できます。 {scope} は、次のパターンのいずれかに必ず置き換えてください。
    • 管理グループ: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • サブスクリプション: /subscriptions/{subscriptionId}
    • リソース グループ: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • リソース: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
  • Name - 割り当ての実際の名前。 この例では、audit-vm-manageddisks が使用されました。

要求本文:

  • DisplayName - ポリシーの割り当てに使用する表示名。 このケースでは、"Audit VMs without managed disks Assignment" を使用します。
  • Description - ポリシーの機能またはこのスコープに割り当てる理由の詳細な説明。
  • policyDefinitionId - 割り当てを作成する際に基礎として使用するポリシー定義 ID。 ここでは、"Managed Disks を使用していない VM の監査" というポリシー定義の ID です。
  • nonComplianceMessages - コンプライアンス違反の (非準拠と評価される) ためにリソースが拒否されたときに表示されるメッセージを設定します。 詳細については、割り当てのコンプライアンス違反メッセージに関するセクションを参照してください。

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

この新しい割り当てで準拠していないリソースを表示するには、次のコマンドを実行して、JSON ファイルに出力される準拠していないリソースのリソース ID を取得します。

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq 'audit-vm-manageddisks'&$apply=groupby((ResourceId))"

次のような結果が返されます。

{
    "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
    "@odata.count": 3,
    "value": [{
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3Id>"
        }

    ]
}

この結果は、普段 Azure Portal ビューの [準拠していないリソース] に一覧表示される内容に相当します。

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

作成した割り当てを削除するには、次のコマンドを使用します。

DELETE https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/audit-vm-manageddisks?api-version=2021-09-01

{scope} は、ポリシー割り当てを最初に作成したときに使用したスコープに置き換えます。

次のステップ

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

新しいリソースが準拠していることを検証するためのポリシーの割り当てについて詳しく学習するには、次のチュートリアルに進んでください。