다음을 통해 공유


Event Hubs 리소스에 액세스하려면 Microsoft Entra ID로 관리 ID를 인증합니다.

Azure Event Hubs는 Azure 리소스에 대한 관리 ID를 사용하는 Microsoft Entra 인증을 지원합니다. Azure 리소스에 대한 관리 ID는 Azure Virtual Machines(VM), 함수 앱, Virtual Machine Scale Sets 및 기타 서비스에서 실행되는 응용 프로그램의 Microsoft Entra 자격 증명을 사용하여 Event Hubs 리소스에 대한 액세스 권한을 부여할 수 있습니다. Microsoft Entra 인증과 함께 Azure 리소스에 대한 관리 ID를 사용하면 클라우드에서 실행되는 응용 프로그램에 자격 증명을 저장할 필요가 없습니다. 이 문서에서는 Azure VM에서 관리 ID를 사용하여 이벤트 허브에 대한 액세스 권한을 부여하는 방법을 설명합니다.

VM에서 관리 ID 사용

Azure 리소스에 관리 ID를 사용하여 VM에서 Event Hubs 리소스에 액세스하려면 먼저 VM에서 Azure 리소스에 대한 관리 ID를 사용하도록 설정해야 합니다. Azure 리소스에 대해 관리 ID를 사용하도록 설정하는 방법을 알아보려면 Azure VM에서 관리 ID 구성을 참조하세요.

Microsoft Entra ID에서 관리 ID에 권한 부여

애플리케이션의 관리 ID에서 Event Hubs 서비스의 요청에 권한을 부여하려면 먼저 해당 관리 ID에 대한 RBAC(역할 기반 액세스 제어) 설정을 구성합니다. Azure Event Hubs는 Event Hubs로 이벤트를 보내고 받기 위한 권한을 포함하는 Azure 역할을 정의합니다. Azure 역할이 관리 ID에 할당되면 관리 ID에 적절한 범위에서 Event Hubs 데이터에 대한 액세스 권한이 부여됩니다. Azure 역할을 할당하는 방법에 대한 자세한 내용은 Event Hubs 리소스에 대한 액세스를 위한 Microsoft Entra ID 인증을 참조하세요.

샘플 애플리케이션

이 섹션의 절차에서는 관리 ID로 실행되고 Event Hubs 리소스에 액세스하는 간단한 응용 프로그램을 사용합니다.

여기서는 Azure App Service에서 호스팅되는 샘플 웹 응용 프로그램을 사용합니다. 웹 응용 프로그램을 만드는 방법에 대한 단계별 지침은 Azure에서 ASP.NET Core 웹앱 만들기 를 참조하세요

응용 프로그램이 생성되면 다음 단계를 수행합니다.

  1. 설정으로 이동하고 ID를 선택합니다.

  2. 상태켜짐으로 선택합니다.

  3. 저장을 선택하여 설정을 저장합니다.

    ON으로 설정된 시스템 할당 ID의 상태를 보여 주는 ID 페이지의 스크린샷

  4. 확인 메시지에서 를 선택합니다.

    이 설정을 사용하도록 설정하면 새 서비스 ID가 Microsoft Entra ID에서 생성되고 App Service 호스트로 구성됩니다.

    이제 Event Hubs 리소스에서 필요한 범위의 역할에 이 서비스 ID를 할당합니다.

Azure Portal을 사용하여 Azure 역할을 할당하려면

원하는 범위(Event Hubs 네임스페이스, 리소스 그룹, 구독)에서 관리 ID에 Event Hubs 역할 중 하나를 할당합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

참고 항목

관리 ID를 지원하는 서비스 목록은 Azure 리소스에 대한 관리 ID를 지원하는 서비스를 참조하세요.

웹 애플리케이션 테스트

  1. Event Hubs 네임스페이스 및 이벤트 허브를 만듭니다.
  2. Azure에 웹앱 배포 GitHub의 샘플 웹 애플리케이션에 대한 링크는 다음 탭 섹션을 참조하세요.
  3. SendReceive.aspx가 웹앱에 대한 기본 문서로 설정되었는지 확인합니다.
  4. 웹앱의 ID를 사용하도록 설정합니다.
  5. 이 ID를 네임스페이스 수준이나 이벤트 허브 수준에서 Event Hubs 데이터 소유자 역할에 할당합니다.
  6. 웹 응용 프로그램을 실행하고, 네임스페이스 이름 및 이벤트 허브 이름과 메시지를 입력하고, 전송을 선택합니다. 이벤트를 받으려면 수신을 선택합니다.

GitHub 리포지토리의 Event Hubs 리소스에서 데이터를 보내고 받는 샘플 웹 응용 프로그램을 찾을 수 있습니다.

NuGet에서 최신 패키지를 설치하고, EventHubProducerClient 를 사용해 Event Hubs로 이벤트를 보내기 시작하며 EventHubConsumerClient로 이벤트를 수신합니다.

참고 항목

관리 ID를 사용하여 이벤트 허브에 이벤트를 게시하는 Java 샘플은 GitHub에서 Azure ID 샘플을 사용하여 이벤트 게시를 참조하세요.

protected async void btnSend_Click(object sender, EventArgs e)
{
    await using (EventHubProducerClient producerClient = new EventHubProducerClient(txtNamespace.Text, txtEventHub.Text, new DefaultAzureCredential()))
    {
        // create a batch
        using (EventDataBatch eventBatch = await producerClient.CreateBatchAsync())
        {

            // add events to the batch. only one in this case. 
            eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(txtData.Text)));

            // send the batch to the event hub
            await producerClient.SendAsync(eventBatch);
        }

        txtOutput.Text = $"{DateTime.Now} - SENT{Environment.NewLine}{txtOutput.Text}";
    }
}
protected async void btnReceive_Click(object sender, EventArgs e)
{
    await using (var consumerClient = new EventHubConsumerClient(EventHubConsumerClient.DefaultConsumerGroupName, $"{txtNamespace.Text}.servicebus.windows.net", txtEventHub.Text, new DefaultAzureCredential()))
    {
        int eventsRead = 0;
        try
        {
            using CancellationTokenSource cancellationSource = new CancellationTokenSource();
            cancellationSource.CancelAfter(TimeSpan.FromSeconds(5));

            await foreach (PartitionEvent partitionEvent in consumerClient.ReadEventsAsync(cancellationSource.Token))
            {
                txtOutput.Text = $"Event Read: { Encoding.UTF8.GetString(partitionEvent.Data.Body.ToArray()) }{ Environment.NewLine}" + txtOutput.Text;
                eventsRead++;
            }
        }
        catch (TaskCanceledException ex)
        {
            txtOutput.Text = $"Number of events read: {eventsRead}{ Environment.NewLine}" + txtOutput.Text;
        }
    }
}

Kafka용 Event Hubs

Apache Kafka 응용 프로그램을 사용하여 관리 ID OAuth를 사용하여 Azure Event Hubs에서 메시지를 보내고 받을 수 있습니다. GitHub에서 Kafka용 Event Hubs - 관리 ID OAuth를 사용하여 메시지 보내기 및 받기샘플을 참조하세요.

샘플