Azure のポリシーとイニシアティブを使用して大規模な診断設定を作成する
Azure リソースを監視するには、各リソースの診断設定を作成する必要があります。 このプロセスは、多くのリソースがある場合に管理するのが難しい場合があります。 診断設定を大規模に作成して適用するプロセスを簡略化するには、Azure Policy を使用して、新規リソースと既存リソースの両方の診断設定を自動的に生成します。
Azure リソースの種類にはそれぞれ、診断設定に一覧表示される一意のカテゴリのセットがあります。 そのため、各リソースの種類には個別のポリシー定義が必要です。 一部のリソースの種類には、変更せずに割り当てることができる組み込みのポリシー定義があります。 その他のリソースの種類については、カスタム定義を作成できます。
ログ カテゴリ グループ
ログ カテゴリ グループは、同様の種類のログをまとめてグループ化します。 カテゴリ グループを使用すると、1 つのコマンドで複数のログを簡単に参照できます。 すべてのログを含む allLogs カテゴリ グループが存在します。 さらに、すべての監査ログを含む audit カテゴリ グループもあります。 カテゴリ グループを使用すると、新しいログ カテゴリがグループに追加されると動的に更新されるポリシーを定義できます。
Azure Monitor 用の組み込みポリシー定義
通常、リソースの種類ごとに 3 つの組み込みポリシー定義があり、診断を送信する次の 3 つの宛先に対応しています。
- Log Analytics ワークスペース
- Azure Storage アカウント
- Event Hubs
必要な宛先に応じて、リソースの種類のポリシーを割り当てます。
監査ログ カテゴリ グループに基づく一連のポリシーの組み込みポリシーとイニシアティブが開発されており、わずか数ステップで診断設定を適用できます。 詳細については、「組み込みポリシーを使用してカテゴリ グループ別の診断設定を有効にする」を参照してください。
Azure Monitor の組み込みポリシーの完全なリストについては、「Azure Monitor 用の Azure Policy 組み込み定義」を参照してください。
カスタム ポリシー定義
組み込みポリシーがないリソースの種類の場合、カスタム ポリシー定義を作成する必要があります。 既存の組み込みポリシーをコピーし、リソースの種類に合わせて変更することによって、Azure portal で手動で新規ポリシーを作成できます。 あるいは、PowerShell ギャラリーにあるスクリプトを使用して、プログラムによってポリシーを作成します。
Create-AzDiagPolicy スクリプトを使用すると、PowerShell または Azure CLI を使用してインストールできる特定のリソースの種類用ポリシー ファイルを作成できます。 診断設定のカスタム ポリシー定義を作成するには、次の手順を使用します。
Azure PowerShell がインストールされていることを確認します。
次のコマンドを使用してスクリプトをインストールします。
Install-Script -Name Create-AzDiagPolicy
ログの送信先を指定するパラメーターを使用してスクリプトを実行します。 サブスクリプションとリソースの種類を指定するように求められます。
たとえば、Log Analytics ワークスペースとイベント ハブにログを送信するポリシー定義を作成するには、次のコマンドを使用します。
Create-AzDiagPolicy.ps1 -ExportLA -ExportEH -ExportDir ".\PolicyFiles"
または、コマンドでサブスクリプションとリソースの種類を指定することもできます。 たとえば、SQL Server データベースの Log Analytics ワークスペースとイベント ハブにログを送信するポリシー定義を作成するには、次のコマンドを使用します。
Create-AzDiagPolicy.ps1 -SubscriptionID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -ResourceType Microsoft.Sql/servers/databases -ExportLA -ExportEH -ExportDir ".\PolicyFiles"
このスクリプトによって、ポリシー定義ごとに個別のフォルダーが作成されます。 各フォルダーには、azurepolicy.json、azurepolicy.rules.json、azurepolicy.parameters.json という名前の 3 つのファイルが含まれます。 Azure portal でポリシーを手動で作成する場合は、azurepolicy.json にはポリシー定義全体が含まれているため、その内容をコピーして貼り付けることができます。 PowerShell または Azure CLI で他の 2 つのファイルを使用して、コマンド ラインからポリシー定義を作成します。
次の例は、PowerShell と Azure CLI の両方からポリシー定義をインストールする方法を示しています。 各例には、組み込みポリシー定義を使用して新しいポリシー定義をグループ化するために、監視カテゴリを指定するメタデータが含まれています。
New-AzPolicyDefinition -name "Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace" -policy .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json -parameter .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json -mode All -Metadata '{"category":"Monitoring"}'
az policy definition create --name 'deploy-diag-setting-sql-database--workspace' --display-name 'Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace' --rules 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json' --params 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json' --subscription 'AzureMonitor_Docs' --mode All
イニシアティブ
一般的な戦略では、ポリシー定義ごとに割り当てを作成する代わりに、各 Azure サービスの診断設定を作成するためのポリシー定義を含むイニシアティブを作成します。 お使いの環境の管理方法に応じて、イニシアティブと管理グループ、サブスクリプション、またはリソース グループ間の割り当てを作成します。 この戦略には次の利点があります。
- リソースの種類ごとに複数の割り当てを作成する代わりに、イニシアティブに対して単一の割り当てを作成します。 同じイニシアティブを複数の監視グループ、サブスクリプション、またはリソース グループに使用します。
- 新しいリソースの種類または送信先を追加する必要が生じたら、イニシアティブを変更します。 たとえば、最初の要件では、データを Log Analytics ワークスペースのみに送信する必要があったが、後でイベント ハブを追加する必要が生じた場合などです。 新しい割り当てを作成するのではなく、イニシアティブを変更します。
イニシアティブの作成の詳細については、「イニシアティブ定義の作成と割り当て」を参照してください。 次の推奨事項を検討してください。
- [カテゴリ] を [監視] に設定して、関連する組み込みおよびカスタムのポリシー定義を使用してグループ化します。
- イニシアティブに含まれるポリシー定義の Log Analytics ワークスペースとイベント ハブの詳細を指定する代わりに、共通のイニシアティブ パラメーターを使用します。 このパラメーターを使用すると、すべてのポリシー定義に共通の値を簡単に指定し、必要に応じてその値を変更することができます。
割り当て
監視対象のリソースのスコープに応じて、イニシアティブを Azure 管理グループ、サブスクリプション、またはリソース グループに割り当てます。 管理グループは、特に組織に複数のサブスクリプションがある場合に、ポリシーのスコープ設定に役立ちます。
イニシアティブ パラメーターを使用すると、イニシアティブ内のすべてのポリシー定義に対して 1 回でワークスペースまたはその他の詳細を指定することができます。
Remediation
イニシアティブは、各仮想マシンの作成時に適用されます。 修復タスクでは、イニシアティブ内のポリシー定義が既存のリソースにデプロイされるため、既に作成されているすべてのリソースの診断設定を作成できます。
Azure portal を使用して割り当てを作成するときに、修復タスクを同時に作成することができます。 修復の詳細については、「Azure Policy を使って準拠していないリソースを修復する」を参照してください。
トラブルシューティング
メトリック カテゴリがサポートされていない
診断設定をデプロイすると、"メトリック カテゴリ 'xxxx' がサポートされていません" のようなエラー メッセージが表示されます。 以前のデプロイが成功した場合でも、このエラーが表示される場合があります。
この問題は、Resource Manager テンプレート、REST API、Azure CLI、または Azure PowerShell を使用するときに発生します。 Azure portal を使用して作成された診断設定は、サポートされているカテゴリ名のみが表示されるため、影響を受けません。
この問題は、基になる API の最近の変更が原因で発生します。 'AllMetrics' 以外のメトリック カテゴリはサポートされておらず、いくつかの特定の Azure サービスの場合を除き、サポートされていたこともありません。 以前は、診断設定のデプロイ時に他のカテゴリ名は無視されていました。 これらのカテゴリは、Azure Monitor バックエンドによって 'AllMetrics' にリダイレクトされました。 2021 年 2 月の時点で、提供されたメトリック カテゴリが正確であることを明確に確認するためにバックエンドが更新されました。 この変更が原因で一部のデプロイに失敗しました。
このエラーが発生した場合は、メトリック カテゴリ名をすべて 'AllMetrics' に置き換えるようにデプロイを更新して問題を解決してください。 以前にデプロイで複数のカテゴリを追加していた場合は、'AllMetrics' 参照を持つ 1 つのみを保持する必要があります。 問題が引き続き発生する場合は、Azure portal から Azure サポートにお問い合わせください。
resourceID の ASCII 以外の文字が原因で設定が消える
診断設定では、ASCII 以外の文字 (Preproducción など) を含む resourceID はサポートされていません。 Azure でリソースの名前を変更することはできないため、唯一のオプションは、非 ASCII 文字を使用せずに新しいリソースを作成することです。 文字がリソース グループ内にある場合は、その下のリソースを新しいリソースに移動できます。 それ以外の場合は、リソースを再作成する必要があります。