この記事では、管理されたアイデンティティを使ってAzure仮想マシン(VM)上で動作するアプリケーションからAzure Event Hubsに接続する方法を示しています。 マネージドIDを使うと、アプリケーションはコードや設定に接続文字列やアクセスキーを保存せずにEvent Hubsに認証します。 Azureは認証情報を自動でプロビジョニングしローテーションします。
この記事では、次のタスクを完了します。
- VM上でシステム割り当ての管理IDを有効にします。
- 管理されたアイデンティティにイベントハブへのイベント送信権限を与えます。
- 管理型IDを使用するサンプルアプリケーションをVM上で作成・実行します。
Event HubsでのマネージドID認証の仕組みについては、「Azure Event Hubsの管理型アイデンティティ認証」をご覧ください。
前提条件
- アクティブなサブスクリプションを持つ Azure アカウント。 アカウントがない場合は、無料アカウントを作成してください。
- Event Hubs のネームスペースとイベント ハブ 1 つ。 作成には「Quickstart: Create an Event Hub using Azure portal」をご覧ください。
- Azure 仮想マシン。 作成するには、クイックスタート: Azure portal で Windows VM を作成するまたはクイックスタート: Azure portal で Linux VM を作成するを参照してください。
- ターゲットスコープでAzureロールを割り当てる権限。 所有者またはユーザーアクセス管理者の役割にはこの権限が含まれます。
- サンプルアプリケーションをビルド・実行するためにVMに.NET SDKをインストールしました。
VM上で管理IDを有効にする
VM上でシステム割り当ての管理IDを有効にしてください。 AzureはMicrosoft Entra IDでVMのライフサイクルに紐づいたアイデンティティを作成します。
Azure portal にサインインする
仮想マシンに移動します。
VMページで、左側メニューから Security>Identity を選択します。
Identityページで、システム割り当てタブにいることを確認します。
ステータス欄では「オン」を選択してください。
コマンドバーで 「保存 」を選択し、その後「 はい 」を選択して確認してください。
Azureがアイデンティティを作成すると、オブジェクト(プリンシパル)IDがページに表示されます。 このアイデンティティは次のセクションで使います。
ユーザー割り当てマネージドアイデンティティを有効にするには、「VM上のAzureリソースの管理IDを構成」をご覧ください。 ユーザー割り当てIDとは、複数のVMに割り当てられる独立したリソースのことです。
管理されたIDにイベントハブへのアクセスを付与します
マネージドIDにAzureの組み込みロールを割り当てて、イベントハブにイベントを送信できるようにします。 この例では、単一のイベントハブの範囲内でAzure Event Hubsのデータ送信者役割を割り当てています。 申請に必要な範囲を最も狭く与えてください。
- Azure portal で、イベント ハブに移動します。
- イベントハブページで、左メニューから アクセス制御(IAM) を選択してください。
- [追加]>[役割の割り当ての追加] を選択します。
- Roleタブで「Azure Event Hubs Data Sender」を選択し、次に「Next」を選択します。
- [ メンバー ] タブの [ アクセスの割り当て] で、[ マネージド ID] を選択します。
- + メンバー選択を選択し、前のセクションで有効にした 仮想マシン 管理IDを選択し、その後 選択を選択します。
- [確認と割り当て] を選択して、ロールの割り当てを完了します。
ロールおよびスコープの完全なリストについては、Azure Built-in Roles for Azure Event Hubsをご覧ください。 Azure ポータルでロールを割り当てるには、「Azure portal を使用して Azure ロールを割り当てる」をご覧ください。
Note
ロールの割り当てが反映されるまでに数分かかる場合があります。 もしアプリケーションがすぐに認証できない場合は、待ってから再度試してください。
サンプルアプリケーションを作成してVM上で実行します
イベントハブにイベントを送信する.NETコンソールアプリケーションを作成しましょう。 アプリケーションがVM上で動作すると、DefaultAzureCredential自動的に管理IDを検出するため、接続文字列や鍵は提供されません。
VM に接続します。 WindowsのVMならリモート デスクトップを使いましょう。 LinuxのVMならSSHを使いましょう。
VMのターミナルでプロジェクトを作成し、必要なパッケージを追加します:
dotnet new console --name EventHubsManagedIdentitySample cd EventHubsManagedIdentitySample dotnet add package Azure.Messaging.EventHubs dotnet add package Azure.IdentityProgram.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.");VM上でアプリケーションを構築し実行します:
dotnet runアプリケーションはVMの管理されたアイデンティティを使って認証し、イベントを送信します。 イベントが送信されると、コンソールは表示されます
Events sent to the event hub.イベントが到着したか確認するには、Azureポータルのイベントハブ内のData Explorer、または名前空間の概要ページのメトリクスを使ってください。
Tip
ユーザー割り当ての管理IDを使用する場合や、VM上で複数のIDが存在する場合、クライアントIDを DefaultAzureCredential が正しいIDを選択するように設定してください。 詳細については、 DefaultAzureCredentialOptions.ManagedIdentityClientIdをご覧ください。