Azure リソースのコンプライアンス データを取得する
Azure Policy の最大の利点の 1 つは、サブスクリプション内のリソースまたはサブスクリプションの管理グループを介して提供される分析情報と制御です。 この制御は、リソースが誤った場所に作成されるのを防いだり、一般的で一貫性のあるタグの使用を強制したり、既存のリソースの適切な構成と設定を監査したりするために使用できます。 どの場合でも Azure Policy によってデータが生成され、環境のコンプライアンス状態の理解に役立てることができます。
コンプライアンス データを確認する前に、Azure Policy のコンプライアンスの状態を理解することが重要です。
ポリシーとイニシアティブ割り当てによって生成されたコンプライアンス情報には、次のようないくつかの方法でアクセスすることができます。
- Azure ポータルの使用
- コマンド ライン スクリプトを通じて
- Azure Monitor ログを表示する
- Azure Resource Graph のクエリを使用
コンプライアンスの報告方法を説明する前に、コンプライアンス情報がいつ更新されるかと、評価サイクルをトリガーする頻度とイベントについて説明します。
評価のトリガー
完了した評価サイクルの結果は、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 で使用できるようになります。
マシン構成リソース プロバイダーは、管理対象リソースによってコンプライアンスの詳細で更新されます。
オンデマンド スキャン
注意
設計上、Azure Policy により、評価可能なサブスクリプションとリソース グループを除き、Microsoft.Resources
リソース プロバイダー (RP) の下にあるすべてのリソースがポリシー評価から除外されます。
オンデマンドの評価スキャン
サブスクリプションまたはリソース グループの評価スキャンは、Azure CLI、Azure PowerShell、または REST API への呼び出しを使用して、または Azure Policy Compliance Scan GitHub アクションを使用して開始できます。 このスキャンは非同期プロセスです。
Note
すべての Azure リソース プロバイダーがオンデマンド評価スキャンをサポートしているわけではありません。 たとえば、現在、Azure Virtual Network Manager (AVNM) では、手動トリガーまたは標準ポリシー コンプライアンス評価サイクル (毎日のスキャン) はサポートされていません。
オンデマンド評価スキャン - GitHub アクション
Azure Policy Compliance Scan アクションを使用して、1 つまたは複数のリソース、リソース グループ、またはサブスクリプションに対して GitHub ワークフローからオンデマンドの評価スキャンをトリガーし、リソースのコンプライアンス状態に基づいてワークフローをゲートします。 また、スケジュールされた時刻に実行するようにワークフローを構成することもできます。これにより、最新のコンプライアンス状態を都合のよいタイミングで取得できます。 必要に応じて、GitHub Actions では、スキャンされたリソースのコンプライアンス状態に関するレポートを生成し、詳細な分析やアーカイブを行うことができます。
次の例では、サブスクリプションに対してコンプライアンス スキャンを実行しています。
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@v1
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Check for resource compliance
uses: azure/policy-compliance-scan@v0
with:
scopes: |
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
詳細とワークフローのサンプルについては、Azure Policy Compliance Scan リポジトリの GitHub Actions を参照してください。
オンデマンド評価スキャン - Azure CLI
対応スキャンは az policy state trigger-scan コマンドを使用して開始されます。
既定では、az policy state trigger-scan
によって現在のサブスクリプションのすべてのリソースの評価が開始されます。 特定のリソース グループで評価を開始するには、resource-group
パラメーターを使用します。 次の例では、MyRG リソース グループの現在のサブスクリプションで対応スキャンを開始します。
az policy state trigger-scan --resource-group "MyRG"
no-wait
パラメーターを使用して、非同期プロセスが完了するまで待機せずに続行することを選択できます。
オンデマンド評価スキャン - Azure PowerShell
対応スキャンは、Start-AzPolicyComplianceScan コマンドレットを使用して開始されます。
既定では、Start-AzPolicyComplianceScan
によって現在のサブスクリプションのすべてのリソースの評価が開始されます。 特定のリソース グループで評価を開始するには、ResourceGroupName
パラメーターを使用します。 次の例では、MyRG リソース グループの現在のサブスクリプションで対応スキャンを開始します。
Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'
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 に変わります。
オンデマンドの評価スキャン - REST
非同期プロセスであるため、スキャンを開始する REST エンドポイントは、スキャンが応答を完了するまで待機しません。 代わりに、要求された評価の状態を照会する URI を提供します。
各 REST API URI には、独自の値で置き換える必要のある変数があります。
{YourRG}
- リソース グループの名前に置き換えます{subscriptionId}
- サブスクリプション ID で置き換えます
スキャンは、サブスクリプションまたはリソース グループ内のリソースの評価をサポートしています。 次の URI の構造を使用して、REST API の POST コマンドでスコープによるスキャンを開始します。
サブスクリプション
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
Resource group
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
この呼び出しは「202 受理されました」の状態を返します。 応答ヘッダーには、次の形式の 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 応答です。
{
"status": "Succeeded"
}
オンデマンドの評価スキャン - Visual Studio Code
Visual Studio Code 用の Azure Policy 拡張機能では、特定のリソースに対して評価スキャンを実行できます。 このスキャンは、Azure PowerShell と REST メソッドとは異なり、同期プロセスです。 詳細と手順については、VS Code 拡張機能を使用したオンデマンド評価に関する記事を参照してください。
ポータル
Azure portal には、環境のコンプライアンス状態を視覚化して理解するためのグラフィカルなエクスペリエンスが表示されます。 [ポリシー] ページの [概要] オプションでは、ポリシーとイニシアティブの両方のコンプライアンスに関して、利用可能なスコープの詳細が表示されます。 コンプライアンス状態および割り当てごとの数と共に、過去 7 日間のコンプライアンスを示すグラフが含まれます。 [コンプライアンス] ページには、この同じ情報の大部分 (グラフを除く) が含まれていますが、その他のフィルター処理と並べ替えのオプションが追加されています。
ポリシーまたはイニシアティブは異なるスコープに割り当てることができるため、表には、各割り当てのスコープと割り当てられた定義の種類が含まれます。 各割り当ての準拠していないリソースおよび準拠していないポリシーの数も提供されます。 表のポリシーまたはイニシアティブを選択すると、その特定の割り当てのコンプライアンスに関する詳しい情報が表示されます。
[リソース コンプライアンス] タブのリソース リストには、現在の割り当てに対する既存のリソースの評価状態が表示されます。 タブでは既定で [非対応] に設定されますが、これをフィルター処理することができます。 リソースの作成要求によってトリガーされるイベント (追加、監査、拒否、デプロイ、変更) は、 [イベント] タブに表示されます。
のリソースについては、[リソースのコンプライアンス] タブで、リソースを選択するか、行を右クリックして [ポリシー準拠状況の詳細] を選択すると、コンポーネントのコンプライアンスの詳細が表示されます。 このページには、このリソースに割り当てられているポリシー、イベント、コンポーネント イベント、変更履歴を表示するためのタブも用意されています。
リソースのコンプライアンス ページに戻って、詳細情報を収集するイベントの行を選択したままにし (または右クリックし)、 [アクティビティ ログの表示] を選択します。 [アクティビティ ログ] ページが開き、割り当てとイベントの詳細を示す検索結果が事前フィルター処理されます。 アクティビティ ログは、これらのイベントに関するより詳細なコンテキストと情報を提供します。
注意
コンプライアンスの結果は、Azure Resource Graph クエリを使用してポータルからエクスポートできます。
コマンド ライン
ポータルで入手できるのと同じ情報を、REST API (ARMClient などを使用)、Azure PowerShell、Azure CLI を使用して取得できます。 REST API の完全な詳細については、Azure Policy リファレンスを参照してください。 REST API リファレンス ページには、各操作に緑色の [使ってみる] ボタンがあり、ブラウザーで直接試すことができます。
REST API の例については、ARMClient または同様のツールを使用して Azure に対する認証を処理します。
結果の要約
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
出力はサブスクリプションを要約しています。 次の出力例では、要約されたコンプライアンスは value.results.nonCompliantResources
と value.results.nonCompliantPolicies
の下にあります。 この要求では、より詳細な情報が提供されます。たとえば、非準拠として数えられている各割り当てや、各割り当ての定義情報などです。 階層内の各ポリシー オブジェクトは、そのレベルでさらに詳細な情報を取得するために使用することができる queryResultsUri
を提供しています。
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
"policySetDefinitionId": "",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyDefinitions": [
{
"policyDefinitionReferenceId": "",
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effect": "deny",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 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'",
"nonCompliantResources": 15
}
}
]
}
]
}
]
}
リソースのクエリ
前の例では、value.policyAssignments.policyDefinitions.results.queryResultsUri
は、特定のポリシー定義に対するすべての非準拠リソースのサンプル URI を提供します。 $filter
値では、ComplianceState は NonCompliant
と等しく (eq)、ポリシー定義に PolicyAssignmentId
が指定され、次に PolicyDefinitionId 自体が指定されます。 フィルターに PolicyAssignmentId
を含める理由は、スコープが異なる複数のポリシーまたはイニシアティブの割り当てに PolicyDefinitionId
が存在する可能性があるためです。 PolicyAssignmentId
と PolicyDefinitionId
の両方を指定することで、探している結果を明示的に指定できます。 以前は、PolicyStates
の場合、過去 24 時間の from
と to
時間枠を自動的に設定する latest
を使用しました。
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 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'
次の応答例は、簡潔にするため、1 つの準拠していないリソースを示すようにトリミングされました。 詳細な応答には、リソース、ポリシーまたはイニシアティブ、および割り当てに関するいくつかのデータがあります。 ポリシー定義にどの割り当てパラメーターが渡されたかを確認することもできることに注意してください。
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 15,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"timestamp": "2018-05-19T04:41:09Z",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effectiveParameters": "",
"ComplianceState": "NonCompliant",
"subscriptionId": "{subscriptionId}",
"resourceType": "/Microsoft.Compute/virtualMachines",
"resourceLocation": "westus2",
"resourceGroup": "RG-Tags",
"resourceTags": "tbd",
"policyAssignmentName": "37ce239ae4304622914f0c77",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
"policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
"policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
"policyDefinitionAction": "deny",
"policyDefinitionCategory": "tbd",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionCategory": "",
"policySetDefinitionParameters": "",
"managementGroupIds": "",
"policyDefinitionReferenceId": ""
}
]
}
イベントの表示
リソースを作成または更新すると、ポリシーの評価結果が生成されます。 これらの結果は "ポリシー イベント" と呼ばれます。 サブスクリプションに関連する最近のポリシー イベントを表示するには、次の URI を使用します。
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01
次のような結果が返されます。
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
"NumAuditEvents": 16
}
]
}
ポリシー イベントについてクエリを実行する方法の詳細については、Azure Policy のイベントに関する API リファレンスの記事を参照してください。
Azure CLI
Azure Policy の Azure CLI コマンド グループは、REST または Azure PowerShell で使用可能なほとんどの操作に対応しています。 使用可能なコマンドの完全な一覧については、Azure CLI の Azure Policy の概要に関する記事をご覧ください。
例:準拠していないリソースの数が最も多い、最上位の割り当てられているポリシーの状態の要約を取得する。
az policy state summarize --top 1
応答の一番上の部分は次の例のようになります。
{
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"odataid": null,
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyDefinitions": [
{
"effect": "audit",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"results": {
"nonCompliantPolicies": null,
"nonCompliantResources": 398,
"policyDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"policyGroupDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
"resourceDetails": [
{
"complianceState": "noncompliant",
"count": 398
},
{
"complianceState": "compliant",
"count": 4
}
]
}
}
],
...
例:直前に評価されたリソースの状態レコードを取得する (既定では降順のタイムスタンプに基づく)。
az policy state list --top 1
[
{
"complianceReasonCode": "",
"complianceState": "Compliant",
"effectiveParameters": "",
"isCompliant": true,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
"policyAssignmentName": "SecurityCenterBuiltIn",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "auditifnotexists",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "security center",
"policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "",
"resourceId": "/subscriptions/{subscriptionId}",
"resourceLocation": "",
"resourceTags": "tbd",
"resourceType": "Microsoft.Resources/subscriptions",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.903433+00:00"
}
]
例:準拠していないすべての仮想ネットワーク リソースの詳細情報を取得する。
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
例:特定の日付以降に発生した、準拠していない仮想ネットワーク リソースに関連するイベントを取得する。
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
Azure PowerShell
Azure Policy 用の Azure PowerShell モジュールは、PowerShell ギャラリーで Az.PolicyInsights として入手できます。 PowerShellGet では、Install-Module -Name Az.PolicyInsights
を使用してモジュールをインストールできます (最新の Install-Module -Name Az.PolicyInsights
がインストールされていることを確認してください)。
# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights
# Import the downloaded module
Import-Module Az.PolicyInsights
# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount
モジュールには次のコマンドレットがあります。
Get-AzPolicyStateSummary
Get-AzPolicyState
Get-AzPolicyEvent
Get-AzPolicyRemediation
Remove-AzPolicyRemediation
Start-AzPolicyRemediation
Stop-AzPolicyRemediation
例:準拠していないリソースの数が最も多い、最上位の割り当てられているポリシーの状態の要約を取得する。
PS> Get-AzPolicyStateSummary -Top 1
NonCompliantResources : 15
NonCompliantPolicies : 1
PolicyAssignments : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
oft.authorization/policyassignments/37ce239ae4304622914f0c77}
例:直前に評価されたリソースの状態レコードを取得する (既定では降順のタイムスタンプに基づく)。
PS> Get-AzPolicyState -Top 1
Timestamp : 5/22/2018 3:47:34 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/networkInterfaces
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
例:準拠していないすべての仮想ネットワーク リソースの詳細情報を取得する。
PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"
Timestamp : 5/22/2018 4:02:20 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
例:特定の日付以降に発生した、準拠していない仮想ネットワーク リソースに関連するイベントを取得し、CSV オブジェクトに変換し、ファイルにエクスポートする。
$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'
$policyEvents
オブジェクトの出力は次の出力のようになります。
Timestamp : 9/19/2020 5:18:53 AM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : eastus
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
TenantId : {tenantId}
PrincipalOid : {principalOid}
PrincipalOid
フィールドは、Azure PowerShell コマンドレット Get-AzADUser
を使用して特定のユーザーを取得するために使用できます。 {principalOid}
を、前の例で取得した応答に置き換えます。
PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker
Azure Monitor ログ
サブスクリプションに関連付けられた Activity Log Analytics ソリューションからの AzureActivity
を使用した Log Analytics ワークスペースがある場合は、単純な Kusto クエリと AzureActivity
テーブルを使用して、新規および更新されたリソースの評価から非準拠の結果を表示することもできます。 Azure Monitor ログの詳細情報を使用して、非準拠を監視するようにアラートを構成できます。
Azure Resource Graph
コンプライアンス レコードは Azure Resource Graph (ARG) に格納されます。 ARG クエリからデータをエクスポートして、目的のスコープとポリシーに基づいてカスタマイズされたダッシュボードを作成できます。 ARG を使用してコンプライアンス データをエクスポートするためのサンプル クエリを確認してください。
次のステップ
- Azure Policy のサンプルを確認します。
- 「Azure Policy の定義の構造」を確認します。
- 「Policy の効果について」を確認します。
- プログラムによってポリシーを作成する方法を理解します。
- 準拠していないリソースを修復する方法を学習します。
- 「Azure 管理グループのリソースを整理する」で、管理グループとは何かを確認します。