次の方法で共有


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

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

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

マネージド ID の構成

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

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

  1. 左側のナビゲーション ウィンドウの [設定] グループで、Azure portal でアプリの設定にアクセスします。

  2. [ID] を選択します。

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

    [状態] を [オン] に切り替えて [保存] を選択する場所を示すスクリーンショット。

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

Azure VM でのマネージド ID の構成の詳細については、「Azure 仮想マシン (VM) 上でマネージド 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 を使用する

Azure SignalR SDK では、ID ベースの接続文字列がサポートされています。 構成が App Server の環境変数で設定されている場合は、App Server を再デプロイする必要はなく、アクセス キーから MSI に移行するための構成の変更のみが必要です。 たとえば、App Server の環境変数 Azure__SignalR__ConnectionStringEndpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0; に更新します。 または、DI コードで設定します。

services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;Version=1.0;");

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

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

重要

この方法で環境変数から発生した Azure__SignalR__ConnectionString は削除してください。 Azure__SignalR__ConnectionString は、最優先で既定の ServiceEndpoint を構築するために使用され、App Server が予期せずアクセス キーを使用する可能性があります。

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 である場合でも同様です。

ID ベースの接続文字列を使用してください。

services.AddSignalR().AddAzureSignalR("Endpoint=https://<resource1>.service.signalr.net;AuthType=azure.msi;ClientId=<your-user-identity-client-id>;Version=1.0;");

または、ManagedIdentityCredential を使用して ServiceEndpoint を構築します。

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        var clientId = "<your-user-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>

次のステップ

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