Azure Relay エンティティにアクセスするために Microsoft Entra ID を使用してアプリケーションを認証および認可する
Azure Relay は、Microsoft Entra ID を使用して、Azure Relay エンティティ (ハイブリッド接続、WCF Relay) への要求を認可することをサポートしています。 Microsoft Entra ID では、Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、セキュリティ プリンシパル (ユーザー、グループ、またはアプリケーションのサービス プリンシパルである可能性があります) にアクセス許可を付与できます。 ロールとロールの割り当ての詳細については、各種ロールの理解に関するページを参照してください。
Note
この機能は、21Vianet が運営する Microsoft Azure を除くすべてのリージョンで一般提供されています。
概要
セキュリティ プリンシパル (ユーザー、グループ、アプリケーション) で Relay エンティティへのアクセスが試行された場合、要求が承認される必要があります。 Microsoft Entra ID では、リソースへのアクセスは 2 段階のプロセスです。
- まず、セキュリティ プリンシパルの ID が認証され、OAuth 2.0 トークンが返されます。 トークンを要求するリソース名は
https://relay.azure.net
です。 アプリケーションが Azure VM、仮想マシン スケール セット、または Azure 関数アプリなどの Azure エンティティ内から実行されている場合、そのアプリケーションは、マネージド ID を使用してリソースにアクセスできます。 - 次に、トークンは、指定したリソース (ハイブリッド接続、WCF Relay) へのアクセスを承認するために、要求の一部として Relay サービスに渡されます。 Microsoft Entra は、Azure ロールベースのアクセス制御 (Azure RBAC) を通じて、セキュリティで保護されたリソースへのアクセス権を承認します。 Azure Relay によって、Relay エンティティへのアクセスに使用される一般的なアクセス許可セットを含む一連の Azure 組み込みロールが定義されます。 データにアクセスするためのカスタム ロールを定義することもできます。 Azure Relay でサポートされている組み込みロールの一覧については、「Azure Relay の Azure 組み込みロール」を参照してください。 Relay に対して要求を行うネイティブ アプリケーションと Web アプリケーションは、Microsoft Entra ID を使用して認可することもできます。
Azure Relay の Azure 組み込みロール
Azure Relay の場合、名前空間およびそれに関連するすべてのリソースの Azure portal および Azure リソース管理 API による管理は、Azure RBAC モデルを使って既に保護されています。 Azure では、Relay 名前空間へのアクセスを承認するための次の Azure 組み込みロールが提供されています。
Role | 説明 |
---|---|
Azure Relay 所有者 | このロールを使用して、Azure Relay リソースへのフル アクセスを許可します。 |
Azure Relay リスナー | このロールを使用して、Azure Relay リソースへのリッスンおよびエンティティ読み取りアクセスを許可します。 |
Azure Relay 送信者 | このロールを使用して、Azure Relay リソースへの送信およびエンティティ読み取りアクセスを許可します。 |
リソースのスコープ
セキュリティ プリンシパルに Azure ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定します。 ベスト プラクティスとしては、常にできるだけ狭いスコープのみを付与するのが最善の方法です。
次のリストは、Azure Relay リソースへのアクセスのスコープとして指定できるレベルを、最も狭いスコープから順に示しています。
- Relay エンティティ: ロールの割り当ては、ハイブリッド接続や WCF Relay などの特定の Relay エンティティに適用されます。
- Relay 名前空間: ロールの割り当ては、名前空間の下のすべての Relay エンティティに適用されます。
- リソース グループ: ロールの割り当ては、リソース グループの下のすべての Relay リソースに適用されます。
- サブスクリプション: ロールの割り当ては、サブスクリプションのすべてのリソース グループ内のすべての Relay リソースに適用されます。
Note
Azure ロールの割り当ての反映には最大で 5 分かかる場合があることに留意してください。 組み込みのロールの定義方法の詳細については、ロール定義に関するページを参照してください。 Azure カスタム ロールの作成については、「Azure カスタム ロール」を参照してください。
アプリからの認証
Azure Relay で Microsoft Entra ID を使用する主な利点は、資格情報をコード内に格納する必要がなくなることです。 代わりに、Microsoft ID プラットフォームから OAuth 2.0 アクセス トークンを要求することができます。 Microsoft Entra によって、アプリケーションを実行しているセキュリティ プリンシパル (ユーザー、グループ、またはサービス プリンシパル) が認証されます。 認証が成功すると、Microsoft Entra ID からアプリケーションにアクセス トークンが返されます。アプリケーションでは、このアクセス トークンを使用して Azure Relay への要求を認可できます。
以降のセクションでは、Microsoft ID プラットフォーム 2.0 による認証を行うためにコンソール アプリケーションを構成する方法を説明します。 詳細については、Microsoft ID プラットフォーム (v2.0) の概要に関する記事を参照してください。
OAuth 2.0 コード付与フローの概要については、「OAuth 2.0 コード付与フローを使用して Microsoft Entra Web アプリケーションへアクセスを承認する」を参照してください。
Microsoft Entra テナントにアプリケーションを登録する
Microsoft Entra ID を使用して Azure Relay エンティティを認可する最初のステップは、Azure portal からクライアント アプリケーションを Microsoft Entra テナントに登録することです。 クライアント アプリケーションの登録では、アプリケーションに関する情報を AD に提供します。 これで Microsoft Entra ID から、アプリケーションを Microsoft Entra ランタイムと関連付ける際に使用できるクライアント ID (アプリケーション ID とも呼ばれます) が提供されます。
アプリケーションを Microsoft Entra ID に登録する詳細なステップについては、Microsoft Entra ID へのアプリケーションの登録のクイックスタートを参照してください。
重要
[ディレクトリ (テナント) ID] と [アプリケーション (クライアント) ID] をメモします。 サンプル アプリケーションを実行するためにこれらの値が必要になります。
クライアント シークレットの作成
アプリケーションでは、トークンを要求するときに ID を証明するためにクライアント シークレットが必要です。 上記のリンク先の同じ記事で、「クライアント シークレットの追加」セクションを参照してクライアント シークレットを作成してください。
重要
[クライアント シークレット] をメモします。 サンプル アプリケーションを実行するために必要になります。
Azure portal を使用して Azure ロールを割り当てる
目的のスコープ (Azure Relay 名前空間、リソース グループ、サブスクリプション) で、いずれかの Azure Relay ロールをアプリケーションのサービス プリンシパルに割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
サンプルの実行
GitHub からコンソール アプリケーション サンプルをからダウンロードします。
README の記事の指示に従って、コンピューター上のローカルでアプリケーションを実行します。
Note
同じステップに従って、WCF Relay 用のサンプル コンソール アプリケーションを実行します。
強調表示されたサンプル コード
これは、Microsoft Entra 認証を使用して Azure Relay サービスに接続する方法を示すサンプル コードです。
TokenProvider.CreateAzureActiveDirectoryTokenProvider
メソッドを使用して、TokenProvider オブジェクトを作成します。まだアプリ登録を作成していない場合は、アプリケーションを Microsoft Entra ID に登録するセクションを参照して作成し、「クライアント シークレットの作成」セクションで説明したようにクライアント シークレットを作成します。
既存のアプリ登録を使用する場合は、これらの手順に従ってアプリケーション (クライアント) ID とディレクトリ (テナント) ID を取得します。
- Azure portal にサインインします。
- 上部にある検索バーを使用して、Microsoft Entra ID を検索して選択します。
- Microsoft Entra ID ページの左メニューの [管理] セクションで [アプリの登録] を選択します。
- アプリの登録を選択します。
- アプリの登録ページには、[アプリケーション (クライアント) ID] と [ディレクトリ (テナント) ID] の値が表示されます。
クライアント シークレットを取得するには、次の手順を実行します。
- アプリの登録ページで、左メニューの [証明書とシークレット] を選択します。
- [クライアント シークレット] セクションのシークレットの [値] 列のコピー ボタンを使用します。
static TokenProvider GetAadTokenProvider(string clientId, string tenantId, string clientSecret) { return TokenProvider.CreateAzureActiveDirectoryTokenProvider( async (audience, authority, state) => { IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId) .WithAuthority(authority) .WithClientSecret(clientSecret) .Build(); var authResult = await app.AcquireTokenForClient(new [] { $"{audience}/.default" }).ExecuteAsync(); return authResult.AccessToken; }, $"https://login.microsoftonline.com/{tenantId}"); }
前の手順で作成したハイブリッド接続 URI およびトークン プロバイダーを渡して、HybridConnectionListener または HybridConnectionClient オブジェクトを作成します。
リスナー:
var listener = new HybridConnectionListener(hybridConnectionUri, tokenProvider);
送信者:
var sender = new HybridConnectionClient(hybridConnectionUri, tokenProvider);
サンプル
- ハイブリッド接続: .NET、Java、JavaScript
- WCF Relay: .NET
次のステップ
- Azure RBAC の詳細については、「Azure ロールベースのアクセス制御 (Azure RBAC) とは」を参照してください。
- Azure PowerShell、Azure CLI、または REST API で Azure ロールを割り当てて管理する方法については、次の記事を参照してください。
Azure Relay の詳細については、次の記事を参照してください。