Microsoft Entra で保護されたエンドポイントにイベントを配信する

この記事では、Microsoft Entra ID を使用して、イベント サブスクリプションWebhook エンドポイント間の接続をセキュリティで保護する方法について説明します。 ここではデモンストレーションのために Azure portal を使用しますが、CLI、PowerShell、または SDK を使用してこの機能を有効にすることもできます。

重要

セキュリティの脆弱性に対処するために、2021 年 3 月 30 日にイベント サブスクリプションの作成または更新の一環として追加のアクセス確認が導入されました。 サブスクライバー クライアントのサービス プリンシパルは、所有者であるか、配信先のアプリケーション サービス プリンシパルのロールが割り当てられている必要があります。 下記の新たな手順に従って、Microsoft Entra アプリケーションを再構成します。Microsoft Entra アプリケーションとサービス プリンシパルの概要については、Microsoft ID プラットフォーム (v2.0) の概要を参照してください。

シナリオ

この記事では、次の 2 つのシナリオを実装する方法を詳しく説明します。

同じ Microsoft Entra テナントの Webhook にイベントを配信する

次の図は、Event Grid イベントが、イベント サブスクリプションと同じテナント内の Webhook にどのように配信されるかを示しています。

Image that depicts secure delivery of events to a webhook that's in the same tenant.

このセクションには 2 つのサブセクションがあります。 これらのシナリオを両方とも、または関心のある方だけをお読みください。

Microsoft Entra ユーザーを使用してイベント サブスクリプションを構成する

このセクションでは、Microsoft Entra ユーザーを使用してイベント サブスクリプションを構成する方法について説明します。

  1. Microsoft Entra (シングル テナント) で動作するように構成された Webhook 用の Microsoft Entra アプリケーションを作成します。

  2. テナントで Azure Shell を開き、PowerShell 環境を選択します。

  3. テナントに接続するために、 $webhookAadTenantId の値を変更します。

    • Variables:
      • $webhookAadTenantId: Azure テナント ID
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  4. 次のスクリプトを開き、$webhookAppObjectId$eventSubscriptionWriterUserPrincipalName の値を実際の識別子に置き換えて更新し、スクリプトの実行を続けます。

    • Variables:
      • $webhookAppObjectId: Webhook 用に作成された Microsoft Entra アプリケーション ID
      • $eventSubscriptionWriterUserPrincipalName: イベント サブスクリプションを作成するユーザーの Azure ユーザー プリンシパル名

    Note

    $eventGridAppId の値を変更する必要はありません。 このスクリプトでは、$eventGridRoleNameAzureEventGridSecureWebhookSubscriber が設定されます。 このスクリプトを実行するには、Microsoft Entra アプリケーション管理者ロールのメンバーか、Microsoft Entra ID で Webhook アプリのサービス プリンシパルの所有者である必要があります。

    次のエラー メッセージが表示された場合は、サービス プリンシパルに昇格する必要があります。 セキュリティの脆弱性に対処するために、2021 年 3 月 30 日にイベント サブスクリプションの作成または更新の一環として追加のアクセス確認が導入されました。 サブスクライバー クライアントのサービス プリンシパルは、所有者であるか、配信先のアプリケーション サービス プリンシパルのロールが割り当てられている必要があります。

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    
  5. ポータルでイベント サブスクリプションを作成するときは、次の手順を実行します。

    1. エンドポイントの種類として [Webhook] を選択します。

    2. エンドポイントの URI を指定します。

      Select endpoint type webhook

    3. [イベント サブスクリプションの作成] ページの上部にある [追加機能] タブを選択します。

    4. [追加機能] タブで、次の手順を実行します。

      1. [Use Microsoft Entra authentication] (Microsoft Entra 認証を使用する) を選択し、テナント ID とアプリケーション ID を構成します。

      2. スクリプトの出力から Microsoft Entra のテナント ID をコピーし、[Microsoft Entra tenant ID] (Microsoft Entra テナント ID) フィールドに入力します。

      3. スクリプトの出力から Microsoft Entra のアプリケーション ID をコピーし、[Microsoft Entra Application ID] (Microsoft Entra アプリケーション ID) フィールドに入力します。 アプリケーション ID を使用する代わりに、Microsoft Entra アプリケーション ID URI を使用できます。 アプリケーション ID URI の詳細については、こちらの記事を参照してください。

        Secure Webhook action

Microsoft Entra アプリケーションを使用してイベント サブスクリプションを構成する

このセクションでは、Microsoft Entra アプリケーションを使用してイベント サブスクリプションを構成する方法について説明します。

  1. Microsoft Entra (シングル テナント) で動作するように構成された Event Grid サブスクリプション ライター用の Microsoft Entra アプリケーションを作成します。

  2. Microsoft Entra アプリケーションのシークレットを作成し、値を保存します (この値は後で必要になります)。

  3. Event Grid トピックの [アクセス制御 (IAM)] ページに移動し、Event Grid サブスクリプション ライター アプリに Event Grid 共同作成者ロールを割り当てます。 この手順を使用すると、Azure CLI を使用して、Microsoft Entra アプリケーションで Azure にログインしたときに Event Grid リソースにアクセスできるようになります。

  4. Microsoft Entra (シングル テナント) で動作するように構成された Webhook 用の Microsoft Entra アプリケーションを作成します。

  5. テナントで Azure Shell を開き、PowerShell 環境を選択します。

  6. テナントに接続するために、 $webhookAadTenantId の値を変更します。

    • Variables:
      • $webhookAadTenantId: Azure テナント ID
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  7. 次のスクリプトを開き、$webhookAppObjectId$eventSubscriptionWriterAppId の値を実際の識別子に置き換えて更新し、スクリプトの実行を続けます。

    • Variables:
      • $webhookAppObjectId: Webhook 用に作成された Microsoft Entra アプリケーション ID
      • $eventSubscriptionWriterAppId: Event Grid サブスクリプション ライター アプリの Microsoft Entra アプリケーション ID。

    Note

    $eventGridAppId の値を変更する必要はありません。 このスクリプトでは、$eventGridRoleNameAzureEventGridSecureWebhookSubscriber が設定されます。 このスクリプトを実行するには、Microsoft Entra アプリケーション管理者ロールのメンバーか、Microsoft Entra ID で Webhook アプリのサービス プリンシパルの所有者である必要があります。

  8. コマンドを実行して、Event Grid サブスクリプション ライター Microsoft Entra アプリケーションとしてサインインします。

    az login --service-principal -u [REPLACE_WITH_EVENT_GRID_SUBSCRIPTION_WRITER_APP_ID] -p [REPLACE_WITH_EVENT_GRID_SUBSCRIPTION_WRITER_APP_SECRET_VALUE] --tenant [REPLACE_WITH_TENANT_ID]
    
  9. 次のコマンドを実行して、サブスクリプションを作成します。

    az eventgrid system-topic event-subscription create --name [REPLACE_WITH_SUBSCRIPTION_NAME] -g [REPLACE_WITH_RESOURCE_GROUP] --system-topic-name [REPLACE_WITH_SYSTEM_TOPIC] --endpoint [REPLACE_WITH_WEBHOOK_ENDPOINT] --event-delivery-schema [REPLACE_WITH_WEBHOOK_EVENT_SCHEMA] --azure-active-directory-tenant-id [REPLACE_WITH_TENANT_ID] --azure-active-directory-application-id-or-uri [REPLACE_WITH_APPLICATION_ID_FROM_SCRIPT] --endpoint-type webhook
    

    Note

    このシナリオでは、システム トピックを使用します。 Azure CLI を使用してカスタム トピックまたはドメインのサブスクリプションを作成する場合は、CLI リファレンスを参照してください。

  10. すべてが正しく構成されていれば、Event Grid トピックに Webhook サブスクリプションを正常に作成できます。

    Note

    この時点で、Event Grid はすべてのメッセージで Microsoft Entra ベアラー トークンを Webhook クライアントに渡すようになっています。 Webhook で認証トークンを検証する必要があります。

異なる Microsoft Entra テナントの Webhook にイベントを配信する

別々の Microsoft Entra テナントにあるイベント サブスクリプションと Webhook エンドポイント間の接続をセキュリティで保護するには、このセクションで示すように Microsoft Entra ID アプリケーションを使用する必要があります。 現時点では、Azure portal で Microsoft Entra ID ユーザーを使用してこの接続をセキュリティで保護することはできません。

Multitenant events with Microsoft Entra ID and Webhooks

図に基づいて、次の手順に従って両方のテナントを構成します。

テナント A

テナント A で次の手順を実行します。

  1. 任意の Microsoft Entra (マルチテナント) で動作するように構成された Event Grid サブスクリプション ライター用の Microsoft Entra アプリケーションを作成します。

  2. Microsoft Entra アプリケーションのシークレットを作成し、値を保存します (この値は後で必要になります)。

  3. Event Grid トピックの [アクセス制御 (IAM)] ページに移動します。 Event Grid サブスクリプション ライターの Microsoft Entra アプリケーションに、Event Grid の共同作成者ロールを割り当てます。 この手順では、Azure CLI を使用して、Microsoft Entra アプリケーションで Azure にサインインするときに、アプリケーションが Event Grid リソースにアクセスできるようにします。

テナント B

テナント B で次の手順を実行します。

  1. Microsoft Entra (シングル テナント) で動作するように構成された Webhook 用の Microsoft Entra アプリケーションを作成します。

  2. Azure Shell を開き、PowerShell 環境を選択します。

  3. テナント B に接続するために、 $webhookAadTenantId の値を変更します。

    • Variables:

      • $webhookAadTenantId: テナント B の Azure テナント ID
      $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
      Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
      
  4. 次のスクリプトを開き、 $webhookAppObjectId$eventSubscriptionWriterAppId の値を実際の識別子に置き換えて更新し、スクリプトの実行を続けます。

    • Variables:
      • $webhookAppObjectId: Webhook 用に作成された Microsoft Entra アプリケーション ID

      • $eventSubscriptionWriterAppId: Event Grid サブスクリプション ライターの Microsoft Entra アプリケーション ID

        Note

        $eventGridAppId の値を変更する必要はありません。 このスクリプトでは、$eventGridRoleNameAzureEventGridSecureWebhookSubscriber が設定されます。 このスクリプトを実行するには、Microsoft Entra アプリケーション管理者ロールのメンバーか、Microsoft Entra ID で Webhook アプリのサービス プリンシパルの所有者である必要があります。

    次のエラー メッセージが表示された場合は、サービス プリンシパルに昇格する必要があります。 セキュリティの脆弱性に対処するために、2021 年 3 月 30 日にイベント サブスクリプションの作成または更新の一環として追加のアクセス確認が導入されました。 サブスクライバー クライアントのサービス プリンシパルは、所有者であるか、配信先のアプリケーション サービス プリンシパルのロールが割り当てられている必要があります。

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    

テナント A

テナント A に戻って、次の手順を実行します。

  1. Azure Shell を開いたら、コマンドを実行して、Event Grid サブスクリプション ライター Microsoft Entra アプリケーションとしてサインインします。

    az login --service-principal -u [REPLACE_WITH_APP_ID] -p [REPLACE_WITH_SECRET_VALUE] --tenant [REPLACE_WITH_TENANT_ID]
    
  2. 次のコマンドを実行して、サブスクリプションを作成します。

    az eventgrid system-topic event-subscription create --name [REPLACE_WITH_SUBSCRIPTION_NAME] -g [REPLACE_WITH_RESOURCE_GROUP] --system-topic-name [REPLACE_WITH_SYSTEM_TOPIC] --endpoint [REPLACE_WITH_WEBHOOK_ENDPOINT] --event-delivery-schema [REPLACE_WITH_WEBHOOK_EVENT_SCHEMA] --azure-active-directory-tenant-id [REPLACE_WITH_TENANT_B_ID] --azure-active-directory-application-id-or-uri [REPLACE_WITH_APPLICATION_ID_FROM_SCRIPT] --endpoint-type webhook
    

    Note

    このシナリオでは、Event Grid システム トピック使用しています。 カスタム トピックや Event Grid ドメインのサブスクリプションを、Azure CLI を使用して作成する場合は、こちらを参照してください。

  3. すべてが正しく構成されていれば、Event Grid トピックに Webhook サブスクリプションを正常に作成できます。

    Note

    この時点で、Event Grid はすべてのメッセージで Microsoft Entra ベアラー トークンを Webhook クライアントに渡すようになっています。 Webhook で認証トークンを検証する必要があります。

次のステップ