Microsoft Entra マネージド ID を使用して Azure SignalR Service リソースへの要求を承認する

Azure SignalR Service では、Microsoft Entra マネージド ID からの要求を承認するための Microsoft Entra ID がサポートされています。

この記事では、Azure SignalR Service リソースとコードを構成して、マネージド ID からリソースへの要求を承認する方法について説明します。

マネージド ID の構成

最初の手順では、マネージド ID を構成します。

この例では、Azure portal を使用して、仮想マシン (VM) でシステム割り当てマネージド ID を構成する方法を示します。

  1. Azure portal 上で、VM を検索して選択します。

  2. [設定] にある [ID] を選択します。

  3. [システム割り当て済み] タブで、 [状態][オン] に切り替えます。

    仮想マシンのシステム割り当てマネージド ID を有効にするための選択のスクリーンショット。

  4. [保存] ボタンを選択して変更を確定します。

ユーザー割り当てマネージド ID を作成する方法については、「ユーザー割り当てマネージド ID を作成する」を参照してください。

マネージド ID の構成の詳細については、次のいずれかの記事を参照してください。

Azure App Service と Azure Functions 用のマネージド ID を構成する方法については、「App Service と Azure Functions でマネージド ID を使用する方法」を参照してください。

Azure portal でロールの割り当てを追加する

以下の手順では、Azure SignalR Service リソース上のシステム割り当て ID に SignalR App Server ロールを割り当てる方法を説明します。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

Note

ロールは、管理グループ、サブスクリプション、リソース グループ、または 1 つのリソースを含む任意のスコープに割り当てることができます。 スコープの詳細については、「Azure RBAC のスコープについて」を参照してください。

  1. Azure portal で、Azure SignalR Service リソースに移動します。

  2. [アクセス制御 (IAM)] を選択します。

  3. [追加] > [ロール割り当ての追加] の順に選択します。

    [アクセス制御] のページと、ロールの割り当てを追加するための選択を示すスクリーンショット。

  4. [ロール] タブで、[SignalR App Server]\(SignalR アプリ サーバー\) を選択します。

  5. [メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。

  6. Azure サブスクリプションを選択します。

  7. [システム割り当てマネージド ID] を選び、ロールを割り当てる仮想マシンを検索して選びます。

  8. [確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。

重要

Azure ロールの割り当ての反映には最大で 30 分かかる可能性があります。

Azure ロールを割り当てて管理する方法の詳細については、次の記事を参照してください。

アプリの構成

アプリ サーバー

システム割り当て ID を使用する

DefaultAzureCredential または ManagedIdentityCredential のいずれかを使用して、Azure SignalR Service エンドポイントを構成できます。 ベスト プラクティスは、ManagedIdentityCredential を直接使用する方法です。

システム割り当てマネージド ID は、既定で使用されますが、DefaultAzureCredential を使用している場合は、EnvironmentCredential が予約するすべての環境変数を構成しないようにしてください。 それ以外の場合、Azure SignalR Service はフォールバックして、EnvironmentCredential を使用して要求を行います。通常、これは Unauthorized 応答が返されます。

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
    };
});

ユーザー割り当て ID を使用する

ManagedIdentityCredential オブジェクトの作成中に、ClientId を指定します。

重要

オブジェクト (プリンシパル) ID ではなく、クライアント ID を使用します。両方とも GUID である場合でも同様です。

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        var clientId = "<your identity client id>";
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
    };

Azure Functions における Azure SignalR Service のバインド

Azure Functions の Azure SignalR Service バインドでは、ポータルでアプリケーション設定を使用するか、ローカルで local.settings.json を使用して、Azure SignalR Service リソースにアクセスするようにマネージド ID を構成します。

ID を構成するには、キーと値のペアのグループが必要な場合があります。 すべてのキーと値のペアのキーは、接続名プレフィックス (既定値は AzureSignalRConnectionString) と区切り記号で始まる必要があります。 区切り記号は、ポータルではアンダースコア (__)、ローカルではコロン (:) です。 プレフィックスは、binding プロパティ ConnectionStringSetting を使用してカスタマイズできます。

システム割り当て ID を使用する

サービス URI のみを構成する場合は、DefaultAzureCredential クラスを使用します。 このクラスは、Azure とローカルの開発環境で同じ構成を共有する場合に便利です。 その仕組みについては、「DefaultAzureCredential」を参照してください。

Azure portal で、次の例を使用して DefaultAzureCredential を構成します。 これらの環境変数を構成しない場合は、システム割り当て ID が認証に使用されます。

<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net

local.settings.json ファイル内の DefaultAzureCredential の構成サンプルを次に示します。 ローカル スコープでは、マネージド ID はありません。 Visual Studio、Azure CLI、Azure PowerShell アカウントを使用した認証が順番に試行されます。

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net"
  }
}

システム割り当て ID を個別に使用し、他の環境変数の影響を受けずに使用する場合は、接続名プレフィックスを持つ credential キーを managedidentity に設定します。 アプリケーション設定のサンプルを次に示します。

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity

ユーザー割り当て ID を使用する

ユーザー割り当て ID を使用する場合は、接続名プレフィックスを含め、serviceUri キーと credential キーに加えて clientId を割り当てる必要があります。 アプリケーション設定のサンプルを次に示します。

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>

次のステップ

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