次の方法で共有


Azure リソースのコンプライアンス データを取得する

Azure Policy の最大の利点の 1 つは、サブスクリプション内のリソースまたはサブスクリプションの管理グループを介して提供される分析情報と制御です。 この制御は、リソースが誤った場所に作成されるのを防いだり、一般的で一貫性のあるタグの使用を強制したり、既存のリソースの適切な構成と設定を監査したりすることができます。 どの場合でも Azure Policy がデータを生成し、環境のコンプライアンス状態の理解に役立てることができます。

コンプライアンス データを確認する前に、Azure Policy のコンプライアンスの状態を理解することが重要です。

ポリシーとイニシアティブ割り当てによって生成されたコンプライアンス情報には、次のようないくつかの方法でアクセスすることができます。

コンプライアンスの報告方法を説明する前に、コンプライアンス情報がいつ更新されるかと、評価サイクルをトリガーする頻度とイベントについて説明します。

評価のトリガー

完了した評価サイクルの結果は、PolicyStates および PolicyEvents 操作を通じて Microsoft.PolicyInsights リソース プロバイダーで使用可能です。 Azure Policy Insights REST API の操作の詳細については、「Azure Policy Insights」を参照してください。

割り当てられたポリシーとイニシアティブの評価は、次のようなさまざまなイベントの結果として発生します。

  • ポリシーまたはイニシアティブがスコープに新たに割り当てられる。 割り当てが定義されたスコープに適用されるまでに約 5 分かかります。その後、新しく割り当てられたポリシーまたはイニシアチブに対して適用可能なリソースの評価サイクルが開始されます。 使用される効果に応じて、リソースは準拠、非準拠、除外、または不明としてマークされます。 大きなスコープのリソースに対する大きなポリシーまたはイニシアティブの評価には時間がかかるため、評価サイクルがいつ完了するかを事前に定義された期待はありません。 完了すると、更新されたコンプライアンス結果をポータルとソフトウェア開発キット (SDK) で使用できるようになります。
  • 既にスコープに割り当てられているポリシーまたはイニシアティブが更新される。 このシナリオでの評価サイクルとタイミングは、スコープへの新しい割り当ての場合と同じです。
  • Azure Resource Manager、REST API、またはサポート対象の SDK を介した割り当てで、リソースがスコープでデプロイまたは更新される。 このシナリオでは、個々のリソースに対する効果的なイベント (追加、監査、拒否、展開) とコンプライアンス ステータスの情報が、約 15 分後にポータルおよび SDKで利用可能です。 このイベントによって、他のリソースの評価が行われることはありません。
  • サブスクリプション (リソースの種類 Microsoft.Resources/subscriptions ) が、サブスクリプション リソースの種類をターゲットとしたポリシー定義が割り当てられているMicrosoft.Resources/subscriptions内で、作成または移動されています。 サブスクリプションでサポートされている影響 (audit、auditIfNotExist、deployIfNotExists、modify)、ログ記録、および修復アクションの評価には、約 30 分かかります。
  • ポリシー適用除外が作成、更新、または削除される。 このシナリオでは、定義された適用除外スコープに対して、対応する割り当てが評価されます。
  • 標準コンプライアンス評価サイクル。 24 時間に 1 回、割り当てが自動的に再評価されます。 多くのリソースの大きなポリシーまたはイニシアティブでは時間がかかることがあるため、評価サイクルがいつ完了するかを事前に予想することはできません。 完了すると、更新されたコンプライアンス結果をポータルと SDK で使用できるようになります。
  • マシン構成リソース プロバイダーは、管理対象リソースによってコンプライアンスの詳細で更新されます。
  • オンデマンド スキャン。

Note

設計上、Azure Policy により、評価可能なサブスクリプションとリソース グループを除き、Microsoft.Resources リソース プロバイダー (RP) の下にあるすべてのリソースがポリシー評価から除外されます。

オンデマンドの評価スキャン

サブスクリプションまたはリソース グループの評価スキャンは、REST、Azure CLI、Azure PowerShell、または Visual Studio Code 用の Azure Policy 拡張機能を使用して、または Azure Policy Compliance Scan GitHub アクションを使用して開始できます。 オンデマンド スキャンは、リソースが割り当てられているすべてのポリシーに対して評価されるため、実行に時間がかかる非同期プロセスです。

Note

すべての Azure リソース プロバイダーがオンデマンド評価スキャンをサポートしているわけではありません。 たとえば、現在、Azure Virtual Network Manager (AVNM) では、手動トリガーまたは標準ポリシー コンプライアンス評価サイクル (毎日のスキャン) はサポートされていません。

REST を使用したオンデマンドの評価スキャン

非同期プロセスであるため、スキャンを開始する REST エンドポイントは、スキャンが応答を完了するまで待機しません。 代わりに、要求された評価の状態を照会する URI を提供します。

各 REST API URI には、独自の値で置き換える必要のある変数があります。

  • {resourceGroupName}: お使いのリソース グループ名に置き換えます。
  • {subscriptionId}: サブスクリプション ID で置き換えます。

スキャンは、サブスクリプションまたはリソース グループ内のリソースの評価をサポートしています。 次の URI の構造を使用して、REST API の POST コマンドでスコープによるスキャンを開始します。

次のコマンドを実行して、サブスクリプションを評価します。 [使ってみる] ボタンを押すと、 [ポリシーの状態 - サブスクリプションの評価をトリガーする] で、ブラウザーからコマンドを実行できます。

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01

次のコマンドを使用して、リソース グループを評価します。 [使ってみる] ボタンを押すと、 [ポリシーの状態 - リソース グループ評価をトリガーする] で、ブラウザーからコマンドを実行できます。

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01

サブスクリプションとリソース グループの REST API 呼び出しは、202 Accepted 状態を返します。 応答ヘッダーには、次の形式の location プロパティが含まれています:

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01

{ResourceContainerGUID} は、要求されたスコープに対して静的に生成されます。 スコープで既にオンデマンド スキャンが実行されている場合、新しいスキャンは開始されません。 代わりに、新しい要求には、状態に対して同じ {ResourceContainerGUID}location URI が提供されます。 location URI に対する REST API の GET コマンドは、評価の進行中に 202 Accepted を返します。 評価スキャンが完了すると、200 OK の状態を返します。 完了済みスキャンの本文は、状態を含む JSON 応答です: succeeded

Azure CLI を使用したオンデマンド評価スキャン

対応スキャンは az policy state trigger-scan コマンドを使用して開始されます。

既定では、az policy state trigger-scan によって現在のサブスクリプションのすべてのリソースの評価が開始されます。 特定のリソース グループで評価を開始するには、resource-group パラメーターを使用します。 次の例では、リソース グループの現在のサブスクリプションで対応スキャンを開始します。 resourceGroupName を実際のリソース グループ名に置き換えます:

az policy state trigger-scan --resource-group "resourceGroupName"

no-wait パラメーターを使用して、非同期プロセスが完了するまで待機せずに続行することを選択できます。

Azure PowerShellを使用したオンデマンド評価スキャン

対応スキャンは、Start-AzPolicyComplianceScan コマンドレットを使用して開始されます。

既定では、Start-AzPolicyComplianceScan によって現在のサブスクリプションのすべてのリソースの評価が開始されます。 特定のリソース グループで評価を開始するには、ResourceGroupName パラメーターを使用します。 次の例では、リソース グループの現在のサブスクリプションで対応スキャンを開始します。 resourceGroupName を実際のリソース グループ名に置き換えます:

Start-AzPolicyComplianceScan -ResourceGroupName 'resourceGroupName'

PowerShell で非同期呼び出しが完了するのを待ってから、結果の出力を提供したり、ジョブとしてバックグラウンドで実行したりすることができます。 PowerShell ジョブを使用して、バックグラウンドで対応スキャンを実行するには、AsJob パラメーターを使用して、次の例の $job のようにオブジェクトに値を設定します:

$job = Start-AzPolicyComplianceScan -AsJob

$job オブジェクトをチェックすることによって、ジョブの状態を確認できます。 ジョブの型は Microsoft.Azure.Commands.Common.AzureLongRunningJob です。 使用できるプロパティとメソッドを確認するには、$job オブジェクトの Get-Member を使用します。

対応スキャンが実行されている間に $job オブジェクトをチェックすると、次のような結果が出力されます。

$job

Id     Name              PSJobTypeName     State    HasMoreData     Location   Command
--     ----              -------------     -----    -----------     --------   -------
2      Long Running O... AzureLongRunni... Running  True            localhost  Start-AzPolicyCompliance...

コンプライアンス スキャンが完了すると、State プロパティが Completed に変わります。

Visual Studio Code を使用したオンデマンドの評価スキャン

Visual Studio Code 用の Azure Policy 拡張機能では、特定のリソースに対して評価スキャンを実行できます。 このスキャンは、Azure PowerShell と REST メソッドとは異なり、同期プロセスです。 詳細と手順については、VS Code 拡張機能を使用したオンデマンド評価に関する記事を参照してください。

GitHub アクションを使用したオンデマンド評価スキャン

Azure Policy Compliance Scan アクションを使用して、1 つまたは複数のリソース、リソース グループ、またはサブスクリプションに対して GitHub ワークフローからオンデマンドの評価スキャンをトリガーし、リソースのコンプライアンス状態に基づいてワークフローをゲートします。 また、スケジュールされた時刻に実行するようにワークフローを構成することもできます。これにより、最新のコンプライアンス状態を都合のよいタイミングで取得できます。 必要に応じて、GitHub Actions では、スキャンされたリソースのコンプライアンス状態に関するレポートを生成し、詳細な分析やアーカイブを行うことができます。

次の例では、サブスクリプションに対してコンプライアンス スキャンを実行しています。 scopes で、自分のサブスクリプション ID を使います。

on:
  schedule:
    - cron:  '0 8 * * *'  # runs every morning 8am
jobs:
  assess-policy-compliance:
    runs-on: ubuntu-latest
    steps:
    - name: Login to Azure
      uses: azure/login@v2
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}

    - name: Check for resource compliance
      uses: azure/policy-compliance-scan@v0
      with:
        scopes: |
          /subscriptions/aaaa6a6a-bb7b-cc8c-dd9d-eeeeee0e0e0e

詳細とワークフローのサンプルについては、Azure Policy Compliance Scan リポジトリの GitHub Actions を参照してください。

ポータル

Azure portal には、環境のコンプライアンス状態を視覚化して理解するためのグラフィカルなエクスペリエンスが表示されます。 [ポリシー] ページの [概要] オプションでは、ポリシーとイニシアティブの両方のコンプライアンスに関して、利用可能なスコープの詳細が表示されます。 コンプライアンス状態および割り当てごとの数と共に、過去 7 日間のコンプライアンスを示すグラフが含まれます。 [コンプライアンス] ページには、この同じ情報の大部分 (グラフを除く) が含まれていますが、その他のフィルター処理と並べ替えのオプションが追加されています。

フィルター処理のオプションと詳細が表示されている [コンプライアンス] ページのスクリーンショット。

ポリシーまたはイニシアティブは異なるスコープに割り当てることができるため、表には、各割り当てのスコープと割り当てられた定義の種類が含まれます。 各割り当ての準拠していないリソースおよび準拠していないポリシーの数も提供されます。 表のポリシーまたはイニシアティブを選択すると、その特定の割り当てのコンプライアンスに関する詳しい情報が表示されます。

数とリソース コンプライアンスの詳細が表示されている [ポリシー準拠状況の詳細] ページのスクリーンショット。

[リソース コンプライアンス] タブのリソース リストには、現在の割り当てに対する既存のリソースの評価状態が表示されます。 タブでは既定で [非対応] に設定されますが、これをフィルター処理することができます。 リソースの作成要求によってトリガーされるイベント (追加、監査、拒否、デプロイ、変更) は、 [イベント] タブに表示されます。

[ポリシー準拠状況の詳細] ページの [イベント] タブのスクリーンショット。

リソース プロバイダー モード リソースについては、[リソースのコンプライアンス] タブで、リソースを選択するか、行を右クリックして [ポリシー準拠状況の詳細] を選択すると、コンポーネントのコンプライアンスの詳細が表示されます。 このページには、このリソースに割り当てられているポリシー、イベント、コンポーネント イベント、変更履歴を表示するためのタブも用意されています。

[Component Compliance]\(コンポーネントのコンプライアンス\) タブと、リソース プロバイダー モードの割り当てに対するコンプライアンスの詳細のスクリーンショット。

リソースのコンプライアンス ページに戻って、詳細情報を収集するイベントの行を選択したままにし (または右クリックし)、 [アクティビティ ログの表示] を選択します。 [アクティビティ ログ] ページが開き、割り当てとイベントの詳細を示す検索結果が事前フィルター処理されます。 アクティビティ ログは、これらのイベントに関するより詳細なコンテキストと情報を提供します。

Azure Policy アクティビティおよび評価のアクティビティ ログのスクリーンショット。

Note

コンプライアンスの結果は、Azure Resource Graph クエリを使用してポータルからエクスポートできます。

コマンド ライン

ポータルで入手できるのと同じ情報を、REST API、Azure CLI、Azure PowerShell を使用して取得できます。

REST API

REST API の詳細については、Azure Policy リファレンスを参照してください。 REST API のリファレンス ページには、各操作に [使ってみる] ボタンがあり、ブラウザーで実行してみることができます。 Azure CLI または任意の REST API クライアントを使用してコマンドを実行することもできます。

結果の要約

REST API を使用すると、コンテナー、定義、または割り当てごとに要約を実行できます。 Azure Policy Insights の [Summarize For Subscription] (サブスクリプションの要約) を使用した、サブスクリプション レベルでの要約の例を次に示します。

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01

出力はサブスクリプションを要約し、要約されたコンプライアンスは nonCompliantResourcesnonCompliantPolicies プロパティにあります。 この要求では、その他の情報が提供されます。たとえば、非準拠として数えられている各割り当てや、各割り当ての定義情報などです。 階層内の各ポリシー オブジェクトは、そのレベルでさらに詳細な情報を取得するために使用することができる queryResultsUri を提供しています。

リソースのクエリ

前の例では、value.policyAssignments.policyDefinitions.results.queryResultsUri は、特定のポリシー定義に対するすべての非準拠リソースのサンプル URI を提供します。 $filter 値では、ComplianceState は NonCompliant と等しく (eq)、ポリシー定義に PolicyAssignmentId が指定され、次に PolicyDefinitionId 自体が指定されます。 フィルターに PolicyAssignmentId を含める理由は、スコープが異なる複数のポリシーまたはイニシアティブの割り当てに PolicyDefinitionId が存在する可能性があるためです。 PolicyAssignmentIdPolicyDefinitionId の両方を指定することで、探している結果を明示的に指定できます。 以前は、PolicyStates の場合、過去 24 時間の fromto 時間枠を自動的に設定する latest を使用しました。

queryResultsUri 値の例:

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2025-01-01 04:28:22Z&$to=2025-02-10 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'

イベントの表示

リソースを作成または更新すると、ポリシーの評価結果が生成されます。 これらの結果は "ポリシー イベント" と呼ばれます。 サブスクリプションに関連する最近のポリシー イベントを表示するには、次の URI を使用します。

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01

ポリシー イベントについてクエリを実行する方法の詳細については、Azure Policy のイベントを参照してください。

Azure CLI

Azure Policy の Azure CLI コマンド グループは、REST または Azure PowerShell で使用可能なほとんどの操作に対応しています。 使用可能なコマンドの完全な一覧については、AZ のポリシーに関する記事をご覧ください。

準拠していないリソースの数が最も多い、最上位の割り当てられているポリシーの状態の要約を取得する。

az policy state summarize --top 1

直前に評価されたリソースの状態レコードを取得すると、降順のタイムスタンプに基づく出力の規定値を取得する。

az policy state list --top 1

準拠していないすべての仮想ネットワーク リソースの詳細情報を取得する。

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"

特定の日付以降に発生した、準拠していない仮想ネットワーク リソースに関連するイベントを取得する。 ISO 8601 形式の日付で from パラメーターを使用する。

az policy event list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2025-02-10T00:00:00Z'

Azure PowerShell

Azure Cloud Shell から、次のコマンドを実行します。

準拠していないリソースの数が最も多い、最上位の割り当てられているポリシーの状態の要約を取得する。

Get-AzPolicyStateSummary -Top 1

最近評価されたリソースの状態レコードを取得する。 出力の既定値は、タイムスタンプの降順です。

Get-AzPolicyState -Top 1

準拠していないすべての仮想ネットワーク リソースの詳細情報を取得する。

Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"

特定の日付以降に発生した、準拠していない仮想ネットワーク リソースに関連するイベントを取得する。 ISO 8601 形式の日付で From パラメーターを使用する。

Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2025-02-10'

出力には、Azure PowerShell コマンドレット Get-AzADUser を使用して特定のユーザーを取得するために使用できる PrincipalOid プロパティが含まれています。 {principalOid} は、前のコマンドから取得した値に置き換えてください。

(Get-AzADUser -ObjectId {principalOid}).DisplayName

Azure Monitor ログ

サブスクリプションに関連付けられた Activity Log Analytics ソリューションからの AzureActivity を使用した Log Analytics ワークスペースがある場合は、Kusto クエリと AzureActivity テーブルを使用して、新規および更新されたリソースの評価から非準拠の結果を表示することもできます。 Azure Monitor ログの詳細情報を使用して、非準拠を監視するようにアラートを構成できます。

Azure Resource Graph

コンプライアンス レコードは Azure Resource Graph (ARG) に格納されます。 ARG クエリからデータをエクスポートして、目的のスコープとポリシーに基づいてカスタマイズされたダッシュボードを作成できます。 ARG を使用してコンプライアンス データをエクスポートするためのサンプル クエリを確認してください。

次のステップ