プロビジョニングを Azure Monitor ログと統合する方法の概要
プロビジョニングは、Azure Monitor ログおよび Log Analytics と統合されています。 Azure Monitoring を使用すると、ブック (ダッシュボードとも呼ばれます) の作成、プロビジョニング ログの 30 日以上の保存、カスタム クエリとアラートの作成などを行うことができます。 この記事では、プロビジョニング ログを Azure Monitor ログと統合する方法について説明します。 プロビジョニング ログの全般的なしくみの詳細については、プロビジョニング ログに関するページを参照してください。
プロビジョニング ログの有効化
Azure Monitor と Log Analytics にまだ慣れていない場合は、次のリソースを確認してから改めてアプリケーション プロビジョニング ログと Azure Monitor ログの統合について学習してください。
プロビジョニング ログと Azure Monitor ログを統合するには:
セキュリティ管理者以上として Microsoft Entra 管理センターにサインインします。
[ID]>[監視と正常性]>[診断設定] の順にアクセスします。
ストリーム配信するログを選択して、[Log Analytics ワークスペースへの送信] オプションを選択し、フィールドに設定を入力します。
[ID]>[監視と正常性]>[Log Analytics] にアクセスし、データのクエリを開始します。
Note
最初に統合を有効にした後、Log Analytics 内にログが表示されるまでに時間がかかる場合があります。 サブスクリプションが microsoft.insights を使用するように登録されていないというエラーを受け取った場合は、数分後にもう一度確認してください。
データの説明
プロビジョニングからログ ビューアーに送信される基のデータ ストリームはほぼ同じです。 Azure Monitor ログは、Microsoft Entra 管理センターや Microsoft Graph API とほぼ同じストリームを取得します。 次の表の中に示すように、ログ フィールド内にはいくつかの違いがあります。 Log Analytics では、Microsoft Entra 管理センター内のログよりも多くのイベントが表示される場合があります。 これらのフィールドの詳細については、「provisioningObjectSummary を一覧表示する」を参照してください。
Azure Monitor ログ | Azure portal UI | Azure API |
---|---|---|
errorDescription | reason | resultDescription |
status | resultType | resultType |
activityDateTime | TimeGenerated | TimeGenerated |
Microsoft Entra ブック
Microsoft Entra ID ブックには、データ分析用の柔軟なキャンバスが用意されています。 また、Azure portal 内で上質なビジュアル レポートを作成することもできます。 詳細については、Microsoft Entra ブックを参照してください。
プロビジョニング分析とプロビジョニングの分析情報は、使用可能な事前構築済みのブックの 2 つです。 データを表示するには、すべてのフィルター (timeRange、jobID、appName) を設定する必要があります。 また、アプリがプロビジョニングされていることも確認します。プロビジョニングされていないと、ログにはデータがありません。
カスタム クエリ
カスタム クエリを作成し、ブックの中にそのデータを表示できます。 方法については、「Azure Monitor でログ クエリの使用を開始する」と「Azure Monitor でのログ クエリ」を参照してください。
アプリケーション プロビジョニング ログ クエリを開始するためのサンプルをいくつか次に示します。
ソース システムの ID に基づいて、ユーザーのログに対してクエリを実行する:
AADProvisioningLogs
| extend SourceIdentity = parse_json(SourceIdentity)
| where tostring(SourceIdentity.Id) == "49a4974bb-5011-415d-b9b8-78caa7024f9a"
ErrorCode あたりの集計数:
AADProvisioningLogs
| summarize count() by ErrorCode = ResultSignature
アクション別の 1 日あたりのイベント数の集計:
AADProvisioningLogs
| where TimeGenerated > ago(7d)
| summarize count() by Action, bin(TimeGenerated, 1d)
100 イベントとプロジェクト キーのプロパティを取得する:
AADProvisioningLogs
| extend SourceIdentity = parse_json(SourceIdentity)
| extend TargetIdentity = parse_json(TargetIdentity)
| extend ServicePrincipal = parse_json(ServicePrincipal)
| where tostring(SourceIdentity.identityType) == "Group"
| project tostring(ServicePrincipal.Id), tostring(ServicePrincipal.Name), ModifiedProperties, JobId, Id, CycleId, ChangeId, Action, SourceIdentity.identityType, SourceIdentity.details, TargetIdentity.identityType, TargetIdentity.details, ProvisioningSteps
| take 100
参照の解決に問題があるため、スキップされたメンバーがあるグループを取得します。
AADProvisioningLogs
| where TimeGenerated >= ago(10d)
| where JobId == "Azure2Azure.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend SourceIdentity = parse_json(SourceIdentity)
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| where tostring(SourceIdentity.identityType) == "Group"
| where ProvisioningSteps matches regex "UnableToResolveReferenceAttributeValue"
| parse tostring(ProvisioningSteps.[2].description) with "We were unable to assign " userObjectId " as the members of " groupDisplayName "." *
| project groupDisplayName, userObjectId, JobId
| take 100
アプリケーション別にアクションを要約します。
AADProvisioningLogs
| where TimeGenerated > ago(30d)
| where JobId == "Azure2Azure.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| extend eventName = tostring(ProvisioningSteps.[-1].name)
| summarize count() by eventName, JobId
| order by JobId asc
| take 5
特定の操作の急増を特定します。
AADProvisioningLogs
| where TimeGenerated > ago(30d)
| where JobId == "scim.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| extend eventName = tostring(ProvisioningSteps.[-1].name)
| summarize count() by eventName, bin(TimeGenerated, 1d)
| render timechart
カスタム アラート
Azure Monitor を使用すると、プロビジョニングに関連する主要なイベントに関する通知を受け取ることができるように、カスタム アラートを構成することができます。 たとえば、障害が急増した場合にアラートを受け取ることができます。 また、無効または削除が急増することもあります。 アラートが必要なもう 1 つの例として、プロビジョニングがないことがあります。これは、何かがうまく行っていないことを示します。
アラートについて詳しくは、Azure Monitor のログ アラートに関するページをご覧ください。
障害が急増した場合にアラートを発します。 jobID は、お使いのアプリケーションの jobID に置き換えてください。
プロビジョニング サービスの実行が停止する原因となった問題が発生している可能性があります。 次のアラートを使用して、特定の期間にプロビジョニング イベントがないことを検出します。
無効または削除が急増した場合にアラートを発します。
コミュニティからの投稿
Microsoft では、アプリケーションのプロビジョニングのクエリとダッシュボードに対して、オープン ソースとコミュニティベースのアプローチを採用しています。 ぜひ、他のユーザーに役立つと思われるクエリ、アラート、またはブックを作成し、Azure Monitor コミュニティの GitHub リポジトリに公開してください。 そして、リンクを含むメールを Microsoft までお送りください。 Microsoft がクエリとダッシュボードをレビューしてサービスに公開し、他のユーザーも利用できるようにします。 provisioningfeedback@microsoft.com までお問い合わせください。