マネージドアイデンティティとは、Azureがあなたのために管理するMicrosoft Entra ID内のアイデンティティのことで、アプリケーションは認証情報を保存せずにMicrosoft Entra認証をサポートするサービスに認証できます。 Azure Event Hubsは、Azureリソースの管理型IDを用いたMicrosoft Entra認証をサポートしており、これによりAzure上で動作するアプリケーションがコードや設定に接続文字列やアクセスキーを埋め込むことなくEvent Hubsに接続できます。
管理されたアイデンティティとMicrosoft Entra認証を組み合わせて使うと、Azure 仮想マシン、Azure Functions、Azure App Service、Virtual Machine Scale Setsなどのサービスで動作するアプリケーションが使われますAzureが自動的にプロビジョニング・ローテーションする認証情報でEvent Hubsのデータにアクセスできます。 このアプローチにより、鍵の漏洩リスクが排除され、認証情報管理の運用オーバーヘッドも削減されます。
具体的な手順については、「マネージド ID を使用して VM から Azure Event Hubs にアクセスする」をご覧ください。
マネージド ID 認証のしくみ
管理型アイデンティティを通じたイベントハブリソースへのアクセスは、2段階のプロセスです。
- 認証:管理されたアイデンティティはMicrosoft Entra IDからOAuth 2.0トークンを要求します。 Azureはコードが実行される計算環境に基づいて自動的にアイデンティティを提供しているため、アプリケーション内で秘密は保存または渡されません。
- 認証:トークンはEvent Hubsサービスに提示され、IDに割り当てられたAzureロールベースのアクセス制御(RBAC)ロールに基づいてアクセス権が付与されます。
認証および認可フローの詳細な説明については、「Microsoft Entra ID を用いたAzure Event Hubsリソースへのアクセスを許可する」をご覧ください。
マネージド ID の種類
Event Hubsは、両方の管理型アイデンティティに対応しています:
- システム割り当て管理型アイデンティティ:仮想マシンやApp ServiceアプリなどのAzureリソース上で直接有効化されます。 そのライフサイクルはそのリソースに紐づいており、トークンをリクエストするために使用できるのはそのリソースだけです。
- ユーザー割り当て管理ID:スタンドアロンのAzureリソースとして作成され、1つ以上のAzureリソースに割り当てられるため、複数のワークロードが同じアイデンティティを共有できるようにします。
この2つのタイプについて、またそれぞれを選ぶタイミングについて詳しく知りたい方は 、「マネージドIDタイプ」をご覧ください。 マネージドIDをサポートするサービスの一覧については、「AzureリソースのマネージドIDをサポートするサービス」をご覧ください。
Event Hubs の Azure 組み込みロール
管理されたアイデンティティを有効にした後、Azureの組み込みロールを割り当て、Event Hubsデータに対する権限を定義します。 Azureは、Microsoft Entra IDでEvent Hubsのデータへのアクセスを認証するための以下の組み込みロールを提供しています:
| Role | Description |
|---|---|
| Azure Event Hubs データ所有者 | イベントハブのリソースへの完全アクセス権を付与します。 |
| Azure Event Hubs データ送信者 | イベントをEvent Hubsのリソースに送信する許可を与えます。 |
| Azure Event Hubs データ受信機 | Event Hubsリソースからイベントを受け取る許可を与えます。 |
消費者グループ、イベントハブ、名前空間、リソースグループ、サブスクリプションのレベルで役割を割り当てることができます。 申請のニーズに合った最も狭い範囲を認めてください。 スコープとロールの詳細な一覧については、Azure Event Hubs の Azure 組み込みロールをご覧ください。 Azure portal で役割を割り当てるには、「Azure portal を使用して Azure ロールを割り当てる」をご覧ください。
トークンの有効期限動作
Event Hubs RBACロールからマネージドIDを削除しても、実行中のアプリケーションに対して変更は即座に有効ではありません。 ソースサービスやアプリが再起動しなければ、トークンが切れるまでイベントハブへのイベントの送受信を続けられます。 デフォルトのトークン有効期間は24時間です。 この動作は仕様によるものです。
アイデンティティをロールから削除した後、すぐにアクセスを取り消すには、元のアプリやサービスを再起動して既存のトークンが期限切れになるようにしてください。
クライアントSDKサポート
Azure SDKクライアントライブラリはDefaultAzureCredentialを通じてマネージドIDトークンを取得し、ホスト環境で利用可能なマネージドIDを自動的に検出します。 接続文字列やキーを提供せずに、イベントを送信するためにEventHubProducerClientに、イベントを受け取るためにEventHubConsumerClientに認証情報を渡します。
var credential = new DefaultAzureCredential();
// Send events with a managed identity.
var producerClient = new EventHubProducerClient(
"<namespace>.servicebus.windows.net",
"<event-hub-name>",
credential);
// Receive events with a managed identity.
var consumerClient = new EventHubConsumerClient(
EventHubConsumerClient.DefaultConsumerGroupName,
"<namespace>.servicebus.windows.net",
"<event-hub-name>",
credential);
最新のAzureをインストールしてください。これらのクライアントを使うためにNuGetのMessaging.EventHubsパッケージを使います。 実行可能なサンプルについては、以下を参照してください:
- 現在のAzure.Messaging.EventHubs パッケージを使用して、管理対象 ID でイベントを発行する (.NET)
- 管理されたアイデンティティサンプル(.NET、レガシー)は、レガシーのMicrosoft.Azureを使用しています。EventHubsパッケージ。
- イベントをAzure identity(Java)で公開します。
Event Hubs for Apache Kafka
Apache Kafkaアプリケーションは、OAuthを用いたマネージデンティティIDを使ってAzure Event Hubsにイベントを送信し、イベントを受け取ることができます。 Javaのサンプルについては、KafkaのEvent Hubs: managed identity OAuthを使ったメッセージの送受信を参照してください。