將事件傳遞至 Microsoft Entra 受保護端點

本文說明如何使用 Microsoft Entra ID 來保護事件訂用帳戶Webhook 端點之間的連線。 其中使用 Azure 入口網站進行示範,不過也可以使用 CLI、PowerShell 或 SDK 來啟用此功能。

重要

在 2021 年 3 月 30 日建立或更新事件訂閱時,引進了額外的存取檢查,以解決安全性弱點。 訂閱者用戶端的服務主體必須是擁有者,或在目的地應用程式服務主體上有被指派的角色。 依照下列新指示重新設定您的 Microsoft Entra 應用程式。如需 Microsoft Entra 應用程式和服務主體的概觀,請參閱 Microsoft 身分識別平台 (v2.0) 概觀

案例

本文詳細說明如何實作下列兩個案例:

將事件傳遞至相同 Microsoft Entra 租用戶中的 Webhook

下圖描述如何將事件方格事件傳遞至與事件訂用帳戶相同之租用戶中的 Webhook。

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

本節包含兩個子小節。 您可以詳閱或閱讀感興趣的案例。

使用 Microsoft Entra 使用者設定事件訂用帳戶

本節說明如何使用 Microsoft Entra 使用者來設定事件訂用帳戶。

  1. 針對設定為使用 Microsoft Entra (單一租用戶) 的 Webhook,建立 Microsoft Entra 應用程式。

  2. 在租用戶中開啟 [Azure Shell],然後選取 [PowerShell 環境]。

  3. 修改 $webhookAadTenantId 的值以連線到租用戶。

    • 變數:
      • $webhookAadTenantId:Azure 租用戶識別碼
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  4. 開啟下列腳本,並使用您的識別碼更新 $webhookAppObjectId$eventSubscriptionWriterUserPrincipalName 的值,然後繼續執行腳本。

    • 變數:
      • $webhookAppObjectId:為 Webhook 建立 Microsoft Entra 應用程式識別碼
      • $eventSubscriptionWriterUserPrincipalName:建立事件訂用帳戶之使用者的 Azure 使用者主體名稱

    注意

    您不需要修改 $eventGridAppId 的值。 在此指令碼中,AzureEventGridSecureWebhookSubscriber 已針對 $eventGridRoleName 設定。 請記住,您必須是 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. 將 [端點類型] 選為 [Web Hook]

    2. 指定端點 URI

      Select endpoint type webhook

    3. 在 [建立事件訂閱] 頁面頂端,選取 [其他功能] 索引標籤。

    4. 在 [其他功能] 索引標籤上,執行下列步驟:

      1. 選取 [使用 Microsoft Entra 驗證],然後設定租用戶識別碼和應用程式識別碼:

      2. 從指令碼的輸出複製 Microsoft Entra 租用戶識別碼,然後將其輸入 [Microsoft Entra 租用戶識別碼] 欄位中。

      3. 從指令碼的輸出複製 Microsoft Entra 應用程式識別碼,然後將其輸入 [Microsoft Entra 應用程式識別碼] 欄位中。 您可以使用 Microsoft Entra 應用程式識別碼 URI,而不使用應用程式識別碼。 如需應用程式識別碼 URI 的詳細資訊,請參閱這篇文章

        Secure Webhook action

使用 Microsoft Entra 應用程式設定事件訂用帳戶

本節說明如何使用 Microsoft Entra 應用程式來設定事件訂用帳戶。

  1. 針對設定為使用 Microsoft Entra (單一租用戶) 的事件方格訂用帳戶寫入器,建立 Microsoft Entra 應用程式。

  2. 為 Microsoft Entra 應用程式建立祕密,並儲存此值 (稍後您將需要此值)。

  3. 移至事件方格主題的 [存取控制 (IAM)] 頁面,並將 [事件方格參與者] 角色指派給事件方格訂用帳戶寫入器應用程式。 當您使用 Azure CLI 為 Microsoft Entra 應用程式登入 Azure 時,此步驟可讓您能夠存取事件方格資源。

  4. 針對設定為使用 Microsoft Entra (單一租用戶) 的 Webhook,建立 Microsoft Entra 應用程式。

  5. 在租用戶中開啟 [Azure Shell],然後選取 [PowerShell 環境]。

  6. 修改 $webhookAadTenantId 的值以連線到租用戶。

    • 變數:
      • $webhookAadTenantId:Azure 租用戶識別碼
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  7. 開啟下列腳本,並使用您的識別碼更新 $webhookAppObjectId$eventSubscriptionWriterAppId 的值,然後繼續執行腳本。

    • 變數:
      • $webhookAppObjectId:為 Webhook 建立 Microsoft Entra 應用程式識別碼
      • $eventSubscriptionWriterAppId:事件方格訂用帳戶寫入器應用程式的 Microsoft Entra 應用程式識別碼。

    注意

    您不需要修改 $eventGridAppId 的值。 在此指令碼中,AzureEventGridSecureWebhookSubscriber 會針對 $eventGridRoleName 設定。 請記住,您必須是 Microsoft Entra 應用程式系統管理員角色的成員,或是 Microsoft Entra ID 中的 Webhook 應用程式服務主體的擁有者,才能執行此指令碼。

  8. 執行命令,以事件方格訂用帳戶寫入器 Azure AD 應用程式的身分登入。

    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. 如果一切都已正確設定,您可以在事件方格主題中成功建立 Webhook 訂用帳戶。

    注意

    此時,事件方格會將 Microsoft Entra 持有人權杖傳遞給每個訊息中的 Webhook 用戶端。 您必須在 Webhook 中驗證授權權杖。

將事件傳遞至不同 Microsoft Entra 租用戶中的 Webhook

若要保護您的事件訂用帳戶與位於不同 Microsoft Entra 租用戶中的 Webhook 端點之間的連線,您必須使用 Microsoft Entra ID 應用程式,如本節所示。 目前,您無法在 Azure 入口網站中使用 Microsoft Entra ID 使用者來保護此連線。

Multitenant events with Microsoft Entra ID and Webhooks

根據上圖,依照後續步驟設定這兩個租用戶。

租用戶 A

在租用戶 A 中執行下列步驟:

  1. 針對設定為使用任何 Microsoft Entra (多租用戶) 的事件方格訂用帳戶寫入器,建立 Microsoft Entra 應用程式。

  2. 為 Microsoft Entra 應用程式建立祕密,並儲存此值 (稍後您將需要此值)。

  3. 瀏覽至事件方格主題的 [存取控制 (IAM)] 頁面。 將事件方格參與者角色指派給事件方格訂用帳戶寫入器的 Microsoft Entra 應用程式。 當您使用 Azure CLI 為 Microsoft Entra 應用程式登入 Azure 時,此步驟可讓應用程式能夠存取事件方格資源。

租用戶 B

在租用戶 B 中執行下列步驟:

  1. 針對設定為使用 Microsoft Entra (單一租用戶) 的 Webhook,建立 Microsoft Entra 應用程式。

  2. 在租用戶中開啟 [Azure Shell],然後選取 [PowerShell 環境]。

  3. 修改 $webhookAadTenantId 的值以連線到租用戶 B

    • Variables:

      • $webhookAadTenantId:租使用者 B的 Azure 租使用者識別碼
      $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
      Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
      
  4. 開啟下列腳本,並使用您的識別碼更新 $webhookAppObjectId$eventSubscriptionWriterAppId 的值,然後繼續執行腳本。

    • 變數:
      • $webhookAppObjectId:為 Webhook 建立 Microsoft Entra 應用程式識別碼

      • $eventSubscriptionWriterAppId:事件方格訂用帳戶寫入器的 Microsoft Entra 應用程式識別碼

        注意

        您不需要修改 $eventGridAppId 的值。 在此指令碼中,AzureEventGridSecureWebhookSubscriber 會針對 $eventGridRoleName 設定。 請記住,您必須是 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,然後執行命令,以事件方格訂用帳戶寫入器 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
    

    注意

    在此案例中,我們使用 [事件方格系統主題]。 如果您想要使用 Azure CLI 建立自訂主題或事件方格網域的訂用帳戶,請參閱這裡

  3. 如果一切都已正確設定,您可以在事件方格主題中成功建立 Webhook 訂用帳戶。

    注意

    此時,事件方格會將 Microsoft Entra 持有人權杖傳遞給每個訊息中的 Webhook 用戶端。 您必須在 Webhook 中驗證授權權杖。

下一步