Azure Service Bus では、Microsoft Entra ID を使用して Service Bus エンティティ (キュー、トピック、サブスクリプション、またはフィルター) への要求を承認することがサポートされています。 Microsoft Entra ID を使用すると、Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、セキュリティ プリンシパルにアクセス許可を付与できます。 セキュリティ プリンシパルには、Azure リソースのユーザー、グループ、アプリケーション サービス プリンシパル、または マネージド ID を指定できます。
Azure Service Bus で Microsoft Entra ID を使用する主な利点は、資格情報をコード内に格納する必要がなくなることです。 代わりに、Microsoft ID プラットフォームから OAuth 2.0 アクセス トークンを要求することができます。 認証が成功すると、Microsoft Entra ID はアクセス トークンをアプリケーションに返します。 その後、アプリケーションはアクセス トークンを使用して、Service Bus リソースへの要求を承認できます。
Service Bus 名前空間のローカルまたは共有アクセス署名 (SAS) キー認証を無効にし、Microsoft Entra 認証のみを許可できます。 詳細な手順については、「ローカル認証の無効化」を参照してください。
概要
セキュリティ プリンシパル (ユーザー、グループ、またはアプリケーション) で Service Bus エンティティへのアクセスが試行された場合、要求が承認される必要があります。 Microsoft Entra ID では、リソースへのアクセスは 2 段階のプロセスです。
- セキュリティ プリンシパルの ID が認証され、OAuth 2.0 トークンが返されます。 トークンを要求するリソース名は
https://servicebus.azure.netです。 - トークンは、指定されたリソースへのアクセスを承認する要求の一部として Service Bus サービスに渡されます。
認証の手順により、実行時にアプリケーション要求に OAuth 2.0 アクセス トークンが含まれる必要があります。 アプリケーションが Azure 仮想マシン、仮想マシン スケール セット、関数アプリなどの Azure エンティティ内で実行されている場合は、マネージド ID を使用してリソースにアクセスできます。 マネージド ID が Service Bus サービスに対して行う要求を認証する方法については、「 Azure Service Bus でマネージド ID を使用する」を参照してください。
承認手順では、1 つ以上の Azure ロールをセキュリティ プリンシパルに割り当てます。 Service Bus には、Service Bus リソースのアクセス許可のセットを含む Azure ロールが用意されています。 セキュリティ プリンシパルに割り当てられるロールによって、プリンシパルが Service Bus リソースに対して持つアクセス許可が決まります。 Service Bus への Azure ロールの割り当ての詳細については、 Azure Service Bus の Azure 組み込みロールに関するページを参照してください。
Service Bus に対して要求を行うネイティブ アプリケーションと Web アプリケーションは、Microsoft Entra ID を使用して承認することもできます。 この記事では、アクセス トークンを要求し、それを使用して Service Bus リソースへの要求を承認する方法を示します。
Azure Service Bus 用の Azure 組み込みロール
Microsoft Entra では、Azure RBAC を使用して、セキュリティで保護されたリソースへのアクセス権を認可します。 Azure Service Bus は、Service Bus エンティティへのアクセスに使用される一般的なアクセス許可セットを含む Azure 組み込みロールのセットを定義します。 データにアクセスするためのカスタム ロールを定義することもできます。
Azure ロールが Microsoft Entra のセキュリティ プリンシパルに割り当てられると、Azure はそれらのリソースへのアクセスをそのセキュリティ プリンシパルに許可します。 アクセスのスコープは、サブスクリプション、リソース グループ、Service Bus 名前空間、またはエンティティ (キュー、トピック、またはサブスクリプション) のレベルに設定できます。 Microsoft Entra セキュリティ プリンシパルは、ユーザー、グループ、アプリケーション サービス プリンシパル、または Azure リソースのマネージド ID である可能性があります。
Azure Service Bus の場合、Azure RBAC モデルは、Azure portal と Azure リソース管理 API を使用して、名前空間とすべての関連リソースの管理を保護するのに役立ちます。 Azure には、Service Bus 名前空間へのアクセスを承認するための次の組み込みロールが用意されています。
- Azure Service Bus データ所有者: このロールを使用して、Service Bus リソースへのフル アクセスを付与します。
- Azure Service Bus データ送信者: Service Bus 名前空間とそのエンティティへの送信アクセス権を付与するには、このロールを使用します。
- Azure Service Bus データ受信者:このロールを使用して、Service Bus 名前空間とそのエンティティへの受信アクセスを許可します。
リソースのスコープ
セキュリティ プリンシパルに Azure ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定します。 ベスト プラクティスとしては、常にできるだけ狭いスコープのみを付与するのが最善の方法です。
次の一覧で、Service Bus リソースへのアクセスのスコープとして指定できるレベルを、最も狭いスコープから順に示します。
キュー、トピック、またはサブスクリプション: ロールの割り当ては、特定の Service Bus エンティティに適用されます。 現時点では、Azure portal では、ユーザー、グループ、またはマネージド ID をトピック サブスクリプション レベルで Service Bus Azure ロールに割り当てることはサポートされていません。
Service Bus 名前空間: ロールの割り当て対象は、Service Bus のその名前空間に属するトポロジ全体と、それに関連付けられたキューまたはトピック サブスクリプションです。
[リソース グループ] :ロールの割り当ては、リソース グループのすべての Service Bus リソースに適用されます。
Azure サブスクリプション: ロールの割り当ては、サブスクリプション内のすべてのリソース グループ内のすべての Service Bus リソースに適用されます。
Azure ロールの割り当ての反映には最大で 5 分かかる場合があることに留意してください。
組み込みロールの定義方法の詳細については、「 Azure ロールの定義について」を参照してください。 Azure カスタム ロールの作成については、「Azure カスタム ロール」を参照してください。
アプリケーションからの認証
Service Bus で Microsoft Entra ID を使用する主な利点は、資格情報をコード内に格納する必要がなくなることです。 代わりに、Microsoft ID プラットフォームから OAuth 2.0 アクセス トークンを要求することができます。
Microsoft Entra は、アプリケーションを実行しているセキュリティ プリンシパル (ユーザー、グループ、サービス プリンシパル、または Azure リソース のマネージド ID) を認証します。 認証が成功すると、Microsoft Entra ID はアクセス トークンをアプリケーションに返します。 その後、アプリケーションはアクセス トークンを使用して、Service Bus への要求を承認できます。
次のセクションでは、Microsoft ID プラットフォーム 2.0 での認証用にネイティブ アプリケーションまたは Web アプリケーションを構成する方法について説明します。 プラットフォームの詳細については、「 Microsoft ID プラットフォームとは」を参照してください。
OAuth 2.0 コード付与フローの概要については、 Microsoft ID プラットフォームと OAuth 2.0 承認コード フローに関するページを参照してください。
Microsoft Entra テナントにアプリケーションを登録する
Microsoft Entra ID を使用して Service Bus エンティティを承認する最初の手順は、Azure portal からクライアント アプリケーションを Microsoft Entra テナントに登録することです。 クライアント アプリケーションを登録するときに、アプリケーションに関する情報を Active Directory に提供します。 その後、Microsoft Entra ID は、アプリケーションを Microsoft Entra ランタイムに関連付けるために使用できるクライアント ID (アプリケーション ID とも呼ばれます) を提供します。 クライアント ID の詳細については、「Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」を参照してください。
Microsoft Entra ID でアプリケーションを登録するには、「Microsoft Entra ID にアプリケーションを登録する」の手順に従います。
注
アプリケーションをネイティブ アプリケーションとして登録する場合は、リダイレクト URI に任意の有効な URI を指定できます。 ネイティブ アプリケーションの場合、この値は実際の URL である必要はありません。 Web アプリケーションの場合、リダイレクト URI はトークンが提供される URL を指定するため、有効な URI である必要があります。
アプリケーションを登録すると、[設定] にアプリケーション (クライアント) ID とディレクトリ (テナント) ID が表示されます。 これらの値を書き留めます。 アプリケーションを実行するには、それらを必要とします。
クライアント シークレットの作成
アプリケーションでは、トークンを要求するときに ID を証明するためにクライアント シークレットが必要です。 クライアント シークレットを追加するには、次の手順に従います。
ページにまだアクセスしていない場合は、Azure portal でアプリの登録に移動します。
左側のメニューで、[ 証明書とシークレット] を選択します。
[クライアント シークレット] で、 [新しいクライアント シークレット] を選択して新しいシークレットを作成します。
シークレットの説明を入力し、有効期限を選択して、[ 追加] を選択します。
すぐに新しいシークレットの値を安全な場所にコピーします。 完全な値は 1 回だけ表示されます。
Service Bus API のアクセス許可を追加する
アプリケーションがコンソール アプリケーションの場合は、ネイティブ アプリケーションを登録し、必要なアクセス許可のセットに Microsoft.ServiceBus の API アクセス許可を追加する必要があります。
ネイティブ アプリケーションには、識別子として機能する Microsoft Entra ID の リダイレクト URI も必要です。 URI はネットワーク宛先である必要はありません。 この例では、サンプル コードが https://servicebus.microsoft.com を既に使っているため、この URI を使います。
Azure portal を使用した Azure ロールの割り当て
目的のスコープ (エンティティ、 Service Bus 名前空間、リソース グループ、または Azure サブスクリプション) で、いずれかの Service Bus ロールをアプリケーションのサービス プリンシパルに割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
ロールとそのスコープを定義したら、 GitHub のサンプルでこの動作をテストできます。
Service Bus クライアントの認証
アプリケーションを登録し、Azure Service Bus でデータを送受信するためのアクセス許可を付与したら、クライアント シークレット資格情報を使用してクライアントを認証できます。 この認証を使用すると、Azure Service Bus に対して要求を行うことができます。
トークンの取得がサポートされているシナリオの一覧については、.NET GitHub リポジトリの Microsoft Authentication Library (MSAL) の「シナリオ」セクションを参照してください。
最新の Azure.Messaging.ServiceBus ライブラリを使用すると、Azure.Identity ライブラリで定義されている ClientSecretCredential を使用して ServiceBusClient を認証できます。
TokenCredential credential = new ClientSecretCredential("<tenant_id>", "<client_id>", "<client_secret>");
var client = new ServiceBusClient("<fully_qualified_namespace>", credential);
以前の .NET パッケージを使用している場合は、 GitHub の Service Bus の Azure RBAC サンプルを参照してください。
関連するコンテンツ
Azure RBAC の詳細については、「 Azure ロールベースのアクセス制御 (Azure RBAC) とは」を参照してください。
Azure PowerShell、Azure CLI、または REST API を使用して Azure ロールの割り当てを割り当てて管理する方法については、次の記事を参照してください。
Service Bus メッセージングの詳細については、次の記事を参照してください。