Event Hubs リソースにアクセスするために Azure Active Directory でアプリケーションを認証する

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

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

注意

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

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

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

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

重要

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

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

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

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

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

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

Azure AD を使用して Event Hubs リソースを承認する最初の手順は、Azure portal からクライアント アプリケーションを Azure AD テナントに登録することです。 クライアント アプリケーションの登録では、アプリケーションに関する情報を AD に提供します。 これで Azure AD から、アプリケーションを Azure AD ランタイムと関連付ける際に使用できるクライアント ID (アプリケーション ID とも呼ばれます) が提供されます。 クライアント ID の詳細については、「Azure Active Directory のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」を参照してください。

次の画像は、Web アプリケーションを登録するための手順を示します。

アプリケーションを登録する

注意

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

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

登録されたアプリケーションのアプリケーション ID

Azure AD へのアプリケーションの登録について詳しくは、「Azure Active Directory とアプリケーションの統合」を参照してください。

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

アプリケーションでは、トークンを要求するときに ID を証明するためにクライアント シークレットが必要です。 クライアント シークレットを追加するには、次の手順を行います。

  1. Azure portal でアプリの登録に移動します。

  2. [証明書とシークレット] の設定を選択します。

  3. [クライアント シークレット] で、 [新しいクライアント シークレット] を選択して新しいシークレットを作成します。

  4. シークレットの説明を入力し、適切な有効期限の間隔を選択します。

  5. すぐに新しいシークレットの値を安全な場所にコピーします。 完全な値は 1 回だけ表示されます。

    クライアント シークレット

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 リポジトリのシナリオのセクションを参照してください。

サンプル

次のステップ

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