Azure MonitorでSecure Webhookを作成する方法 / Microsoft Entra ID

この記事の内容

  • Azure MonitorのAction GroupでSecure Webhookを構成し、認証されたアクセスのみを許可する方法を解説します
  • Microsoft Entra ID(旧Azure Active Directory)のアクセストークンを用いた認証・認可の仕組みを紹介します
  • Secure Webhook用のサービスプリンシパル作成からアプリケーションロールの割り当てまでの手順を説明します
  • PowerShellスクリプト(SecureWebhookSetup.ps1)を使ったセットアップ方法も紹介します
  • Webhook呼び出し時のBearerトークン検証による安全なシステム連携の実現方法をまとめます

Azure MonitorとAction Groupの概要

Azure Monitorは、クラウドサービスやリソースの監視・通知を行うプラットフォームです。監視イベントを検知した際、Action Groupを通じてメール送信やWebhook呼び出しなど、さまざまなアクションを実行できます。

Webhookは外部システムと連携する際によく使われる仕組みですが、セキュリティの観点からそのままでは不十分なケースがあります。そこで「Secure Webhook」を利用することで、認証されたアクセスのみを許可する、より安全な構成が実現できます。


Secure Webhookの仕組み

Secure Webhookでは、Microsoft Entra IDで認証されたトークンを利用してWebhookの呼び出しを制御します。

Azure MonitorがAction Group経由でWebhookを呼び出す際、Entra IDから取得したアクセストークンをHTTPヘッダーに含めて送信します。Webhook側はこのトークンを検証することで、呼び出し元の認証と権限確認を行うことができます。


前提条件

セットアップを始める前に、以下の準備が必要です。

  • PowerShellのMicrosoft Graphモジュールをインストールしておくこと
  • 適切なスコープでMicrosoft Graphに接続しておくこと

Microsoft Graphへの接続には、以下のコマンドを使用します。

Connect-MgGraph -Scopes "..."

これらの準備を行うことで、後続の手順で必要なコマンドレットが利用可能になります。


Secure Webhook用サービスプリンシパルの作成

Azure MonitorのSecure Webhook機能を利用するには、Microsoftが提供するファーストパーティのアプリケーション(マルチテナント型)を、自テナント内にサービスプリンシパルとして登録する必要があります。

まず、サービスプリンシパルが既に存在するかどうかを確認します。存在しない場合は新たに作成します。

このサービスプリンシパルはMicrosoftが提供する決まったIDを持つアプリケーションであるため、ユーザーが任意のIDを指定するものではありません。テナント内には「エンタープライズアプリケーション」として登録されます。


アプリケーションの登録とロールの設定

ステップ1:アプリケーションの登録

Microsoft Entra ID(Azure Active Directory)の「アプリケーション登録」から、新しいアプリケーションを作成します。

ステップ2:アプリケーションロールの作成

作成したアプリケーションに対して、「Action Group Secure Webhook」用の新しいアプリケーションロールを追加します。

ステップ3:サービスプリンシパルへのロール割り当て

前の手順で作成したSecure Webhook用のサービスプリンシパルに、ステップ2で作成したアプリケーションロールを割り当てます。この操作にはPowerShellの以下のコマンドレットを使用します。

New-MgServicePrincipalAppRoleAssignment `
  -ServicePrincipalId <SecureWebhookサービスプリンシパルのID> `
  -PrincipalId <SecureWebhookサービスプリンシパルのID> `
  -ResourceId <登録アプリのサービスプリンシパルID> `
  -AppRoleId <作成したロールのID>

コマンドレットで使用する各変数の値は、次に説明するセットアップスクリプトを通じて取得・確認できます。


セットアップスクリプトの利用

上記の手順を個別に実行することもできますが、公式ドキュメントではセットアップ用のPowerShellスクリプト(SecureWebhookSetup.ps1)が提供されています。

スクリプトの冒頭部分で以下の情報を指定します。

  • テナントID
  • アプリケーション登録情報(アプリケーションIDなど)
  • 割り当てるロール名

これらを設定してスクリプトを実行するだけで、一連のセットアップが完了します。手順が多い場合はスクリプトを活用することで、ミスなく効率的に構成できます。


動作確認

セットアップ完了後、アプリケーションの「ユーザーとグループ」セクションを確認しましょう。

Secure Webhook用のサービスプリンシパル(例:NSADWebhook)が「Action Group Secure Webhook」ロールに正しく割り当てられていることを確認します。この割り当てが確認できれば、セットアップは成功しています。


Secure Webhookの利用方法

Action Groupの作成画面で「Secure Webhook」を選択し、以下の情報を入力します。

  • オブジェクトID(登録アプリケーションのオブジェクトID)
  • Webhook URL

テスト実行や実際のアクションイベント発生時には、Webhook呼び出しのAuthorizationヘッダーに「Bearerトークン」が自動的に付与されます。

Authorization:Bearer<>

このトークンをデコードすると、以下の情報を確認できます。

  • 呼び出し元のアプリケーションID
  • 割り当てられたロール情報

Webhook側でこのトークンを検証することで、正規のAzure Monitorからの呼び出しであることを確認できる仕組みになっています。


参考情報

Microsoft Entra ID(旧Azure Active Directory)による認証やトークン取得の仕組みについて詳しく知りたい場合は、関連する動画シリーズも参考にしてください。APIへのトークン取得や認証フローの理解を深めることで、Secure Webhookの仕組みをより深く把握できます。


まとめ

Azure MonitorのSecure Webhookを構成することで、認証・認可された安全なWebhook連携が実現できます。今回紹介した主なポイントは以下のとおりです。

  • Secure Webhookの核心:Entra IDのアクセストークンをBearerヘッダーで送信し、Webhook側で検証することで認証・認可を実現します
  • 必要な準備:PowerShellのMicrosoft GraphモジュールとMicrosoft Graphへの接続が前提となります
  • サービスプリンシパルの作成:Microsoftのファーストパーティアプリをサービスプリンシパルとしてテナントに登録します
  • ロールの割り当て:アプリケーションロールを作成し、Secure Webhook用サービスプリンシパルに割り当てます
  • スクリプト活用:公式提供のSecureWebhookSetup.ps1を使うと、セットアップを効率よく進められます

セキュリティを考慮したWebhook連携が必要な場合は、ぜひSecure Webhookの導入を検討してみてください。