管理型アイデンティティを使ってVMからAzure Event Hubsにアクセスする

この記事では、管理されたアイデンティティを使ってAzure仮想マシン(VM)上で動作するアプリケーションからAzure Event Hubsに接続する方法を示しています。 マネージドIDを使うと、アプリケーションはコードや設定に接続文字列やアクセスキーを保存せずにEvent Hubsに認証します。 Azureは認証情報を自動でプロビジョニングしローテーションします。

この記事では、次のタスクを完了します。

  • VM上でシステム割り当ての管理IDを有効にします。
  • 管理されたアイデンティティにイベントハブへのイベント送信権限を与えます。
  • 管理型IDを使用するサンプルアプリケーションをVM上で作成・実行します。

Event HubsでのマネージドID認証の仕組みについては、「Azure Event Hubsの管理型アイデンティティ認証」をご覧ください。

前提条件

VM上で管理IDを有効にする

VM上でシステム割り当ての管理IDを有効にしてください。 AzureはMicrosoft Entra IDでVMのライフサイクルに紐づいたアイデンティティを作成します。

  1. Azure portal にサインインする

  2. 仮想マシンに移動します。

  3. VMページで、左側メニューから Security>Identity を選択します。

  4. Identityページで、システム割り当てタブにいることを確認します。

  5. ステータス欄ではオン」を選択してください。

  6. コマンドバーで 「保存 」を選択し、その後「 はい 」を選択して確認してください。

    Azureがアイデンティティを作成すると、オブジェクト(プリンシパル)IDがページに表示されます。 このアイデンティティは次のセクションで使います。

ユーザー割り当てマネージドアイデンティティを有効にするには、「VM上のAzureリソースの管理IDを構成」をご覧ください。 ユーザー割り当てIDとは、複数のVMに割り当てられる独立したリソースのことです。

管理されたIDにイベントハブへのアクセスを付与します

マネージドIDにAzureの組み込みロールを割り当てて、イベントハブにイベントを送信できるようにします。 この例では、単一のイベントハブの範囲内でAzure Event Hubsのデータ送信者役割を割り当てています。 申請に必要な範囲を最も狭く与えてください。

  1. Azure portal で、イベント ハブに移動します。
  2. イベントハブページで、左メニューから アクセス制御(IAM) を選択してください。
  3. [追加]>[役割の割り当ての追加] を選択します。
  4. Roleタブで「Azure Event Hubs Data Sender」を選択し、次に「Next」を選択します。
  5. [ メンバー ] タブの [ アクセスの割り当て] で、[ マネージド ID] を選択します。
  6. + メンバー選択を選択し、前のセクションで有効にした 仮想マシン 管理IDを選択し、その後 選択を選択します。
  7. [確認と割り当て] を選択して、ロールの割り当てを完了します。

ロールおよびスコープの完全なリストについては、Azure Built-in Roles for Azure Event Hubsをご覧ください。 Azure ポータルでロールを割り当てるには、「Azure portal を使用して Azure ロールを割り当てる」をご覧ください。

Note

ロールの割り当てが反映されるまでに数分かかる場合があります。 もしアプリケーションがすぐに認証できない場合は、待ってから再度試してください。

サンプルアプリケーションを作成してVM上で実行します

イベントハブにイベントを送信する.NETコンソールアプリケーションを作成しましょう。 アプリケーションがVM上で動作すると、DefaultAzureCredential自動的に管理IDを検出するため、接続文字列や鍵は提供されません。

  1. VM に接続します。 WindowsのVMならリモート デスクトップを使いましょう。 LinuxのVMならSSHを使いましょう。

  2. VMのターミナルでプロジェクトを作成し、必要なパッケージを追加します:

    dotnet new console --name EventHubsManagedIdentitySample
    cd EventHubsManagedIdentitySample
    dotnet add package Azure.Messaging.EventHubs
    dotnet add package Azure.Identity
    
  3. Program.csの内容を次のコードに置き換えます。 <namespace>をEvent Hubsのネームスペース名に置き換え、<event-hub-name>をイベントハブ名に置き換えてください。

    using Azure.Identity;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Producer;
    
    // DefaultAzureCredential detects the managed identity available on the VM.
    var credential = new DefaultAzureCredential();
    
    var producerClient = new EventHubProducerClient(
        "<namespace>.servicebus.windows.net",
        "<event-hub-name>",
        credential);
    
    using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
    eventBatch.TryAdd(new EventData("First event from a managed identity"));
    eventBatch.TryAdd(new EventData("Second event from a managed identity"));
    
    await producerClient.SendAsync(eventBatch);
    await producerClient.DisposeAsync();
    
    Console.WriteLine("Events sent to the event hub.");
    
  4. VM上でアプリケーションを構築し実行します:

    dotnet run
    

    アプリケーションはVMの管理されたアイデンティティを使って認証し、イベントを送信します。 イベントが送信されると、コンソールは表示されます Events sent to the event hub.

  5. イベントが到着したか確認するには、Azureポータルのイベントハブ内のData Explorer、または名前空間の概要ページのメトリクスを使ってください。

Tip

ユーザー割り当ての管理IDを使用する場合や、VM上で複数のIDが存在する場合、クライアントIDを DefaultAzureCredential が正しいIDを選択するように設定してください。 詳細については、 DefaultAzureCredentialOptions.ManagedIdentityClientIdをご覧ください。