Доставка событий в защищенные конечные точки Microsoft Entra

В этой статье описывается, как использовать идентификатор Microsoft Entra для защиты подключения между подпиской на событие и конечной точкой веб-перехватчика. В нем используется портал Azure для демонстрации, однако эта функция также может быть включена с помощью интерфейса командной строки, PowerShell или пакетов SDK.

Важно!

30 марта 2021 года была введена дополнительная проверка доступа в процессы создания и обновления подписки на события для устранения уязвимости в системе безопасности. Субъект-служба клиента подписчика должна быть либо владельцем, либо иметь роль, назначенную субъекту-службе конечного приложения. Перенастройьте приложение Microsoft Entra, следуя новым инструкциям ниже. Общие сведения о приложениях и субъектах-службах Microsoft Entra см. в платформа удостоверений Майкрософт (версия 2.0).

Сценарии

В этой статье объясняется, как подробно реализовать следующие два сценария:

Доставка событий в веб-перехватчик в том же клиенте Microsoft Entra

На следующей схеме показано, как события сетки событий передаются в веб-перехватчик в том же клиенте, что и подписка на события.

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

В этом разделе есть два подраздела. Ознакомьтесь как с сценариями, так и с интересующими вас сценариями.

Настройка подписки на события с помощью пользователя Microsoft Entra

В этом разделе показано, как настроить подписку на события с помощью пользователя Microsoft Entra.

  1. Создайте приложение Microsoft Entra для веб-перехватчика, настроенного для работы с 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: идентификатор приложения Microsoft Entra, созданный для веб-перехватчика
      • $eventSubscriptionWriterUserPrincipalName. Имя участника-пользователя Azure, создающего подписку на события

    Примечание.

    Не нужно изменять значение $eventGridAppId. В этом сценарии для $eventGridRoleName устанавливается AzureEventGridSecureWebhookSubscriber. Помните, что для выполнения этого скрипта необходимо быть членом роли приложения Microsoft Entra Application Администратор istrator или быть владельцем субъекта-службы приложения веб-перехватчика в идентификаторе Microsoft Entra.

    Если отображается приведенное сообщение об ошибке, необходимо повысить уровень привилегий до субъекта-службы. В рамках создания или обновления подписки на события 30 марта 2021 г. была представлена дополнительная проверка для решения уязвимости безопасности. Субъект-служба клиента подписчика должна быть либо владельцем, либо иметь роль, назначенную субъекту-службе конечного приложения.

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    
  5. При создании подписки на событие на портале выполните следующие действия:

    1. выберите тип конечной точки в качестве веб-перехватчика.

    2. Укажите универсальный код ресурса (URI) конечной точки.

      Select endpoint type webhook

    3. Перейдите на вкладку Дополнительные функции в верхней части страницы Создание подписок на события.

    4. На вкладке Дополнительные функции выполните следующие действия:

      1. Выберите "Использовать проверку подлинности Microsoft Entra" и настройте идентификатор клиента и идентификатор приложения:

      2. Скопируйте идентификатор клиента Microsoft Entra из выходных данных скрипта и введите его в поле идентификатора клиента Microsoft Entra.

      3. Скопируйте идентификатор приложения Microsoft Entra из выходных данных скрипта и введите его в поле идентификатора приложения Microsoft Entra. Можно использовать URI идентификатора приложения Microsoft Entra вместо использования идентификатора приложения. Дополнительные сведения об URI идентификатора приложения см. в этой статье.

        Secure Webhook action

Настройка подписки на события с помощью приложения Microsoft Entra

В этом разделе показано, как настроить подписку на события с помощью приложения Microsoft Entra.

  1. Создайте приложение Microsoft Entra для записи подписок сетки событий, настроенного для работы с Microsoft Entra (один клиент).

  2. Создайте секрет для приложения Microsoft Entra и сохраните значение (это значение потребуется позже).

  3. Перейдите на страницу управления доступом (IAM) раздела "Сетка событий" и назначьте роль участника сетки событий приложению записи подписок сетки событий. Этот шаг позволяет получить доступ к ресурсу Сетки событий при входе в Azure с помощью приложения Microsoft Entra с помощью Azure CLI.

  4. Создайте приложение Microsoft Entra для веб-перехватчика, настроенного для работы с 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: идентификатор приложения Microsoft Entra, созданный для веб-перехватчика
      • $eventSubscriptionWriterAppId. Идентификатор приложения Microsoft Entra для приложения записи подписок сетки событий.

    Примечание.

    Не нужно изменять значение $eventGridAppId. В этом скрипте azureEventGridSecureWebhookSubscriber , как задано для $eventGridRoleNameпараметра. Помните, что для выполнения этого скрипта необходимо быть членом роли приложения Microsoft Entra Application Администратор istrator или быть владельцем субъекта-службы приложения веб-перехватчика в идентификаторе Microsoft Entra.

  8. Войдите в систему в качестве модуля записи подписок Сетки событий Microsoft Entra Application, выполнив команду.

    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. Если все было правильно настроено, вы можете успешно создать подписку веб-перехватчика в разделе "Сетка событий".

    Примечание.

    На этом этапе Сетка событий передает маркер носителя Microsoft Entra клиенту веб-перехватчика в каждом сообщении. Необходимо проверить маркер авторизации в веб-перехватчике.

Доставка событий в веб-перехватчик в другом клиенте Microsoft Entra

Чтобы защитить подключение между подпиской на события и конечной точкой веб-перехватчика, которые находятся в разных клиентах Microsoft Entra, необходимо использовать приложение идентификатора Microsoft Entra, как показано в этом разделе. В настоящее время невозможно защитить это подключение с помощью пользователя Идентификатора Microsoft Entra в портал Azure.

Multitenant events with Microsoft Entra ID and Webhooks

На схеме выполните следующие действия, чтобы настроить оба клиента.

Клиент A

Выполните следующие действия в арендаторе А.

  1. Создайте приложение Microsoft Entra для записи подписок сетки событий, настроенного для работы с любым элементом Microsoft Entra (мультитенант).

  2. Создайте секрет для приложения Microsoft Entra и сохраните значение (это значение потребуется позже).

  3. Перейдите на страницу управления доступом (IAM) для раздела "Сетка событий". Назначьте роль участника сетки событий приложению Microsoft Entra записи подписки сетки событий. Этот шаг позволяет приложению получить доступ к ресурсу Сетки событий при входе в Azure с помощью приложения Microsoft Entra с помощью Azure CLI.

Клиент B

Выполните следующие действия в арендаторе Б.

  1. Создайте приложение Microsoft Entra для веб-перехватчика, настроенного для работы с Microsoft Entra (один клиент).

  2. Откройте Azure Shell и выберите среду PowerShell.

  3. Измените значение $webhookAadTenantId, чтобы подключиться к арендатору Б.

    • Variables:

      • $webhookAadTenantId: идентификатор арендатора Azure для арендатора Б.
      $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
      Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
      
  4. Откройте этот скрипт и измените значения $webhookAppObjectId и $eventSubscriptionWriterAppId, указав свои идентификаторы, после чего продолжите выполнение скрипта.

    • Переменные:
      • $webhookAppObjectId: идентификатор приложения Microsoft Entra, созданный для веб-перехватчика

      • $eventSubscriptionWriterAppId: идентификатор приложения Microsoft Entra для записи подписок сетки событий

        Примечание.

        Не нужно изменять значение $eventGridAppId. В этом сценарии для azureEventGridSecureWebhookSubscriber задано значение $eventGridRoleName. Помните, что для выполнения этого скрипта необходимо быть членом роли приложения Microsoft Entra Application Администратор istrator или быть владельцем субъекта-службы приложения веб-перехватчика в идентификаторе Microsoft Entra.

    Если отображается приведенное сообщение об ошибке, необходимо повысить уровень привилегий до субъекта-службы. В рамках создания или обновления подписки на события 30 марта 2021 г. была представлена дополнительная проверка для решения уязвимости безопасности. Субъект-служба клиента подписчика должна быть либо владельцем, либо иметь роль, назначенную субъекту-службе конечного приложения.

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

Клиент A

Выполните приведенные ниже действия в арендаторе А.

  1. Откройте Azure Shell и войдите в систему в качестве модуля записи подписок Службы "Сетка событий" 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
    

    Примечание.

    В этом сценарии мы используем системный раздел Сетки событий. Если вы хотите создать подписку для пользовательских разделов или доменов Сетки событий с помощью Azure CLI, перейдите сюда.

  3. Если все было правильно настроено, вы можете успешно создать подписку веб-перехватчика в разделе "Сетка событий".

    Примечание.

    На этом этапе Сетка событий передает маркер носителя Microsoft Entra в клиент веб-перехватчика в каждом сообщении. Теперь необходимо проверять маркер авторизации в веб-перехватчике.

Следующие шаги