Microsoft Entra로 보호된 엔드포인트에 이벤트 배달

이 문서에서는 Microsoft Entra ID 인증을 사용하여 Azure Event Grid(이벤트 구독)에서 웹후크 엔드포인트로 이벤트 배달을 보호하는 방법을 설명합니다. Microsoft Entra 애플리케이션을 구성하고 적절한 역할을 할당하여 Event Grid와 웹후크 간에 인증된 연결을 설정하는 방법을 알아봅니다. 이 문서에서는 데모를 위해 Azure Portal을 사용합니다. 그러나 CLI, PowerShell 또는 SDK를 사용하여 기능을 사용하도록 설정할 수도 있습니다.

중요

보안 취약성을 해결하기 위해 Microsoft는 2021년 3월 30일에 이벤트 구독을 만들거나 업데이트하는 과정의 일환으로 추가 액세스 검사를 도입했습니다. 구독자 클라이언트의 서비스 주체는 소유자이거나 대상 애플리케이션 서비스 주체에 할당된 역할이 있어야 합니다. 이 문서의 새 지침에 따라 Microsoft Entra 애플리케이션을 다시 구성합니다. Microsoft Entra 애플리케이션 및 서비스 주체에 대한 개요는 Microsoft ID 플랫폼(v2.0) 개요를 참조하세요.

시나리오

이 문서에서는 다음 두 가지 시나리오를 구현하는 방법을 자세히 설명합니다.

동일한 Microsoft Entra 테넌트에서 웹후크에 이벤트 전달

다음 다이어그램에서는 Event Grid가 이벤트 구독과 동일한 테넌트에 있는 웹후크에 이벤트를 제공하는 방법을 보여 줍니다.

동일한 테넌트에 있는 웹후크로 이벤트를 안전하게 제공하는 것을 나타내는 이미지입니다.

이 섹션에는 두 개의 하위 섹션이 있습니다. 두 시나리오 또는 관심 있는 시나리오를 모두 읽어 보십시오.

Microsoft Entra 사용자를 사용하여 이벤트 구독 구성

이 섹션에서는 Microsoft Entra 사용자를 사용하여 이벤트 구독을 구성하는 방법을 보여줍니다.

  1. Microsoft Entra(단일 테넌트)와 함께 작동하도록 구성된 웹후크용 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: 웹후크용으로 만든 Microsoft Entra 애플리케이션 ID
      • $eventSubscriptionWriterUserPrincipalName: 이벤트 구독을 만든 사용자의 Azure 사용자 계정 이름

    참고

    $eventGridAppId 값을 수정할 필요가 없습니다. 이 스크립트에서 AzureEventGridSecureWebhookSubscriber$eventGridRoleName에 대해 설정됩니다. 이 스크립트를 실행하려면 Microsoft Entra 애플리케이션 관리자 역할의 멤버이거나 Microsoft Entra에서 웹후크 앱의 서비스 주체 소유자여야 합니다.

    다음 오류 메시지가 표시되면 서비스 주체로 승격해야 합니다. 보안 취약성을 해결하기 위해 2021년 3월 30일에 이벤트 구독 만들기 또는 업데이트의 일환으로 추가 액세스 검사가 도입되었습니다. 구독자 클라이언트의 서비스 주체는 소유자이거나 대상 애플리케이션 서비스 주체에 할당된 역할이 있어야 합니다.

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    
  5. 포털에서 이벤트 구독을 만들 때 다음 단계를 수행합니다.

    1. 엔드포인트 유형을 웹후크로 선택합니다.

    2. 엔드포인트 URI를 지정합니다.

      Azure Portal에서 엔드포인트 유형 웹후크를 선택하는 스크린샷.

    3. 이벤트 구독 만들기 페이지의 위쪽에서 추가 기능 탭을 선택합니다.

    4. 추가 기능 탭에서 다음 단계를 수행합니다.

      1. Microsoft Entra 인증 사용을 선택하고 테넌트 ID 및 애플리케이션 ID를 구성합니다.

      2. 스크립트의 출력에서 Microsoft Entra 테넌트 ID를 복사하고 Microsoft Entra 테넌트 ID 필드에 입력합니다.

      3. 스크립트의 출력에서 Microsoft Entra 애플리케이션 ID를 복사하고 Microsoft Entra 애플리케이션 ID 필드에 입력합니다. 애플리케이션 ID를 사용하는 대신 Microsoft Entra 애플리케이션 ID URI를 사용할 수 있습니다. 애플리케이션 ID URI에 대한 자세한 내용은 이 문서를 참조하세요.

        Azure Portal의 보안 웹후크 작업 구성 스크린샷

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(단일 테넌트)와 함께 작동하도록 구성된 웹후크용 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: 웹후크용으로 만든 Microsoft Entra 애플리케이션 ID
      • $eventSubscriptionWriterAppId: Event Grid 구독 작성기 앱에 대한 Microsoft Entra 애플리케이션 ID입니다.

    참고

    $eventGridAppId의 값을 수정할 필요가 없습니다. 이 스크립트에서 AzureEventGridSecureWebhookSubscriber$eventGridRoleName에 대해 설정됩니다. 이 스크립트를 실행하려면 Microsoft Entra 애플리케이션 관리자 역할의 멤버이거나 Microsoft Entra에서 웹후크 앱의 서비스 주체 소유자여야 합니다.

  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 토픽에서 웹후크 구독을 만들 수 있습니다.

    참고

    이 시점에서 Event Grid는 이제 모든 메시지의 웹후크 클라이언트에 Microsoft Entra 전달자 토큰을 배달합니다. 웹후크에서 권한 부여 토큰의 유효성을 검사해야 합니다.

다른 Microsoft Entra 테넌트에서 웹후크에 이벤트 전달

이벤트 구독과 다른 Microsoft Entra 테넌트에 있는 웹후크 엔드포인트 간의 연결을 보호하려면 이 섹션에 표시된 대로 Microsoft Entra ID 애플리케이션 을 사용합니다. 현재 Azure Portal에서 Microsoft Entra ID 사용자를 사용하여 이 연결을 보호할 수 없습니다.

Microsoft Entra ID 및 웹후크 다이어그램이 있는 다중 테넌트 이벤트의 스크린샷

다이어그램을 기반으로 다음 단계에 따라 두 테넌트를 모두 구성합니다.

테넌트 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(단일 테넌트)에서 작동하도록 구성된 웹후크에 대한 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: 웹후크용으로 만든 Microsoft Entra 애플리케이션 ID

      • $eventSubscriptionWriterAppId: Event Grid 구독 작성기에 대한 Microsoft Entra 애플리케이션 ID입니다

        참고

        $eventGridAppId의 값을 수정할 필요가 없습니다. 이 스크립트에서 AzureEventGridSecureWebhookSubscriber$eventGridRoleName에 대해 설정됩니다. 이 스크립트를 실행하려면 Microsoft Entra 애플리케이션 관리자 역할의 멤버이거나 Microsoft Entra에서 웹후크 앱의 서비스 주체 소유자여야 합니다.

    다음 오류 메시지가 표시되면 서비스 주체로 승격해야 합니다. 보안 취약성을 해결하기 위해 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 토픽에서 웹후크 구독을 만들 수 있습니다.

    참고

    이 시점에서 Event Grid는 모든 메시지의 웹후크 클라이언트에 Microsoft Entra Bearer 토큰을 전달합니다. 웹후크에서 권한 부여 토큰의 유효성을 검사해야 합니다.