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トークン」が自動的に付与されます。
このトークンをデコードすると、以下の情報を確認できます。
- 呼び出し元のアプリケーション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の導入を検討してみてください。