Event Hubs リソースにアクセスするために Microsoft Entra ID でアプリケーションを認証する

Microsoft Azure では、Microsoft Entra ID をベースとする、リソースとアプリケーションの統合されたアクセス制御管理が提供されます。 Azure Event Hubs で Microsoft Entra ID を使用する主な利点は、資格情報をコード内に格納する必要がなくなることです。 代わりに、Microsoft ID プラットフォームから OAuth 2.0 アクセス トークンを要求することができます。 トークンを要求するリソース名は https://eventhubs.azure.net/ であり、すべてのクラウド/テナントで同じです (Kafka クライアントの場合、トークンを要求するリソースは https://<namespace>.servicebus.windows.net です)。 Microsoft Entra は、アプリケーションを実行しているセキュリティ プリンシパル (ユーザー、グループ、サービス プリンシパル、またはマネージド ID) の認証を行います。 認証が成功すると、Microsoft Entra ID からアプリケーションにアクセス トークンが返されます。アプリケーションでは、このアクセス トークンを使用して Azure Event Hubs リソースへの要求を承認できます。

ロールが Microsoft Entra のセキュリティ プリンシパルに割り当てられると、Azure はそれらのリソースへのアクセスをそのセキュリティ プリンシパルに許可します。 アクセスでは、サブスクリプションのレベル、リソース グループ、Event Hubs 名前空間、またはそれ以下の任意のリソースにスコープを設定することができます。 Microsoft Entra セキュリティを使用すると、ユーザー、グループ、アプリケーション サービス プリンシパル、または Azure リソースのマネージド ID に、ロールを割り当てることができます。

Note

ロールの定義はアクセス許可のコレクションです。 これらのアクセス許可をロールの割り当てを通じてどのように適用するかは、Azure ロールベースのアクセス制御 (Azure RBAC) によって制御されます。 ロールの割り当ては、セキュリティ プリンシパル、ロールの定義、スコープの 3 つの要素で構成されています。 詳細については、各種ロールについての記事をご覧ください。

Azure Event Hubs の組み込みのロール

Azure には、Event Hubs データへの Microsoft Entra ID と OAuth を使ったアクセスを承認するために、次の Azure の組み込みロールが用意されています。

  • Azure Event Hubs のデータ所有者: Event Hubs リソースへの完全なアクセス権を付与するには、このロールを使用します。
  • Azure Event Hubs データ送信者: このロールに割り当てられたセキュリティ プリンシパルは、イベントを特定のイベント ハブに、または 1 つの名前空間内のすべてのイベント ハブに送信できます。
  • Azure Event Hubs データ受信者: このロールに割り当てられたセキュリティ プリンシパルは、イベントを特定のイベント ハブから、または 1 つの名前空間内のすべてのイベント ハブから受信できます。

スキーマ レジストリの組み込みロールについては、スキーマ レジストリのロールに関する記事を参照してください。

重要

Microsoft のプレビュー リリースで、所有者または共同作成者ロールへの Event Hubs データ アクセス特権の追加がサポートされました。 しかし、所有者ロールと共同作成者ロールのデータ アクセス特権は受け入れられなくなりました。 所有者ロールまたは共同作成者ロールを使用している場合は、Azure Event Hubs データ所有者ロールの使用に切り替えてください。

アプリケーションからの認証

Event Hubs で Microsoft Entra ID を使用する主な利点は、資格情報をコード内に格納する必要がなくなることです。 代わりに、Microsoft ID プラットフォームから OAuth 2.0 アクセス トークンを要求することができます。 Microsoft Entra は、アプリケーションを実行しているセキュリティ プリンシパル (ユーザー、グループ、またはサービス プリンシパル) の認証を行います。 認証が成功すると、Microsoft Entra ID からアプリケーションにアクセス トークンが返されます。アプリケーションでは、このアクセス トークンを使用して Azure Event Hubs への要求を承認できます。

以降のセクションでは、Microsoft ID プラットフォーム 2.0 による認証を行うためにネイティブ アプリケーションまたは Web アプリケーションを構成する方法を説明します。 Microsoft ID プラットフォーム 2.0 の詳細については、「Microsoft ID プラットフォーム (v2.0) の概要」を参照してください。

OAuth 2.0 コード付与フローの概要については、「OAuth 2.0 コード付与フローを使用して Microsoft Entra Web アプリケーションへアクセスを承認する」を参照してください。

Microsoft Entra テナントにアプリケーションを登録する

Microsoft Entra ID を使用して Event Hubs リソースを承認する最初の手順は、Azure portal からクライアント アプリケーションを Microsoft Entra テナントに登録することです。 「クイック スタート:Microsoft ID プラットフォームにアプリケーションを登録する」の手順に従って、Event Hubs リソースにアクセスしようとしているアプリケーションを表すアプリケーションを Microsoft Entra ID に登録します。

クライアント アプリケーションを登録するときに、そのアプリケーションに関する情報を入力します。 これで Microsoft Entra ID から、アプリケーションを Microsoft Entra ランタイムと関連付ける際に使用できるクライアント ID (アプリケーション ID とも呼ばれます) が提供されます。 クライアント ID の詳細については、「Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」を参照してください。

Note

アプリケーションをネイティブ アプリケーションとして登録する場合は、リダイレクト URI 用に任意の有効な URI を指定できます。 ネイティブ アプリケーションの場合、この値が実際の URL である必要はありません。 Web アプリケーションの場合、リダイレクト URI はトークンが提供される URL を指定するため、有効な URI である必要があります。

アプリケーションを登録すると、次のように [アプリケーション (クライアント) ID][設定] に表示されます。

アプリケーション ID が強調されているアプリ登録ページを示すスクリーンショット。

クライアント シークレットの作成

アプリケーションでは、トークンを要求するときに ID を証明するためにクライアント シークレットが必要です。 「クライアント シークレットを追加する」の手順に従って、Microsoft Entra ID でアプリのクライアント シークレットを作成します。

Azure portal を使用して Azure ロールを割り当てる

目的のスコープ (Event Hubs 名前空間、リソース グループ、サブスクリプション) で、いずれかの Event Hubs ロールをアプリケーションのサービス プリンシパルに割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

ロールとそのスコープを定義したら、GitHub のこちらの場所にあるサンプルを使用してこの動作をテストできます。 Azure ロールベースのアクセス制御 (RBAC) と Azure portal を使用して Azure リソースへのアクセスを管理する方法の詳細については、こちらの記事を参照してください。

トークン取得のためのクライアント ライブラリ

アプリケーションの登録が完了して、Azure Event Hubs でデータを送受信するためのアクセス許可が付与された後は、セキュリティ プリンシパルを認証して OAuth 2.0 トークンを取得するためのコードをそのアプリケーションに追加できます。 認証してトークンを取得するには、Microsoft ID プラットフォームの認証ライブラリか、OpenID または Connect 1.0 をサポートする別のオープンソース ライブラリのいずれかを使用することができます。 その後、アプリケーションでアクセス トークンを使用して、Azure Event Hubs に対する要求を承認することができます。

トークンの取得がサポートされるシナリオについては、Microsoft Authentication Library (MSAL) for .NET の GitHub リポジトリのシナリオのセクションをご覧ください。

サンプル

次の関連記事を参照してください。