次の方法で共有


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

この記事では、Microsoft Entra ID 認証を使用して、Azure Event Grid (イベント サブスクリプション) から Webhook エンドポイントへのイベント配信をセキュリティで保護する方法について説明します。 Microsoft Entra アプリケーションを構成し、適切なロールを割り当てて Event Grid と Webhook の間で認証された接続を確立する方法について説明します。 この記事では、デモンストレーションのために Azure portal を使用します。 ただし、CLI、PowerShell、または SDK を使用してこの機能を有効にすることもできます。

重要

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

シナリオ

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

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

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

同じテナント内にある Webhook への、イベントの安全な配信を示す画像。

このセクションには、2 つのサブセクションがあります。 両方のシナリオまたは関心のあるシナリオを読み進めます。

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

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

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

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

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

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

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

    注意

    $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 を指定します。

      Azure portal でエンドポイントの種類 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 の詳細については、こちらの記事を参照してください。

        Azure portal でのセキュリティで保護された Webhook アクションの構成のスクリーンショット。

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 の値を変更します。

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

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

    注意

    $eventGridAppId の値を変更する必要はありません。 このスクリプトでは、AzureEventGridSecureWebhookSubscriber$eventGridRoleName に設定されています。 このスクリプトを実行するには、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
    

    注意

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

  10. すべてを正しく構成した場合は、Event Grid トピックで Webhook サブスクリプションを作成できます。

    注意

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

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

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

Microsoft Entra ID と Webhook の図を含むマルチテナント イベントのスクリーンショット。

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

テナント A

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

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

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

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

テナント B

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

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

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

  3. テナント B に接続するように$webhookAadTenantId値を変更します。

    • 変数:

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

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

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

        注意

        $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 Application としてサインインします。

    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
    

    注意

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

  3. すべてを正しく構成した場合は、Event Grid トピックで Webhook サブスクリプションを作成できます。

    注意

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