Azure Relay リソースにアクセスするためのマネージド ID を Microsoft Entra ID で認証する

Azure リソースのマネージド ID は、デプロイに関連付けられ、その下でアプリケーション コードが実行されるセキュリティ保護された ID を作成できる Azure 間機能です。 この ID は、アプリケーションに必要な特定の Azure リソースにアクセスするためのカスタム アクセス許可を付与するアクセス制御ロールに関連付けることができます。

マネージド ID では、Azure プラットフォームがこのランタイム ID を管理します。 ID 自体やアクセスする必要のあるリソース用に、アクセス キーをアプリケーション コードや構成に保存して保護する必要はありません。 Azure リソース サポートに対してマネージド エンティティが有効にされている Azure App Service アプリケーション内または仮想マシンで実行されている Relay クライアント アプリは、SAS ルールと SAS キーや、その他のアクセス トークンを処理する必要はありません。 クライアント アプリに必要なのは、Relay 名前空間のエンドポイント アドレスだけです。 アプリが接続すると、Relay はこの記事で後述する例に示す操作で、マネージド エンティティのコンテキストをクライアントにバインドします。 マネージド ID に関連付けられると、Relay クライアントは承認済みのすべての操作を実行できます。 マネージド エンティティを Relay のロールに関連付けることによって承認が付与されます。

Note

この機能は、21Vianet が運営する Microsoft Azure を含め、すべてのリージョンで一般提供されています。

概要

セキュリティ プリンシパル (ユーザー、グループ、アプリケーション) で Relay エンティティへのアクセスが試行された場合、要求が承認される必要があります。 Microsoft Entra ID では、リソースへのアクセスは 2 段階のプロセスです。

  1. まず、セキュリティ プリンシパルの ID が認証され、OAuth 2.0 トークンが返されます。 トークンを要求するリソース名は https://relay.azure.net です。 アプリケーションが Azure VM、仮想マシン スケール セット、または Azure 関数アプリなどの Azure エンティティ内から実行されている場合、そのアプリケーションは、マネージド ID を使用してリソースにアクセスできます。
  2. 次に、トークンは、指定したリソース (ハイブリッド接続、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 カスタム ロール」を参照してください。

マネージド ID の有効化

最初に、Azure Relay エンティティ (ハイブリッド接続または WCF リレー) にアクセスする必要のある Azure リソースのマネージド ID を有効にします。 たとえば、Relay クライアント アプリケーションが Azure VM で実行されている場合、「Azure VM のマネージド ID を構成する」の記事の手順に従って、VM のマネージド ID を有効にします。 この設定を有効にすると、新しいマネージド サービス ID が Microsoft Entra ID に作成されます。

マネージド ID をサポートするサービスの一覧については、「Azure リソースのマネージド ID をサポートするサービス」を参照してください。

マネージド ID に Azure Relay ロールを割り当てる

マネージド ID を有効にした後、適切なスコープの ID に Azure Relay ロール (Azure Relay 所有者、Azure Relay リスナー、または Azure Relay 送信者) のいずれかを割り当てます。 Azure ロールがマネージド ID に割り当てられると、適切なスコープで Relay エンティティへのアクセス権がそのマネージド ID に付与されます。

次のセクションでは、Azure VM インスタンスのマネージド ID で実行され、Relay リソースにアクセスする単純なアプリケーションを使用します。

Relay エンティティにアクセスする VM 上のサンプル アプリ

  1. ハイブリッド接続サンプル コンソール アプリケーションを GitHub からコンピューターにダウンロードします。

  2. Azure VM を作成します。 このサンプルでは、Windows 10 のイメージを使用します。

  3. Azure VM 用のシステムによって割り当てられた ID、またはユーザーによって割り当てられた ID を有効にします。 手順については、「VM の ID を有効にする」を参照してください。

  4. 目的のスコープ (Relay エンティティ、Relay 名前空間、リソース グループ、サブスクリプション) で、いずれかの Relay ロールをマネージド サービス ID に割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

  5. README ドキュメントの手順に従って、ローカル コンピューター上にコンソール アプリをローカルにビルドします。

  6. ”<ご自分のローカル パス>”\RoleBasedAccessControl\bin\Debug フォルダーにある実行可能ファイルを VM にコピーします。 RDP を使用して、Azure VM に接続できます。 詳細については、「Windows が実行されている Azure 仮想マシンに接続してサインオンする方法」を参照してください。

  7. README ドキュメントの手順に従って、Azure VM で RoleBasedAccessControl.exe を実行します。

    Note

    同じ手順に従って、WCF Relay 用のコンソール アプリケーションを実行します。

強調表示されたサンプル コード

これは、Microsoft Entra 認証を使用して Azure Relay サービスに接続する方法を示すサンプル コードです。

  1. TokenProvider.CreateManagedIdentityTokenProvider メソッドを使用して、TokenProvider オブジェクトを作成します。

    • システム割り当てマネージド ID を使用している場合:
      TokenProvider.CreateManagedIdentityTokenProvider();
      
    • ユーザー割り当てマネージド ID を使用している場合、Azure portal の [マネージド ID] ページから、ユーザー割り当て ID のクライアント ID を取得します。 詳細については、「ユーザー割り当てマネージド ID を一覧表示する」を参照してください。
      var managedCredential = new ManagedIdentityCredential(clientId);
      tokenProvider = TokenProvider.CreateManagedIdentityTokenProvider(managedCredential);    
      
  2. 前の手順で作成したハイブリッド接続 URI およびトークン プロバイダーを渡して、HybridConnectionListener または HybridConnectionClient オブジェクトを作成します。

    リスナー:

    var listener = new HybridConnectionListener(hybridConnectionUri, tokenProvider);    
    

    送信者:

    var sender = new HybridConnectionClient(hybridConnectionUri, tokenProvider);    
    

サンプル

次のステップ

Azure Relay の詳細については、次の記事を参照してください。