Azure Event Hubsは、Microsoft Entra IDを使ってEvent Hubsリソースへのリクエストを承認することをサポートしており、これにより安全な認証と細かなアクセス制御が提供されています。 Microsoft Entra IDを使うことで、Azureの役割ベースアクセス制御(Azure RBAC)を使って、ユーザーやアプリケーションサービスプリンシパルなどのセキュリティプリンシパルに権限を付与します。 このアプローチにより、共有アクセスキーの必要性がなくなり、イベントハブソリューションのセキュリティが向上します。
Overview
セキュリティ プリンシパル (ユーザーまたはアプリケーション) が Event Hubs リソースにアクセスしようとした場合、要求は承認される必要があります。 Microsoft Entra IDを使用することで、リソースへのアクセスは2段階のプロセスとなります。
- まず、セキュリティ プリンシパルの ID が "認証" され、OAuth 2.0 トークンが返されます。 トークンを要求するためのリソース名は
https://eventhubs.azure.net/で、すべてのクラウドやテナントで同じです。 Kafka クライアントの場合、トークンを要求するリソースはhttps://<namespace>.servicebus.windows.netです。 - 次に、指定したリソースへのアクセスを承認するために、トークンが要求の一部として Event Hubs サービスに渡されます。
認証の手順により、実行時にアプリケーション要求に OAuth 2.0 アクセス トークンが含まれる必要があります。 アプリケーションがAzure仮想マシン(VM)、仮想マシンスケールセット、またはAzure FunctionsアプリなどのAzureエンティティ内で動作する場合、管理型アイデンティティを使ってリソースにアクセスできます。 マネージド ID によって Event Hubs サービスに対して行われる要求を認証する方法については、「Microsoft Entra ID と Azure リソースのマネージド ID を使用して Azure Event Hubs リソースへのアクセスを認証する」をご覧ください。
承認の手順では、セキュリティ プリンシパルに 1 つまたは複数の Azure ロールを割り当てる必要があります。 Azure Event Hubs には、Event Hubs リソースの一連のアクセス許可を含む Azure ロールが用意されています。 セキュリティ プリンシパルに割り当てられているロールによって、プリンシパルが持つアクセス許可が決まります。 Azure ロールの詳細については、「Azure Event Hubs の Azure の組み込みロール」を参照してください。
ネイティブアプリケーションやイベントハブへのリクエストを行うウェブアプリケーションも、Microsoft Entra IDを使用して認証できます。 アクセス トークンを要求し、それを使用して Event Hubs リソースへの要求を承認する方法については、アプリケーションから Microsoft Entra ID を使用して Azure Event Hubs へのアクセスを認証する方法に関する記事を参照してください。
アクセス権の Azure ロールを割り当てる
Microsoft Entra は、Azure ロールベースのアクセス制御 (Azure RBAC) を通じて、セキュリティで保護されたリソースへのアクセス権を承認します。 Azure Event Hubsは、イベントハブデータにアクセスするために使われる共通の権限セットを含むAzure組み込みロールのセットを定義しており、データにアクセスするためのカスタムロールも定義できます。
Microsoft EntraのセキュリティプリンシパルにAzureの役割を割り当てると、Azureはそのセキュリティプリンシパルのリソースへのアクセス権を付与します。 サブスクリプションレベル、リソースグループ、イベントハブの名前空間、またはそれに属する任意のリソースへのアクセス範囲を設定できます。 Microsoft Entraのセキュリティプリンシパルは、ユーザー、アプリケーションサービスプリンシパル、またはAzureリソースのマネージドアイデンティティのいずれかです。
Azure Event Hubs 向けの Azure 組み込みロール
Azureは、Microsoft Entra IDおよびOAuthを使ってEvent Hubsデータへのアクセスを認証するための以下の組み込みロールを提供しています:
| Role | Description |
|---|---|
| Azure Event Hubs データ所有者 | Event Hubs リソースへの完全なアクセス権を付与するには、このロールを使用します。 |
| Azure Event Hubs データ送信者 | セキュリティ プリンシパルが Event Hubs リソースにイベントを送信できるようにするには、このロールを使用します。 |
| Azure Event Hubs データ受信者 | このロールを使用して、セキュリティ プリンシパルが Event Hubs リソースからイベントを受信できるようにします。 |
スキーマ レジストリの組み込みロールについては、スキーマ レジストリのロールに関する記事を参照してください。
リソースのスコープ
セキュリティ プリンシパルに Azure ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定します。 可能な限り狭いスコープのみを付与します。
次の一覧で、Event Hubs リソースへのアクセスのスコープとして指定できるレベルを、最も狭いスコープから順に示します。
- コンシューマー グループ:このスコープでは、ロールの割り当てはこのエンティティにのみ適用されます。 現時点で、Azure portal は、このレベルのセキュリティ プリンシパルに Azure ロールを割り当てることをサポートしていません。
- イベント ハブ: ロールの割り当ては、イベント ハブとそのコンシューマー グループに適用されます。
- 名前空間:ロールの割り当ては、名前空間以下とそれに関連付けられているコンシューマー グループに対する Event Hubs のトポロジ全体にわたります。
- [リソース グループ] :ロールの割り当ては、リソース グループのすべての Event Hubs リソースに適用されます。
- サブスクリプション:ロールの割り当ては、サブスクリプションのすべてのリソース グループ内のすべての Event Hubs リソースに適用されます。
Note
- Azure ロールの割り当ての反映には最大で 5 分かかる場合があることに注意してください。
- このコンテンツは、Event Hubs と Apache Kafka 用 Event Hubs の両方を対象としています。 Kafka 用 Event Hubs のサポートの詳細については、Kafka 用 Event Hubs のセキュリティと認証に関するセクションを参照してください。
組み込みのロールの定義方法の詳細については、ロール定義に関するページを参照してください。 Azure カスタム ロールの作成については、「Azure カスタム ロール」を参照してください。
Samples
Microsoft.Azure.EventHubsのサンプル。
これらのサンプルでは、レガシ Microsoft.Azure.EventHubs ライブラリが使われていますが、最新の Azure.Messaging.EventHubs ライブラリを使うように簡単に更新できます。 レガシ ライブラリから新しいライブラリを使うようにサンプルを移行する方法については、Microsoft.Azure.EventHubs から Azure.Messaging.EventHubs への移行のガイドに関する記事を参照してください。
Azure.Messaging.EventHubs サンプル
このサンプルは、最新の Azure.Messaging.EventHubs ライブラリを使用するように更新されています。